diff --git a/src/calc.js b/src/calc.js index 02566bc..2a1efb6 100644 --- a/src/calc.js +++ b/src/calc.js @@ -20,15 +20,18 @@ export default function(input, context) { } const operator = { - '^': 5, - '*': 4, '/': 4, '%': 4, - '+': 3, '-': 3, - '(': 2, ')': 2, - '<': 1, '>': 1, - '=': 1, '==': 1, - '≤': 1, '<=': 1, - '≥': 1, '>=': 1, - '≠': 1, '!=': 1, + '^': 7, + '*': 6, '/': 6, '÷': 6, '%': 6, + '&': 5, '|': 5, + '+': 4, '-': 4, + '<': 3, '>': 3, + '=': 3, '==': 3, + '≤': 3, '<=': 3, + '≥': 3, '>=': 3, + '≠': 3, '!=': 3, + '∧': 2, '&&': 2, + '∨': 2, '||': 2, + '(': 1 , ')': 1, } function calc(expr, context, repeat = []) { @@ -107,6 +110,9 @@ function get_tokens(input) { if (c == '=' && last_token && /^[!<>=]$/.test(last_token.value)) { last_token.value += c; } + else if (/^[|&]$/.test(c) && last_token && last_token.value == c) { + last_token.value += c; + } else if (c == '-' && expr[i - 1] == 'e') { num += c; } @@ -236,15 +242,18 @@ function compute(op, a, b) { case '+': return a + b; case '-': return a - b; case '*': return a * b; - case '/': return a / b; case '%': return a % b; - case '^': return Math.pow(a, b); + case '|': return a | b; case '<': return a < b; case '>': return a > b; + case '^': return Math.pow(a, b); + case '÷': case '/': return a / b; case '=': case '==': return a == b; case '≤': case '<=': return a <= b; case '≥': case '>=': return a >= b; case '≠': case '!=': return a != b; + case '∧': case '&&': return a && b; + case '∨': case '||': return a || b; } }