diff --git a/umd/index.js b/umd/index.js index 5e77b89..49094b6 100644 --- a/umd/index.js +++ b/umd/index.js @@ -72,7 +72,8 @@ // TODO: this needs to tokenize numbers together function tokenize(str) { - const regexp = /(('[^']*?')|("[^"]*?")|(`[^`]*?`)|([()/*+\-%|&=[\]]+))/g; + // split text within quotes (', ", `) or operators + const regexp = /(('[^']*?')|("[^"]*?")|(`[^`]*?`)|([()/*+\-%|!&=[\]]+?))/g; return str .replace(regexp, m => ` ${ m } `) .trim() @@ -1963,7 +1964,8 @@ parser.unaryOps = { '-': parser.unaryOps['-'], '+': parser.unaryOps['+'], - '!': parser.unaryOps['!'], + '!': parser.unaryOps['not'], + 'not': parser.unaryOps['not'], }; parser.functions = { @@ -2002,6 +2004,10 @@ return a in b; } }, + '||': (a, b) => Boolean(a || b), + + // binary AND is not supported by expr-eval. See expr-eval issue #253. + // '&&': (a, b) => Boolean(a || b), }; parser.consts = { @@ -2074,13 +2080,13 @@ stack.join(' > ') } > ${ contents - }` + }`, ); } stack.push(contents); - const operators = /(()|()|()|[()/*+\-%|&=[\]])+/g; + const operators = /([()/*+!\-%|&=[\]])+/g; const expr = tokenize(contents) .map(t => { operators.lastIndex = 0; @@ -2098,8 +2104,16 @@ } else { return t; } - }) - .join(''); + }).map(t => { + // add some spaces around non numbers and operators to avoid + // inadvertently creating a variable token. + operators.lastIndex = 0; + if (/^[^0-9.]/.test(t) && !operators.test(t)) { + return ` ${ t } `; + } else { + return t; + } + }).join(''); stack.pop(); @@ -2215,7 +2229,9 @@ obj.name = name; if (def.startsWith('\'') && def.endsWith('\'')) { - obj.def = def.substr(1, def.length - 2); + // strip quotes from the default value if it happens to be a string like so: + // a:='0.0 1.0 2.0' + obj.def = def.substring(1, def.length - 1); } else { obj.def = def; } @@ -2236,9 +2252,10 @@ // parse params const inputMap = {}; if (params) { + // find param definitions including string values like a:='0.0 1.0 2.0' const inputs = params .trim() - .match(/[^\s']+(['][^']*['])?/g) + .match(/[^\s']+('[^']*')?/g) .map(s => parseMacroParam(s)); inputs.forEach(inp => { inputMap[inp.name] = inp; diff --git a/umd/index.js.map b/umd/index.js.map index db99712..c92d71e 100644 --- a/umd/index.js.map +++ b/umd/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../src/utils.js","../node_modules/expr-eval/dist/index.mjs","../src/evaluateExpression.js","../src/XacroParser.js","../src/XacroLoader.js"],"sourcesContent":["\r\nexport function getUrlBase(url) {\r\n const tokens = url.split(/[\\\\/]/g);\r\n tokens.pop();\r\n if (tokens.length === 0) {\r\n return './';\r\n } else {\r\n return tokens.join('/') + '/';\r\n }\r\n}\r\n\r\n// XML Helpers\r\n// QuerySelectorAll that respects tag prefixes like 'xacro:'\r\nexport function getElementsWithName(node, name, res = []) {\r\n if (node.tagName === name) {\r\n res.push(node);\r\n }\r\n for (let i = 0, l = node.children.length; i < l; i++) {\r\n const child = node.children[i];\r\n getElementsWithName(child, name, res);\r\n }\r\n return res;\r\n}\r\n\r\n// Deep clone an xml node without the macro or property tags.\r\nexport function deepClone(node, stripPropsMacros) {\r\n const cloned = node.cloneNode();\r\n const childNodes = node.childNodes;\r\n for (let i = 0, l = childNodes.length; i < l; i++) {\r\n const child = childNodes[i];\r\n const tagName = child.tagName;\r\n if (!stripPropsMacros || (tagName !== 'xacro:property' && tagName !== 'xacro:macro')) {\r\n cloned.appendChild(deepClone(child, stripPropsMacros));\r\n }\r\n }\r\n return cloned;\r\n}\r\n\r\n// Takes an array of xml elements and removes the last elements that\r\n// are comments or newlines.\r\nexport function removeEndCommentsFromArray(arr) {\r\n while (arr.length > 0) {\r\n const el = arr[arr.length - 1];\r\n if (el.nodeType !== el.ELEMENT_NODE) {\r\n arr.pop();\r\n } else {\r\n break;\r\n }\r\n }\r\n}\r\n\r\n// Expression helpers\r\nexport function isOperator(str) {\r\n const regexp = /^[()/*+\\-%|&=[\\]]+$/;\r\n return regexp.test(str);\r\n}\r\n\r\nexport function isString(str) {\r\n const regexp = /^(('[^']*?')|(\"[^\"]*?\")|(`[^`]*?`))$/;\r\n return regexp.test(str);\r\n}\r\n\r\n// TODO: make this more robust\r\nexport function isNumber(str) {\r\n return !isNaN(parseFloat(str)) && !/[^0-9.eE-]/.test(str);\r\n}\r\n\r\n// TODO: this needs to tokenize numbers together\r\nexport function tokenize(str) {\r\n const regexp = /(('[^']*?')|(\"[^\"]*?\")|(`[^`]*?`)|([()/*+\\-%|&=[\\]]+))/g;\r\n return str\r\n .replace(regexp, m => ` ${ m } `)\r\n .trim()\r\n .split(/\\s+/g);\r\n}\r\n\r\nexport function normalizeExpression(str) {\r\n // Remove any instances of \"--\" or \"++\" that might occur from negating a negative number\r\n // by adding a space that are not in a string.\r\n return str.replace(/[-+]{2,}/, val => {\r\n let positive = true;\r\n for (let i = 0, l = val.length; i < l; i++) {\r\n const operator = val[i];\r\n if (operator === '-') {\r\n positive = !positive;\r\n }\r\n }\r\n\r\n return positive ? '+' : '-';\r\n });\r\n}\r\n\r\n// Property Set Helpers\r\nexport const PARENT_SCOPE = Symbol('parent');\r\n\r\n// merges a set of properties together into a single set retaining\r\n// the parent scope link as well.\r\nexport function mergePropertySets(...args) {\r\n const res = {};\r\n for (let i = 0, l = args.length; i < l; i++) {\r\n const obj = args[i];\r\n for (const key in obj) {\r\n res[key] = obj[key];\r\n }\r\n if (PARENT_SCOPE in obj) {\r\n res[PARENT_SCOPE] = obj[PARENT_SCOPE];\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n// Copies a property set and creates a link to the original set as a parent scope\r\nexport function createNewPropertyScope(properties) {\r\n const res = mergePropertySets(properties);\r\n res[PARENT_SCOPE] = properties;\r\n return res;\r\n}\r\n","var INUMBER = 'INUMBER';\nvar IOP1 = 'IOP1';\nvar IOP2 = 'IOP2';\nvar IOP3 = 'IOP3';\nvar IVAR = 'IVAR';\nvar IVARNAME = 'IVARNAME';\nvar IFUNCALL = 'IFUNCALL';\nvar IFUNDEF = 'IFUNDEF';\nvar IEXPR = 'IEXPR';\nvar IEXPREVAL = 'IEXPREVAL';\nvar IMEMBER = 'IMEMBER';\nvar IENDSTATEMENT = 'IENDSTATEMENT';\nvar IARRAY = 'IARRAY';\n\nfunction Instruction(type, value) {\n this.type = type;\n this.value = (value !== undefined && value !== null) ? value : 0;\n}\n\nInstruction.prototype.toString = function () {\n switch (this.type) {\n case INUMBER:\n case IOP1:\n case IOP2:\n case IOP3:\n case IVAR:\n case IVARNAME:\n case IENDSTATEMENT:\n return this.value;\n case IFUNCALL:\n return 'CALL ' + this.value;\n case IFUNDEF:\n return 'DEF ' + this.value;\n case IARRAY:\n return 'ARRAY ' + this.value;\n case IMEMBER:\n return '.' + this.value;\n default:\n return 'Invalid Instruction';\n }\n};\n\nfunction unaryInstruction(value) {\n return new Instruction(IOP1, value);\n}\n\nfunction binaryInstruction(value) {\n return new Instruction(IOP2, value);\n}\n\nfunction ternaryInstruction(value) {\n return new Instruction(IOP3, value);\n}\n\nfunction simplify(tokens, unaryOps, binaryOps, ternaryOps, values) {\n var nstack = [];\n var newexpression = [];\n var n1, n2, n3;\n var f;\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER || type === IVARNAME) {\n if (Array.isArray(item.value)) {\n nstack.push.apply(nstack, simplify(item.value.map(function (x) {\n return new Instruction(INUMBER, x);\n }).concat(new Instruction(IARRAY, item.value.length)), unaryOps, binaryOps, ternaryOps, values));\n } else {\n nstack.push(item);\n }\n } else if (type === IVAR && values.hasOwnProperty(item.value)) {\n item = new Instruction(INUMBER, values[item.value]);\n nstack.push(item);\n } else if (type === IOP2 && nstack.length > 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } /* else if (type === IARRAY && nstack.length >= item.value) {\n var length = item.value;\n while (length-- > 0) {\n newexpression.push(nstack.pop());\n }\n newexpression.push(new Instruction(IARRAY, item.value));\n } */ else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f, args, argCount;\n\n if (isExpressionEvaluator(tokens)) {\n return resolveExpression(tokens, values);\n }\n\n var numTokens = tokens.length;\n\n for (var i = 0; i < numTokens; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER || type === IVARNAME) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === 'and') {\n nstack.push(n1 ? !!evaluate(n2, expr, values) : false);\n } else if (item.value === 'or') {\n nstack.push(n1 ? true : !!evaluate(n2, expr, values));\n } else if (item.value === '=') {\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, evaluate(n2, expr, values), values));\n } else {\n f = expr.binaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values), resolveExpression(n2, values)));\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values), resolveExpression(n2, values), resolveExpression(n3, values)));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else if (item.value in expr.unaryOps && expr.parser.isOperatorEnabled(item.value)) {\n nstack.push(expr.unaryOps[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values)));\n } else if (type === IFUNCALL) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(resolveExpression(nstack.pop(), values));\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IFUNDEF) {\n // Create closure to keep references to arguments and expression\n nstack.push((function () {\n var n2 = nstack.pop();\n var args = [];\n var argCount = item.value;\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n var n1 = nstack.pop();\n var f = function () {\n var scope = Object.assign({}, values);\n for (var i = 0, len = args.length; i < len; i++) {\n scope[args[i]] = arguments[i];\n }\n return evaluate(n2, expr, scope);\n };\n // f.name = n1\n Object.defineProperty(f, 'name', {\n value: n1,\n writable: false\n });\n values[n1] = f;\n return f;\n })());\n } else if (type === IEXPR) {\n nstack.push(createExpressionEvaluator(item, expr));\n } else if (type === IEXPREVAL) {\n nstack.push(item);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else if (type === IENDSTATEMENT) {\n nstack.pop();\n } else if (type === IARRAY) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n nstack.push(args);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n // Explicitly return zero to avoid test issues caused by -0\n return nstack[0] === 0 ? 0 : resolveExpression(nstack[0], values);\n}\n\nfunction createExpressionEvaluator(token, expr, values) {\n if (isExpressionEvaluator(token)) return token;\n return {\n type: IEXPREVAL,\n value: function (scope) {\n return evaluate(token.value, expr, scope);\n }\n };\n}\n\nfunction isExpressionEvaluator(n) {\n return n && n.type === IEXPREVAL;\n}\n\nfunction resolveExpression(n, values) {\n return isExpressionEvaluator(n) ? n.value(values) : n;\n}\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f, args, argCount;\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else if (Array.isArray(item.value)) {\n nstack.push('[' + item.value.map(escapeValue).join(', ') + ']');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }((' + n1 + '),(' + n2 + ')))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else if (f === '[') {\n nstack.push(n1 + '[(' + n2 + ') | 0]');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n if (f === '[') {\n nstack.push(n1 + '[' + n2 + ']');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR || type === IVARNAME) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IFUNDEF) {\n n2 = nstack.pop();\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n n1 = nstack.pop();\n if (toJS) {\n nstack.push('(' + n1 + ' = function(' + args.join(', ') + ') { return ' + n2 + ' })');\n } else {\n nstack.push('(' + n1 + '(' + args.join(', ') + ') = ' + n2 + ')');\n }\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IARRAY) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n nstack.push('[' + args.join(', ') + ']');\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else if (type === IENDSTATEMENT) ; else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n if (toJS) {\n nstack = [ nstack.join(',') ];\n } else {\n nstack = [ nstack.join(';') ];\n }\n }\n return String(nstack[0]);\n}\n\nfunction escapeValue(v) {\n if (typeof v === 'string') {\n return JSON.stringify(v).replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n }\n return v;\n}\n\nfunction contains(array, obj) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === obj) {\n return true;\n }\n }\n return false;\n}\n\nfunction getSymbols(tokens, symbols, options) {\n options = options || {};\n var withMembers = !!options.withMembers;\n var prevVar = null;\n\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n if (item.type === IVAR || item.type === IVARNAME) {\n if (!withMembers && !contains(symbols, item.value)) {\n symbols.push(item.value);\n } else if (prevVar !== null) {\n if (!contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n prevVar = item.value;\n } else {\n prevVar = item.value;\n }\n } else if (item.type === IMEMBER && withMembers && prevVar !== null) {\n prevVar += '.' + item.value;\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols, options);\n } else if (prevVar !== null) {\n if (!contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n prevVar = null;\n }\n }\n\n if (prevVar !== null && !contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n}\n\nfunction Expression(tokens, parser) {\n this.tokens = tokens;\n this.parser = parser;\n this.unaryOps = parser.unaryOps;\n this.binaryOps = parser.binaryOps;\n this.ternaryOps = parser.ternaryOps;\n this.functions = parser.functions;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nExpression.prototype.symbols = function (options) {\n options = options || {};\n var vars = [];\n getSymbols(this.tokens, vars, options);\n return vars;\n};\n\nExpression.prototype.variables = function (options) {\n options = options || {};\n var vars = [];\n getSymbols(this.tokens, vars, options);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TBRACKET = 'TBRACKET';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\nvar TSEMICOLON = 'TSEMICOLON';\n\nfunction Token(type, value, index) {\n this.type = type;\n this.value = value;\n this.index = index;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(parser, expression) {\n this.pos = 0;\n this.current = null;\n this.unaryOps = parser.unaryOps;\n this.binaryOps = parser.binaryOps;\n this.ternaryOps = parser.ternaryOps;\n this.consts = parser.consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.options = parser.options;\n this.parser = parser;\n}\n\nTokenStream.prototype.newToken = function (type, value, pos) {\n return new Token(type, value, pos != null ? pos : this.pos);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isRadixInteger() ||\n this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isBracket() ||\n this.isComma() ||\n this.isSemicolon() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startPos);\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var c = this.expression.charAt(this.pos);\n if (c === '(' || c === ')') {\n this.current = this.newToken(TPAREN, c);\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isBracket = function () {\n var c = this.expression.charAt(this.pos);\n if ((c === '[' || c === ']') && this.isOperatorEnabled('[')) {\n this.current = this.newToken(TBRACKET, c);\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var c = this.expression.charAt(this.pos);\n if (c === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isSemicolon = function () {\n var c = this.expression.charAt(this.pos);\n if (c === ';') {\n this.current = this.newToken(TSEMICOLON, ';');\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (this.isOperatorEnabled(str) && (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps)) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n var hasLetter = false;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos && (c === '$' || c === '_')) {\n if (c === '_') {\n hasLetter = true;\n }\n continue;\n } else if (i === this.pos || !hasLetter || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n } else {\n hasLetter = true;\n }\n }\n if (hasLetter) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var c = this.expression.charAt(this.pos);\n while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {\n r = true;\n this.pos++;\n if (this.pos >= this.expression.length) {\n break;\n }\n c = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var c = this.expression.charAt(this.pos);\n if (c === '/' && this.expression.charAt(this.pos + 1) === '*') {\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isRadixInteger = function () {\n var pos = this.pos;\n\n if (pos >= this.expression.length - 2 || this.expression.charAt(pos) !== '0') {\n return false;\n }\n ++pos;\n\n var radix;\n var validDigit;\n if (this.expression.charAt(pos) === 'x') {\n radix = 16;\n validDigit = /^[0-9a-f]$/i;\n ++pos;\n } else if (this.expression.charAt(pos) === 'b') {\n radix = 2;\n validDigit = /^[01]$/i;\n ++pos;\n } else {\n return false;\n }\n\n var valid = false;\n var startPos = pos;\n\n while (pos < this.expression.length) {\n var c = this.expression.charAt(pos);\n if (validDigit.test(c)) {\n pos++;\n valid = true;\n } else {\n break;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseInt(this.expression.substring(startPos, pos), radix));\n this.pos = pos;\n }\n return valid;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var foundDot = false;\n var foundDigits = false;\n var c;\n\n while (pos < this.expression.length) {\n c = this.expression.charAt(pos);\n if ((c >= '0' && c <= '9') || (!foundDot && c === '.')) {\n if (c === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n }\n\n if (c === 'e' || c === 'E') {\n pos++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n c = this.expression.charAt(pos);\n if (acceptSign && (c === '+' || c === '-')) {\n acceptSign = false;\n } else if (c >= '0' && c <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n } else {\n this.pos = resetPos;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var startPos = this.pos;\n var c = this.expression.charAt(this.pos);\n\n if (c === '+' || c === '-' || c === '*' || c === '/' || c === '%' || c === '^' || c === '?' || c === ':' || c === '.') {\n this.current = this.newToken(TOP, c);\n } else if (c === '∙' || c === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (c === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (c === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (c === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n } else {\n return false;\n }\n } else if (c === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, c);\n }\n } else if (c === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, c);\n }\n } else {\n return false;\n }\n this.pos++;\n\n if (this.isOperatorEnabled(this.current.value)) {\n return true;\n } else {\n this.pos = startPos;\n return false;\n }\n};\n\nTokenStream.prototype.isOperatorEnabled = function (op) {\n return this.parser.isOperatorEnabled(op);\n};\n\nTokenStream.prototype.getCoordinates = function () {\n var line = 0;\n var column;\n var newline = -1;\n do {\n line++;\n column = this.pos - newline;\n newline = this.expression.indexOf('\\n', newline + 1);\n } while (newline >= 0 && newline < this.pos);\n\n return {\n line: line,\n column: column\n };\n};\n\nTokenStream.prototype.parseError = function (msg) {\n var coords = this.getCoordinates();\n throw new Error('parse error [' + coords.line + ':' + coords.column + ']: ' + msg);\n};\n\nfunction ParserState(parser, tokenStream, options) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n this.allowMemberAccess = options.allowMemberAccess !== false;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return contains(value, token.value);\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n var coords = this.tokens.getCoordinates();\n throw new Error('parse error [' + coords.line + ':' + coords.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TNAME) || this.accept(TOP, isPrefixOperator)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else if (this.accept(TBRACKET, '[')) {\n if (this.accept(TBRACKET, ']')) {\n instr.push(new Instruction(IARRAY, 0));\n } else {\n var argCount = this.parseArrayList(instr);\n instr.push(new Instruction(IARRAY, argCount));\n }\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n var exprInstr = [];\n if (this.parseUntilEndStatement(instr, exprInstr)) {\n return;\n }\n this.parseVariableAssignmentExpression(exprInstr);\n if (this.parseUntilEndStatement(instr, exprInstr)) {\n return;\n }\n this.pushExpression(instr, exprInstr);\n};\n\nParserState.prototype.pushExpression = function (instr, exprInstr) {\n for (var i = 0, len = exprInstr.length; i < len; i++) {\n instr.push(exprInstr[i]);\n }\n};\n\nParserState.prototype.parseUntilEndStatement = function (instr, exprInstr) {\n if (!this.accept(TSEMICOLON)) return false;\n if (this.nextToken && this.nextToken.type !== TEOF && !(this.nextToken.type === TPAREN && this.nextToken.value === ')')) {\n exprInstr.push(new Instruction(IENDSTATEMENT));\n }\n if (this.nextToken.type !== TEOF) {\n this.parseExpression(exprInstr);\n }\n instr.push(new Instruction(IEXPR, exprInstr));\n return true;\n};\n\nParserState.prototype.parseArrayList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TBRACKET, ']')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseVariableAssignmentExpression = function (instr) {\n this.parseConditionalExpression(instr);\n while (this.accept(TOP, '=')) {\n var varName = instr.pop();\n var varValue = [];\n var lastInstrIndex = instr.length - 1;\n if (varName.type === IFUNCALL) {\n if (!this.tokens.isOperatorEnabled('()=')) {\n throw new Error('function definition is not permitted');\n }\n for (var i = 0, len = varName.value + 1; i < len; i++) {\n var index = lastInstrIndex - i;\n if (instr[index].type === IVAR) {\n instr[index] = new Instruction(IVARNAME, instr[index].value);\n }\n }\n this.parseVariableAssignmentExpression(varValue);\n instr.push(new Instruction(IEXPR, varValue));\n instr.push(new Instruction(IFUNDEF, varName.value));\n continue;\n }\n if (varName.type !== IVAR && varName.type !== IMEMBER) {\n throw new Error('expected variable for assignment');\n }\n this.parseVariableAssignmentExpression(varValue);\n instr.push(new Instruction(IVARNAME, varName.value));\n instr.push(new Instruction(IEXPR, varValue));\n instr.push(binaryInstruction('='));\n }\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n var falseBranch = [];\n this.parseAndExpression(falseBranch);\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n var trueBranch = [];\n this.parseComparison(trueBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(binaryInstruction('and'));\n }\n};\n\nvar COMPARISON_OPERATORS = ['==', '!=', '<', '<=', '>=', '>', 'in'];\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, COMPARISON_OPERATORS)) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nvar ADD_SUB_OPERATORS = ['+', '-', '||'];\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ADD_SUB_OPERATORS)) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nvar TERM_OPERATORS = ['*', '/', '%'];\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, TERM_OPERATORS)) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if (this.current.value !== '-' && this.current.value !== '+') {\n if (this.nextToken.type === TPAREN && this.nextToken.value === '(') {\n this.restore();\n this.parseExponential(instr);\n return;\n } else if (this.nextToken.type === TSEMICOLON || this.nextToken.type === TCOMMA || this.nextToken.type === TEOF || (this.nextToken.type === TPAREN && this.nextToken.value === ')')) {\n this.restore();\n this.parseAtom(instr);\n return;\n }\n }\n\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.') || this.accept(TBRACKET, '[')) {\n var op = this.current;\n\n if (op.value === '.') {\n if (!this.allowMemberAccess) {\n throw new Error('unexpected \".\", member access is not permitted');\n }\n\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n } else if (op.value === '[') {\n if (!this.tokens.isOperatorEnabled('[')) {\n throw new Error('unexpected \"[]\", arrays are disabled');\n }\n\n this.parseExpression(instr);\n this.expect(TBRACKET, ']');\n instr.push(binaryInstruction('['));\n } else {\n throw new Error('unexpected symbol: ' + op.value);\n }\n }\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\n\nfunction sub(a, b) {\n return a - b;\n}\n\nfunction mul(a, b) {\n return a * b;\n}\n\nfunction div(a, b) {\n return a / b;\n}\n\nfunction mod(a, b) {\n return a % b;\n}\n\nfunction concat(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.concat(b);\n }\n return '' + a + b;\n}\n\nfunction equal(a, b) {\n return a === b;\n}\n\nfunction notEqual(a, b) {\n return a !== b;\n}\n\nfunction greaterThan(a, b) {\n return a > b;\n}\n\nfunction lessThan(a, b) {\n return a < b;\n}\n\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\n\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\n\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\n\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\n\nfunction inOperator(a, b) {\n return contains(b, a);\n}\n\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\n\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\n\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\n\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt((a * a) + 1));\n}\n\nfunction acosh(a) {\n return Math.log(a + Math.sqrt((a * a) - 1));\n}\n\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\n\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\n\nfunction neg(a) {\n return -a;\n}\n\nfunction not(a) {\n return !a;\n}\n\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\n\nfunction random(a) {\n return Math.random() * (a || 1);\n}\n\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + (1 / (12 * n)) + (1 / (288 * twoN)) - (139 / (51840 * threeN)) -\n (571 / (2488320 * fourN)) + (163879 / (209018880 * fiveN)) +\n (5246819 / (75246796800 * fiveN * n)));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nfunction stringOrArrayLength(s) {\n if (Array.isArray(s)) {\n return s.length;\n }\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = (sum * div * div) + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\n/**\n* Decimal adjustment of a number.\n* From @escopecz.\n*\n* @param {Number} value The number.\n* @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n* @return {Number} The adjusted value.\n*/\nfunction roundTo(value, exp) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = -(+exp);\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n // Shift back\n value = value.toString().split('e');\n return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n}\n\nfunction setVar(name, value, variables) {\n if (variables) variables[name] = value;\n return value;\n}\n\nfunction arrayIndex(array, index) {\n return array[index | 0];\n}\n\nfunction max(array) {\n if (arguments.length === 1 && Array.isArray(array)) {\n return Math.max.apply(Math, array);\n } else {\n return Math.max.apply(Math, arguments);\n }\n}\n\nfunction min(array) {\n if (arguments.length === 1 && Array.isArray(array)) {\n return Math.min.apply(Math, array);\n } else {\n return Math.min.apply(Math, arguments);\n }\n}\n\nfunction arrayMap(f, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to map is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to map is not an array');\n }\n return a.map(function (x, i) {\n return f(x, i);\n });\n}\n\nfunction arrayFold(f, init, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to fold is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to fold is not an array');\n }\n return a.reduce(function (acc, x, i) {\n return f(acc, x, i);\n }, init);\n}\n\nfunction arrayFilter(f, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to filter is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to filter is not an array');\n }\n return a.filter(function (x, i) {\n return f(x, i);\n });\n}\n\nfunction stringOrArrayIndexOf(target, s) {\n if (!(Array.isArray(s) || typeof s === 'string')) {\n throw new Error('Second argument to indexOf is not a string or array');\n }\n\n return s.indexOf(target);\n}\n\nfunction arrayJoin(sep, a) {\n if (!Array.isArray(a)) {\n throw new Error('Second argument to join is not an array');\n }\n\n return a.join(sep);\n}\n\nfunction sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n}\n\nvar ONE_THIRD = 1/3;\nfunction cbrt(x) {\n return x < 0 ? -Math.pow(-x, ONE_THIRD) : Math.pow(x, ONE_THIRD);\n}\n\nfunction expm1(x) {\n return Math.exp(x) - 1;\n}\n\nfunction log1p(x) {\n return Math.log(1 + x);\n}\n\nfunction log2(x) {\n return Math.log(x) / Math.LN2;\n}\n\nfunction Parser(options) {\n this.options = options || {};\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n cbrt: Math.cbrt || cbrt,\n log: Math.log,\n log2: Math.log2 || log2,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n expm1: Math.expm1 || expm1,\n log1p: Math.log1p || log1p,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringOrArrayLength,\n '!': factorial,\n sign: Math.sign || sign\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator,\n 'in': inOperator,\n '=': setVar,\n '[': arrayIndex\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: min,\n max: max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma,\n roundTo: roundTo,\n map: arrayMap,\n fold: arrayFold,\n filter: arrayFilter,\n indexOf: stringOrArrayIndexOf,\n join: arrayJoin\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.prototype.parse = function (expr) {\n var instr = [];\n var parserState = new ParserState(\n this,\n new TokenStream(this, expr),\n { allowMemberAccess: this.options.allowMemberAccess }\n );\n\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n};\n\nParser.prototype.evaluate = function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n};\n\nvar sharedParser = new Parser();\n\nParser.parse = function (expr) {\n return sharedParser.parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return sharedParser.parse(expr).evaluate(variables);\n};\n\nvar optionNameMap = {\n '+': 'add',\n '-': 'subtract',\n '*': 'multiply',\n '/': 'divide',\n '%': 'remainder',\n '^': 'power',\n '!': 'factorial',\n '<': 'comparison',\n '>': 'comparison',\n '<=': 'comparison',\n '>=': 'comparison',\n '==': 'comparison',\n '!=': 'comparison',\n '||': 'concatenate',\n 'and': 'logical',\n 'or': 'logical',\n 'not': 'logical',\n '?': 'conditional',\n ':': 'conditional',\n '=': 'assignment',\n '[': 'array',\n '()=': 'fndef'\n};\n\nfunction getOptionName(op) {\n return optionNameMap.hasOwnProperty(op) ? optionNameMap[op] : op;\n}\n\nParser.prototype.isOperatorEnabled = function (op) {\n var optionName = getOptionName(op);\n var operators = this.options.operators || {};\n\n return !(optionName in operators) || !!operators[optionName];\n};\n\n/*!\n Based on ndef.parser, by Raphael Graf(r@undefined.ch)\n http://www.undefined.ch/mparser/index.html\n\n Ported to JavaScript and modified by Matthew Crumley (email@matthewcrumley.com, http://silentmatt.com/)\n\n You are free to use and modify this code in anyway you find useful. Please leave this comment in the code\n to acknowledge its original source. If you feel like it, I enjoy hearing about projects that use my code,\n but don't feel like you have to let me know or ask permission.\n*/\n\n// Backwards compatibility\nvar index = {\n Parser: Parser,\n Expression: Expression\n};\n\nexport default index;\nexport { Expression, Parser };\n","import { isNumber } from './utils.js';\r\nimport { Parser } from 'expr-eval';\r\n\r\nconst parser = new Parser();\r\n\r\nparser.unaryOps = {\r\n '-': parser.unaryOps['-'],\r\n '+': parser.unaryOps['+'],\r\n '!': parser.unaryOps['!'],\r\n};\r\n\r\nparser.functions = {\r\n sin: Math.sin,\r\n cos: Math.cos,\r\n tan: Math.tan,\r\n asin: Math.asin,\r\n acos: Math.acos,\r\n atan: Math.atan,\r\n log: Math.log,\r\n atan2: Math.atan2,\r\n pow: Math.pow,\r\n radians: (degrees) => { return degrees * (Math.PI / 180); },\r\n degrees: (radians) => { return radians * (180 / Math.PI); },\r\n};\r\n\r\nparser.binaryOps = {\r\n ...parser.binaryOps,\r\n '+': (a, b) => {\r\n if (isNumber(a)) {\r\n a = Number(a);\r\n }\r\n\r\n if (isNumber(b)) {\r\n b = Number(b);\r\n }\r\n\r\n return a + b;\r\n },\r\n 'in': (a, b) => {\r\n if (Array.isArray(b)) {\r\n return b.includes(a);\r\n } else if (typeof b === 'string') {\r\n return b.includes(a);\r\n } else {\r\n return a in b;\r\n }\r\n },\r\n};\r\n\r\nparser.consts = {\r\n ...parser.consts,\r\n pi: Math.PI,\r\n e: Math.E,\r\n};\r\n\r\nexport function evaluateExpression(expr) {\r\n return parser.evaluate(expr);\r\n}\r\n","import {\r\n getUrlBase,\r\n removeEndCommentsFromArray,\r\n getElementsWithName,\r\n deepClone,\r\n isOperator,\r\n isString,\r\n isNumber,\r\n normalizeExpression,\r\n tokenize,\r\n mergePropertySets,\r\n createNewPropertyScope,\r\n PARENT_SCOPE,\r\n} from './utils.js';\r\nimport { evaluateExpression } from './evaluateExpression.js';\r\n\r\nexport class XacroParser {\r\n\r\n constructor() {\r\n this.inOrder = true;\r\n this.requirePrefix = true;\r\n this.localProperties = true;\r\n this.rospackCommands = {};\r\n this.workingPath = '';\r\n }\r\n\r\n async getFileContents(path) {\r\n throw new Error('XacroParser: getFileContents() not implemented.');\r\n }\r\n\r\n async parse(data) {\r\n\r\n /* Evaluation */\r\n // Evaluate expressions and rospack commands in attribute text\r\n // TODO: expressions can basically be any python expression\r\n function evaluateAttribute(str, properties, finalValue = false) {\r\n\r\n // recursively unpack parameters\r\n function unpackParams(str, properties) {\r\n\r\n // if we're unpacking something that's already a number then just return\r\n if (typeof str === 'number') {\r\n return str;\r\n }\r\n\r\n // process all of the ${} and $() expressions\r\n const res = str.replace(/(\\$?\\$\\([^)]+\\))|(\\$?\\${[^}]+})/g, match => {\r\n\r\n // if we encounter an escaped $$ then return early\r\n if (/^\\$\\$/.test(match)) {\r\n return match;\r\n }\r\n\r\n const isRospackCommand = /^\\$\\(/.test(match);\r\n let contents = match.substring(2, match.length - 1);\r\n contents = unpackParams(contents, properties);\r\n\r\n if (isRospackCommand) {\r\n\r\n const command = unpackParams(contents, properties);\r\n const tokens = command.split(/\\s+/g);\r\n const stem = tokens.shift();\r\n\r\n try {\r\n return handleRospackCommand(stem, ...tokens);\r\n } catch (e) {\r\n throw new Error(`XacroParser: Cannot run rospack command \"${ contents }\".\\n` + e.message);\r\n }\r\n\r\n } else {\r\n if (stack.includes(contents)) {\r\n throw new Error(\r\n `XacroParser: Cannot evaluate infinitely recursive expression: ${\r\n stack.join(' > ')\r\n } > ${\r\n contents\r\n }`\r\n );\r\n }\r\n\r\n stack.push(contents);\r\n\r\n const operators = /(()|()|()|[()/*+\\-%|&=[\\]])+/g;\r\n const expr = tokenize(contents)\r\n .map(t => {\r\n operators.lastIndex = 0;\r\n if (isOperator(t)) return t;\r\n if (isNumber(t)) return t;\r\n if (isString(t)) return t;\r\n\r\n if (t in properties) {\r\n const arg = unpackParams(properties[t], properties);\r\n if (!isNumber(arg)) {\r\n return `\"${ arg.toString().replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"') }\"`;\r\n } else {\r\n return arg;\r\n }\r\n } else {\r\n return t;\r\n }\r\n })\r\n .join('');\r\n\r\n stack.pop();\r\n\r\n if (isString(expr)) {\r\n return expr.substring(1, expr.length - 1);\r\n } else if (isNumber(expr)) {\r\n return expr;\r\n } else {\r\n const cleanExpr = normalizeExpression(expr);\r\n return handleExpressionEvaluation(cleanExpr);\r\n }\r\n }\r\n });\r\n\r\n return res;\r\n\r\n }\r\n\r\n const stack = [];\r\n const allProps = mergePropertySets(globalProperties, properties);\r\n try {\r\n // fix the escaped dollar signs only at the end to prevent double evaluation and only\r\n // if the value is not an intermediate value like a computed property.\r\n let result = unpackParams(str, allProps);\r\n if (finalValue) {\r\n result = result.replace(/\\${2}([({])/g, (val, brace) => `$${ brace }`);\r\n }\r\n return result;\r\n } catch (e) {\r\n throw new Error(`XacroParser: Failed to process expression \"${ str }\". \\n` + e.message);\r\n }\r\n\r\n }\r\n\r\n // Evaluate the given node as a macro\r\n async function evaluateMacro(node, properties, macros, resultsList) {\r\n\r\n // Find the macro\r\n const macroName = node.tagName.replace(/^xacro:/, '');\r\n const macro = macros[macroName];\r\n\r\n if (!macro) {\r\n throw new Error(`XacroParser: Cannot find macro \"${ macroName }\"`);\r\n }\r\n\r\n // Copy the properties and macros so we can modify them with\r\n // macro input fields and local macro definitions.\r\n const ogProperties = properties;\r\n const ogMacros = macros;\r\n properties = createNewPropertyScope(properties);\r\n macros = mergePropertySets(macros);\r\n\r\n // Modify the properties with macro param inputs\r\n let children = [];\r\n for (const c of node.children) {\r\n await processNode(c, ogProperties, ogMacros, children);\r\n }\r\n children = children.filter(c => c.nodeType === c.ELEMENT_NODE);\r\n\r\n let blockCount = 0;\r\n for (const p in macro.params) {\r\n const param = macro.params[p];\r\n if (node.hasAttribute(p)) {\r\n properties[p] = evaluateAttribute(node.getAttribute(p), ogProperties);\r\n } else if (param.type === 'BLOCK') {\r\n properties[p] = [children[blockCount]];\r\n blockCount++;\r\n } else if (param.type === 'MULTI_BLOCK') {\r\n properties[p] = [...children.filter(c => c.tagName === p)[0].childNodes];\r\n } else {\r\n properties[p] = evaluateAttribute(macro.params[p].def, ogProperties);\r\n }\r\n }\r\n\r\n // Expand the macro\r\n const macroChildren = [...macro.node.childNodes];\r\n for (const c of macroChildren) {\r\n const nodes = [];\r\n await processNode(c, properties, macros, nodes);\r\n resultsList.push(...nodes);\r\n }\r\n }\r\n\r\n /* Parsing */\r\n // Conver the params into an object representation\r\n function parseMacroParam(param) {\r\n const obj = {};\r\n\r\n // Save the type of parameter\r\n // - two asterisks means an element expands input multiple\r\n // - one asterisk means copy the first elemnt\r\n // - no asterisks means value param\r\n if (/^\\*\\*/.test(param)) {\r\n obj.type = 'MULTI_BLOCK';\r\n } else if (/^\\*/.test(param)) {\r\n obj.type = 'BLOCK';\r\n } else {\r\n obj.type = 'PARAM';\r\n }\r\n\r\n // strip the asterisks\r\n param = param.replace(/^\\*{1,2}/g, '');\r\n\r\n // Check if a default value is provided\r\n if (/:=/.test(param)) {\r\n const [name, def] = param.split(':=');\r\n\r\n // TODO: Support caret and default syntax\r\n // TODO: is there any difference between the := and = syntax?\r\n if (/^\\^/.test(def) || /\\|/.test(def)) {\r\n throw new Error(`XacroParser: ROS Jade pass-through notation not supported in macro defaults: ${ def }`);\r\n }\r\n\r\n obj.name = name;\r\n obj.def = def;\r\n } else {\r\n obj.name = param;\r\n obj.def = null;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n // Parse a xacro:macro tag\r\n function parseMacro(node) {\r\n // get attributes\r\n const name = node.getAttribute('name').replace(/^xacro:/, '');\r\n const params = node.getAttribute('params');\r\n\r\n // parse params\r\n const inputMap = {};\r\n if (params) {\r\n const inputs = params\r\n .trim()\r\n .split(/\\s+/g)\r\n .map(s => parseMacroParam(s));\r\n inputs.forEach(inp => {\r\n inputMap[inp.name] = inp;\r\n });\r\n }\r\n\r\n return {\r\n name,\r\n node: deepClone(node, false),\r\n params: inputMap,\r\n };\r\n }\r\n\r\n // Recursively process and expand a node\r\n async function processNode(node, properties, macros, resultsList = []) {\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n const res = node.cloneNode();\r\n res.textContent = evaluateAttribute(res.textContent, properties, true);\r\n resultsList.push(res);\r\n return;\r\n }\r\n\r\n let tagName = node.tagName.toLowerCase();\r\n if (!requirePrefix) {\r\n switch (tagName) {\r\n\r\n case 'arg':\r\n case 'property':\r\n case 'macro':\r\n case 'insert_block':\r\n case 'if':\r\n case 'unless':\r\n case 'include':\r\n case 'element':\r\n case 'attribute':\r\n tagName = `xacro:${ tagName }`;\r\n break;\r\n default:\r\n if (tagName in macros) {\r\n tagName = `xacro:${ tagName }`;\r\n }\r\n break;\r\n\r\n }\r\n }\r\n\r\n switch (tagName) {\r\n\r\n case 'xacro:property': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const name = node.getAttribute('name');\r\n\r\n let value;\r\n if (node.hasAttribute('value')) {\r\n value = node.getAttribute('value');\r\n } else if (node.hasAttribute('default')) {\r\n value = node.getAttribute('default');\r\n } else {\r\n const childNodes = [...node.childNodes];\r\n value = [];\r\n for (const c of childNodes) {\r\n value.push(deepClone(c, false));\r\n }\r\n }\r\n\r\n let scope = 'global';\r\n if (localProperties) {\r\n scope = node.getAttribute('scope') || 'local';\r\n }\r\n\r\n // Emulated behavior here\r\n // https://github.com/ros/xacro/blob/melodic-devel/src/xacro/__init__.py#L565\r\n if (scope !== 'local') {\r\n value = evaluateAttribute(value, properties);\r\n }\r\n\r\n if (scope === 'global') {\r\n globalProperties[name] = value;\r\n } else if (scope === 'parent') {\r\n properties[PARENT_SCOPE][name] = value;\r\n } else {\r\n properties[name] = value;\r\n }\r\n\r\n break;\r\n }\r\n case 'xacro:macro': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const macro = parseMacro(node);\r\n macros[macro.name] = macro;\r\n break;\r\n }\r\n case 'xacro:insert_block': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const name = node.getAttribute('name');\r\n const nodes = properties[name];\r\n\r\n for (const c of nodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n return;\r\n }\r\n case 'xacro:if':\r\n case 'xacro:unless': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const value = evaluateAttribute(node.getAttribute('value'), properties, true);\r\n let bool = null;\r\n if (!isNaN(parseFloat(value))) {\r\n bool = !!parseFloat(value);\r\n } else if (value === 'true' || value === 'false') {\r\n bool = value === 'true';\r\n } else {\r\n bool = value;\r\n }\r\n\r\n if (tagName === 'xacro:unless') {\r\n bool = !bool;\r\n }\r\n\r\n if (bool) {\r\n const childNodes = [...node.childNodes];\r\n for (const c of childNodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n }\r\n return;\r\n }\r\n case 'xacro:include': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n if (node.hasAttribute('ns')) {\r\n throw new Error('XacroParser: xacro:include name spaces not supported.');\r\n }\r\n const filename = evaluateAttribute(node.getAttribute('filename'), properties, true);\r\n const isAbsolute = /^[/\\\\]/.test(filename) || /^[a-zA-Z]+:[/\\\\]/.test(filename);\r\n const filePath = isAbsolute ? filename : currWorkingPath + filename;\r\n\r\n const prevWorkingPath = currWorkingPath;\r\n currWorkingPath = getUrlBase(filePath);\r\n\r\n const includeContent = await loadInclude(filePath);\r\n const childNodes = [...includeContent.children[0].childNodes];\r\n for (const c of childNodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n\r\n currWorkingPath = prevWorkingPath;\r\n return;\r\n }\r\n case 'xacro:arg':\r\n case 'xacro:attribute':\r\n case 'xacro:element':\r\n throw new Error(`XacroParser: ${ tagName } tags not supported.`);\r\n default: {\r\n // TODO: check if there's a 'call' attribute here which indicates that\r\n // a macro should be invoked?\r\n if (/^xacro:/.test(tagName) || tagName in macros) {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n return evaluateMacro(node, properties, macros, resultsList);\r\n } else {\r\n\r\n const res = node.cloneNode();\r\n for (let i = 0, l = res.attributes.length; i < l; i++) {\r\n const attr = res.attributes[i];\r\n const value = evaluateAttribute(attr.value, properties, true);\r\n res.setAttribute(attr.name, value);\r\n }\r\n\r\n const childNodes = [...node.childNodes];\r\n const resultChildren = [];\r\n for (let i = 0, l = childNodes.length; i < l; i++) {\r\n await processNode(childNodes[i], properties, macros, resultChildren);\r\n }\r\n resultChildren.forEach(c => res.appendChild(c));\r\n resultsList.push(res);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n // Process all property and macro tags into the objects\r\n async function gatherPropertiesAndMacros(el, properties, macros) {\r\n const propertyEl = getElementsWithName(el, 'xacro:property');\r\n if (!requirePrefix) {\r\n propertyEl.push(...getElementsWithName(el, 'property'));\r\n }\r\n for (const el of propertyEl) {\r\n await processNode(el, properties, macros);\r\n }\r\n\r\n const macroEl = getElementsWithName(el, 'xacro:macro');\r\n if (!requirePrefix) {\r\n macroEl.push(...getElementsWithName(el, 'macro'));\r\n }\r\n for (const el of macroEl) {\r\n await processNode(el, properties, macros);\r\n }\r\n }\r\n\r\n // Process a document node with a new property and macro scope\r\n async function processXacro(xacro, properties, macros) {\r\n const res = xacro.cloneNode();\r\n for (let i = 0, l = xacro.children.length; i < l; i++) {\r\n const child = [];\r\n await processNode(xacro.children[i], properties, macros, child);\r\n\r\n const root = child[0];\r\n root.removeAttribute('xmlns:xacro');\r\n res.appendChild(root);\r\n }\r\n return res;\r\n }\r\n\r\n async function loadInclude(path) {\r\n\r\n try {\r\n const text = await scope.getFileContents(path);\r\n return new DOMParser().parseFromString(text, 'text/xml');\r\n } catch (e) {\r\n throw new Error(`XacroParser: Could not load included file: ${ path }`);\r\n }\r\n\r\n }\r\n\r\n async function loadIncludes(xacro, workingPath, results = []) {\r\n\r\n const includeEl = getElementsWithName(xacro, 'xacro:include');\r\n if (!requirePrefix) {\r\n includeEl.push(...getElementsWithName(xacro, 'include'));\r\n }\r\n\r\n const promises = includeEl.map(el => {\r\n // TODO: Handle namespaces on the include.\r\n if (el.hasAttribute('ns')) {\r\n throw new Error('XacroParser: xacro:include name spaces not supported.');\r\n }\r\n\r\n const filename = el.getAttribute('filename');\r\n const namespace = el.getAttribute('ns') || null;\r\n const isAbsolute = /^[/\\\\]/.test(filename) || /^[a-zA-Z]+:[/\\\\]/.test(filename);\r\n const filePath = isAbsolute ? filename : workingPath + filename;\r\n const pr = loadInclude(filePath)\r\n .then(content => {\r\n results.push({ filename, namespace, content });\r\n\r\n const relPath = getUrlBase(filePath);\r\n return loadIncludes(content, relPath, results);\r\n });\r\n return pr;\r\n });\r\n\r\n await Promise.all(promises);\r\n return results;\r\n }\r\n\r\n // TODO: Provide a default \"arg\" command function that defaults to\r\n // xacro:arg fields.\r\n const scope = this;\r\n const inOrder = this.inOrder;\r\n\r\n // add a file separator to the end of the working path if it's specified\r\n // and doesn't have one.\r\n const workingPath = this.workingPath + (this.workingPath && !/[\\\\/]$/.test(this.workingPath) ? '/' : '');\r\n const requirePrefix = this.requirePrefix;\r\n const rospackCommands = this.rospackCommands;\r\n const globalMacros = {};\r\n const includeMap = {};\r\n const globalProperties = { True: 1, False: 0 };\r\n globalProperties[PARENT_SCOPE] = globalProperties;\r\n\r\n const handleRospackCommand = (stem, ...args) => {\r\n\r\n if (rospackCommands instanceof Function) {\r\n\r\n return rospackCommands(stem, ...args);\r\n\r\n } else {\r\n\r\n return rospackCommands[stem](...args);\r\n\r\n }\r\n\r\n };\r\n const handleExpressionEvaluation = evaluateExpression;\r\n\r\n let localProperties = this.localProperties;\r\n let currWorkingPath = workingPath;\r\n let content = new DOMParser().parseFromString(data, 'text/xml');\r\n\r\n if (localProperties && !inOrder) {\r\n console.warn('XacroParser: Implicitly setting \"localProperties\" option to false because \"inOrder\" is false.');\r\n localProperties = false;\r\n }\r\n\r\n let inOrderPromise = null;\r\n if (!inOrder) {\r\n inOrderPromise = (async function() {\r\n await gatherPropertiesAndMacros(content, globalProperties, globalMacros);\r\n content = deepClone(content, true);\r\n\r\n return loadIncludes(content, workingPath)\r\n .then(arr => {\r\n arr.forEach(inc => {\r\n // TODO: handle namespaces here when rolling up properties and macros\r\n gatherPropertiesAndMacros(inc.content, globalProperties, globalMacros);\r\n inc.content = deepClone(inc.content, true);\r\n includeMap[inc.filename] = inc.content;\r\n });\r\n });\r\n })();\r\n } else {\r\n inOrderPromise = Promise.resolve();\r\n }\r\n\r\n await inOrderPromise;\r\n return processXacro(content, globalProperties, globalMacros);\r\n }\r\n\r\n}\r\n","import { getUrlBase } from './utils.js';\r\nimport { XacroParser } from './XacroParser.js';\r\n\r\nexport class XacroLoader extends XacroParser {\r\n\r\n constructor() {\r\n\r\n super();\r\n this.fetchOptions = {};\r\n\r\n }\r\n\r\n load(url, onComplete, onError) {\r\n\r\n const workingPath = getUrlBase(url);\r\n if (this.workingPath === '') {\r\n\r\n this.workingPath = workingPath;\r\n\r\n }\r\n\r\n this\r\n .getFileContents(url)\r\n .then(text => {\r\n\r\n this.parse(text, onComplete, onError);\r\n\r\n })\r\n .catch(e => {\r\n\r\n if (onError) {\r\n\r\n onError(e);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n parse(data, onComplete, onError) {\r\n\r\n super\r\n .parse(data)\r\n .then(onComplete)\r\n .catch(e => {\r\n\r\n if (onError) {\r\n\r\n onError(e);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n getFileContents(path) {\r\n\r\n return fetch(path, this.fetchOptions)\r\n .then(res => {\r\n\r\n if (res.ok) {\r\n\r\n return res.text();\r\n\r\n } else {\r\n\r\n throw new Error(`XacroLoader: Failed to load url '${ path }' with error code ${ res.status } : ${ res.statusText }.`);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n}\r\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../src/utils.js","../node_modules/expr-eval/dist/index.mjs","../src/evaluateExpression.js","../src/XacroParser.js","../src/XacroLoader.js"],"sourcesContent":["\r\nexport function getUrlBase(url) {\r\n const tokens = url.split(/[\\\\/]/g);\r\n tokens.pop();\r\n if (tokens.length === 0) {\r\n return './';\r\n } else {\r\n return tokens.join('/') + '/';\r\n }\r\n}\r\n\r\n// XML Helpers\r\n// QuerySelectorAll that respects tag prefixes like 'xacro:'\r\nexport function getElementsWithName(node, name, res = []) {\r\n if (node.tagName === name) {\r\n res.push(node);\r\n }\r\n for (let i = 0, l = node.children.length; i < l; i++) {\r\n const child = node.children[i];\r\n getElementsWithName(child, name, res);\r\n }\r\n return res;\r\n}\r\n\r\n// Deep clone an xml node without the macro or property tags.\r\nexport function deepClone(node, stripPropsMacros) {\r\n const cloned = node.cloneNode();\r\n const childNodes = node.childNodes;\r\n for (let i = 0, l = childNodes.length; i < l; i++) {\r\n const child = childNodes[i];\r\n const tagName = child.tagName;\r\n if (!stripPropsMacros || (tagName !== 'xacro:property' && tagName !== 'xacro:macro')) {\r\n cloned.appendChild(deepClone(child, stripPropsMacros));\r\n }\r\n }\r\n return cloned;\r\n}\r\n\r\n// Takes an array of xml elements and removes the last elements that\r\n// are comments or newlines.\r\nexport function removeEndCommentsFromArray(arr) {\r\n while (arr.length > 0) {\r\n const el = arr[arr.length - 1];\r\n if (el.nodeType !== el.ELEMENT_NODE) {\r\n arr.pop();\r\n } else {\r\n break;\r\n }\r\n }\r\n}\r\n\r\n// Expression helpers\r\nexport function isOperator(str) {\r\n const regexp = /^[()/*+\\-%|&=[\\]]+$/;\r\n return regexp.test(str);\r\n}\r\n\r\nexport function isString(str) {\r\n const regexp = /^(('[^']*?')|(\"[^\"]*?\")|(`[^`]*?`))$/;\r\n return regexp.test(str);\r\n}\r\n\r\n// TODO: make this more robust\r\nexport function isNumber(str) {\r\n return !isNaN(parseFloat(str)) && !/[^0-9.eE-]/.test(str);\r\n}\r\n\r\n// TODO: this needs to tokenize numbers together\r\nexport function tokenize(str) {\r\n // split text within quotes (', \", `) or operators\r\n const regexp = /(('[^']*?')|(\"[^\"]*?\")|(`[^`]*?`)|([()/*+\\-%|!&=[\\]]+?))/g;\r\n return str\r\n .replace(regexp, m => ` ${ m } `)\r\n .trim()\r\n .split(/\\s+/g);\r\n}\r\n\r\nexport function normalizeExpression(str) {\r\n // Remove any instances of \"--\" or \"++\" that might occur from negating a negative number\r\n // by adding a space that are not in a string.\r\n return str.replace(/[-+]{2,}/, val => {\r\n let positive = true;\r\n for (let i = 0, l = val.length; i < l; i++) {\r\n const operator = val[i];\r\n if (operator === '-') {\r\n positive = !positive;\r\n }\r\n }\r\n\r\n return positive ? '+' : '-';\r\n });\r\n}\r\n\r\n// Property Set Helpers\r\nexport const PARENT_SCOPE = Symbol('parent');\r\n\r\n// merges a set of properties together into a single set retaining\r\n// the parent scope link as well.\r\nexport function mergePropertySets(...args) {\r\n const res = {};\r\n for (let i = 0, l = args.length; i < l; i++) {\r\n const obj = args[i];\r\n for (const key in obj) {\r\n res[key] = obj[key];\r\n }\r\n if (PARENT_SCOPE in obj) {\r\n res[PARENT_SCOPE] = obj[PARENT_SCOPE];\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n// Copies a property set and creates a link to the original set as a parent scope\r\nexport function createNewPropertyScope(properties) {\r\n const res = mergePropertySets(properties);\r\n res[PARENT_SCOPE] = properties;\r\n return res;\r\n}\r\n","var INUMBER = 'INUMBER';\nvar IOP1 = 'IOP1';\nvar IOP2 = 'IOP2';\nvar IOP3 = 'IOP3';\nvar IVAR = 'IVAR';\nvar IVARNAME = 'IVARNAME';\nvar IFUNCALL = 'IFUNCALL';\nvar IFUNDEF = 'IFUNDEF';\nvar IEXPR = 'IEXPR';\nvar IEXPREVAL = 'IEXPREVAL';\nvar IMEMBER = 'IMEMBER';\nvar IENDSTATEMENT = 'IENDSTATEMENT';\nvar IARRAY = 'IARRAY';\n\nfunction Instruction(type, value) {\n this.type = type;\n this.value = (value !== undefined && value !== null) ? value : 0;\n}\n\nInstruction.prototype.toString = function () {\n switch (this.type) {\n case INUMBER:\n case IOP1:\n case IOP2:\n case IOP3:\n case IVAR:\n case IVARNAME:\n case IENDSTATEMENT:\n return this.value;\n case IFUNCALL:\n return 'CALL ' + this.value;\n case IFUNDEF:\n return 'DEF ' + this.value;\n case IARRAY:\n return 'ARRAY ' + this.value;\n case IMEMBER:\n return '.' + this.value;\n default:\n return 'Invalid Instruction';\n }\n};\n\nfunction unaryInstruction(value) {\n return new Instruction(IOP1, value);\n}\n\nfunction binaryInstruction(value) {\n return new Instruction(IOP2, value);\n}\n\nfunction ternaryInstruction(value) {\n return new Instruction(IOP3, value);\n}\n\nfunction simplify(tokens, unaryOps, binaryOps, ternaryOps, values) {\n var nstack = [];\n var newexpression = [];\n var n1, n2, n3;\n var f;\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER || type === IVARNAME) {\n if (Array.isArray(item.value)) {\n nstack.push.apply(nstack, simplify(item.value.map(function (x) {\n return new Instruction(INUMBER, x);\n }).concat(new Instruction(IARRAY, item.value.length)), unaryOps, binaryOps, ternaryOps, values));\n } else {\n nstack.push(item);\n }\n } else if (type === IVAR && values.hasOwnProperty(item.value)) {\n item = new Instruction(INUMBER, values[item.value]);\n nstack.push(item);\n } else if (type === IOP2 && nstack.length > 1) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = binaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value));\n nstack.push(item);\n } else if (type === IOP3 && nstack.length > 2) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(n1.value ? n2.value : n3.value);\n } else {\n f = ternaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value, n2.value, n3.value));\n nstack.push(item);\n }\n } else if (type === IOP1 && nstack.length > 0) {\n n1 = nstack.pop();\n f = unaryOps[item.value];\n item = new Instruction(INUMBER, f(n1.value));\n nstack.push(item);\n } else if (type === IEXPR) {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(new Instruction(IEXPR, simplify(item.value, unaryOps, binaryOps, ternaryOps, values)));\n } else if (type === IMEMBER && nstack.length > 0) {\n n1 = nstack.pop();\n nstack.push(new Instruction(INUMBER, n1.value[item.value]));\n } /* else if (type === IARRAY && nstack.length >= item.value) {\n var length = item.value;\n while (length-- > 0) {\n newexpression.push(nstack.pop());\n }\n newexpression.push(new Instruction(IARRAY, item.value));\n } */ else {\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n newexpression.push(item);\n }\n }\n while (nstack.length > 0) {\n newexpression.push(nstack.shift());\n }\n return newexpression;\n}\n\nfunction substitute(tokens, variable, expr) {\n var newexpression = [];\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === IVAR && item.value === variable) {\n for (var j = 0; j < expr.tokens.length; j++) {\n var expritem = expr.tokens[j];\n var replitem;\n if (expritem.type === IOP1) {\n replitem = unaryInstruction(expritem.value);\n } else if (expritem.type === IOP2) {\n replitem = binaryInstruction(expritem.value);\n } else if (expritem.type === IOP3) {\n replitem = ternaryInstruction(expritem.value);\n } else {\n replitem = new Instruction(expritem.type, expritem.value);\n }\n newexpression.push(replitem);\n }\n } else if (type === IEXPR) {\n newexpression.push(new Instruction(IEXPR, substitute(item.value, variable, expr)));\n } else {\n newexpression.push(item);\n }\n }\n return newexpression;\n}\n\nfunction evaluate(tokens, expr, values) {\n var nstack = [];\n var n1, n2, n3;\n var f, args, argCount;\n\n if (isExpressionEvaluator(tokens)) {\n return resolveExpression(tokens, values);\n }\n\n var numTokens = tokens.length;\n\n for (var i = 0; i < numTokens; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER || type === IVARNAME) {\n nstack.push(item.value);\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === 'and') {\n nstack.push(n1 ? !!evaluate(n2, expr, values) : false);\n } else if (item.value === 'or') {\n nstack.push(n1 ? true : !!evaluate(n2, expr, values));\n } else if (item.value === '=') {\n f = expr.binaryOps[item.value];\n nstack.push(f(n1, evaluate(n2, expr, values), values));\n } else {\n f = expr.binaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values), resolveExpression(n2, values)));\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n if (item.value === '?') {\n nstack.push(evaluate(n1 ? n2 : n3, expr, values));\n } else {\n f = expr.ternaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values), resolveExpression(n2, values), resolveExpression(n3, values)));\n }\n } else if (type === IVAR) {\n if (item.value in expr.functions) {\n nstack.push(expr.functions[item.value]);\n } else if (item.value in expr.unaryOps && expr.parser.isOperatorEnabled(item.value)) {\n nstack.push(expr.unaryOps[item.value]);\n } else {\n var v = values[item.value];\n if (v !== undefined) {\n nstack.push(v);\n } else {\n throw new Error('undefined variable: ' + item.value);\n }\n }\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = expr.unaryOps[item.value];\n nstack.push(f(resolveExpression(n1, values)));\n } else if (type === IFUNCALL) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(resolveExpression(nstack.pop(), values));\n }\n f = nstack.pop();\n if (f.apply && f.call) {\n nstack.push(f.apply(undefined, args));\n } else {\n throw new Error(f + ' is not a function');\n }\n } else if (type === IFUNDEF) {\n // Create closure to keep references to arguments and expression\n nstack.push((function () {\n var n2 = nstack.pop();\n var args = [];\n var argCount = item.value;\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n var n1 = nstack.pop();\n var f = function () {\n var scope = Object.assign({}, values);\n for (var i = 0, len = args.length; i < len; i++) {\n scope[args[i]] = arguments[i];\n }\n return evaluate(n2, expr, scope);\n };\n // f.name = n1\n Object.defineProperty(f, 'name', {\n value: n1,\n writable: false\n });\n values[n1] = f;\n return f;\n })());\n } else if (type === IEXPR) {\n nstack.push(createExpressionEvaluator(item, expr));\n } else if (type === IEXPREVAL) {\n nstack.push(item);\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1[item.value]);\n } else if (type === IENDSTATEMENT) {\n nstack.pop();\n } else if (type === IARRAY) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n nstack.push(args);\n } else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n throw new Error('invalid Expression (parity)');\n }\n // Explicitly return zero to avoid test issues caused by -0\n return nstack[0] === 0 ? 0 : resolveExpression(nstack[0], values);\n}\n\nfunction createExpressionEvaluator(token, expr, values) {\n if (isExpressionEvaluator(token)) return token;\n return {\n type: IEXPREVAL,\n value: function (scope) {\n return evaluate(token.value, expr, scope);\n }\n };\n}\n\nfunction isExpressionEvaluator(n) {\n return n && n.type === IEXPREVAL;\n}\n\nfunction resolveExpression(n, values) {\n return isExpressionEvaluator(n) ? n.value(values) : n;\n}\n\nfunction expressionToString(tokens, toJS) {\n var nstack = [];\n var n1, n2, n3;\n var f, args, argCount;\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n var type = item.type;\n if (type === INUMBER) {\n if (typeof item.value === 'number' && item.value < 0) {\n nstack.push('(' + item.value + ')');\n } else if (Array.isArray(item.value)) {\n nstack.push('[' + item.value.map(escapeValue).join(', ') + ']');\n } else {\n nstack.push(escapeValue(item.value));\n }\n } else if (type === IOP2) {\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (toJS) {\n if (f === '^') {\n nstack.push('Math.pow(' + n1 + ', ' + n2 + ')');\n } else if (f === 'and') {\n nstack.push('(!!' + n1 + ' && !!' + n2 + ')');\n } else if (f === 'or') {\n nstack.push('(!!' + n1 + ' || !!' + n2 + ')');\n } else if (f === '||') {\n nstack.push('(function(a,b){ return Array.isArray(a) && Array.isArray(b) ? a.concat(b) : String(a) + String(b); }((' + n1 + '),(' + n2 + ')))');\n } else if (f === '==') {\n nstack.push('(' + n1 + ' === ' + n2 + ')');\n } else if (f === '!=') {\n nstack.push('(' + n1 + ' !== ' + n2 + ')');\n } else if (f === '[') {\n nstack.push(n1 + '[(' + n2 + ') | 0]');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n } else {\n if (f === '[') {\n nstack.push(n1 + '[' + n2 + ']');\n } else {\n nstack.push('(' + n1 + ' ' + f + ' ' + n2 + ')');\n }\n }\n } else if (type === IOP3) {\n n3 = nstack.pop();\n n2 = nstack.pop();\n n1 = nstack.pop();\n f = item.value;\n if (f === '?') {\n nstack.push('(' + n1 + ' ? ' + n2 + ' : ' + n3 + ')');\n } else {\n throw new Error('invalid Expression');\n }\n } else if (type === IVAR || type === IVARNAME) {\n nstack.push(item.value);\n } else if (type === IOP1) {\n n1 = nstack.pop();\n f = item.value;\n if (f === '-' || f === '+') {\n nstack.push('(' + f + n1 + ')');\n } else if (toJS) {\n if (f === 'not') {\n nstack.push('(' + '!' + n1 + ')');\n } else if (f === '!') {\n nstack.push('fac(' + n1 + ')');\n } else {\n nstack.push(f + '(' + n1 + ')');\n }\n } else if (f === '!') {\n nstack.push('(' + n1 + '!)');\n } else {\n nstack.push('(' + f + ' ' + n1 + ')');\n }\n } else if (type === IFUNCALL) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n f = nstack.pop();\n nstack.push(f + '(' + args.join(', ') + ')');\n } else if (type === IFUNDEF) {\n n2 = nstack.pop();\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n n1 = nstack.pop();\n if (toJS) {\n nstack.push('(' + n1 + ' = function(' + args.join(', ') + ') { return ' + n2 + ' })');\n } else {\n nstack.push('(' + n1 + '(' + args.join(', ') + ') = ' + n2 + ')');\n }\n } else if (type === IMEMBER) {\n n1 = nstack.pop();\n nstack.push(n1 + '.' + item.value);\n } else if (type === IARRAY) {\n argCount = item.value;\n args = [];\n while (argCount-- > 0) {\n args.unshift(nstack.pop());\n }\n nstack.push('[' + args.join(', ') + ']');\n } else if (type === IEXPR) {\n nstack.push('(' + expressionToString(item.value, toJS) + ')');\n } else if (type === IENDSTATEMENT) ; else {\n throw new Error('invalid Expression');\n }\n }\n if (nstack.length > 1) {\n if (toJS) {\n nstack = [ nstack.join(',') ];\n } else {\n nstack = [ nstack.join(';') ];\n }\n }\n return String(nstack[0]);\n}\n\nfunction escapeValue(v) {\n if (typeof v === 'string') {\n return JSON.stringify(v).replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n }\n return v;\n}\n\nfunction contains(array, obj) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === obj) {\n return true;\n }\n }\n return false;\n}\n\nfunction getSymbols(tokens, symbols, options) {\n options = options || {};\n var withMembers = !!options.withMembers;\n var prevVar = null;\n\n for (var i = 0; i < tokens.length; i++) {\n var item = tokens[i];\n if (item.type === IVAR || item.type === IVARNAME) {\n if (!withMembers && !contains(symbols, item.value)) {\n symbols.push(item.value);\n } else if (prevVar !== null) {\n if (!contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n prevVar = item.value;\n } else {\n prevVar = item.value;\n }\n } else if (item.type === IMEMBER && withMembers && prevVar !== null) {\n prevVar += '.' + item.value;\n } else if (item.type === IEXPR) {\n getSymbols(item.value, symbols, options);\n } else if (prevVar !== null) {\n if (!contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n prevVar = null;\n }\n }\n\n if (prevVar !== null && !contains(symbols, prevVar)) {\n symbols.push(prevVar);\n }\n}\n\nfunction Expression(tokens, parser) {\n this.tokens = tokens;\n this.parser = parser;\n this.unaryOps = parser.unaryOps;\n this.binaryOps = parser.binaryOps;\n this.ternaryOps = parser.ternaryOps;\n this.functions = parser.functions;\n}\n\nExpression.prototype.simplify = function (values) {\n values = values || {};\n return new Expression(simplify(this.tokens, this.unaryOps, this.binaryOps, this.ternaryOps, values), this.parser);\n};\n\nExpression.prototype.substitute = function (variable, expr) {\n if (!(expr instanceof Expression)) {\n expr = this.parser.parse(String(expr));\n }\n\n return new Expression(substitute(this.tokens, variable, expr), this.parser);\n};\n\nExpression.prototype.evaluate = function (values) {\n values = values || {};\n return evaluate(this.tokens, this, values);\n};\n\nExpression.prototype.toString = function () {\n return expressionToString(this.tokens, false);\n};\n\nExpression.prototype.symbols = function (options) {\n options = options || {};\n var vars = [];\n getSymbols(this.tokens, vars, options);\n return vars;\n};\n\nExpression.prototype.variables = function (options) {\n options = options || {};\n var vars = [];\n getSymbols(this.tokens, vars, options);\n var functions = this.functions;\n return vars.filter(function (name) {\n return !(name in functions);\n });\n};\n\nExpression.prototype.toJSFunction = function (param, variables) {\n var expr = this;\n var f = new Function(param, 'with(this.functions) with (this.ternaryOps) with (this.binaryOps) with (this.unaryOps) { return ' + expressionToString(this.simplify(variables).tokens, true) + '; }'); // eslint-disable-line no-new-func\n return function () {\n return f.apply(expr, arguments);\n };\n};\n\nvar TEOF = 'TEOF';\nvar TOP = 'TOP';\nvar TNUMBER = 'TNUMBER';\nvar TSTRING = 'TSTRING';\nvar TPAREN = 'TPAREN';\nvar TBRACKET = 'TBRACKET';\nvar TCOMMA = 'TCOMMA';\nvar TNAME = 'TNAME';\nvar TSEMICOLON = 'TSEMICOLON';\n\nfunction Token(type, value, index) {\n this.type = type;\n this.value = value;\n this.index = index;\n}\n\nToken.prototype.toString = function () {\n return this.type + ': ' + this.value;\n};\n\nfunction TokenStream(parser, expression) {\n this.pos = 0;\n this.current = null;\n this.unaryOps = parser.unaryOps;\n this.binaryOps = parser.binaryOps;\n this.ternaryOps = parser.ternaryOps;\n this.consts = parser.consts;\n this.expression = expression;\n this.savedPosition = 0;\n this.savedCurrent = null;\n this.options = parser.options;\n this.parser = parser;\n}\n\nTokenStream.prototype.newToken = function (type, value, pos) {\n return new Token(type, value, pos != null ? pos : this.pos);\n};\n\nTokenStream.prototype.save = function () {\n this.savedPosition = this.pos;\n this.savedCurrent = this.current;\n};\n\nTokenStream.prototype.restore = function () {\n this.pos = this.savedPosition;\n this.current = this.savedCurrent;\n};\n\nTokenStream.prototype.next = function () {\n if (this.pos >= this.expression.length) {\n return this.newToken(TEOF, 'EOF');\n }\n\n if (this.isWhitespace() || this.isComment()) {\n return this.next();\n } else if (this.isRadixInteger() ||\n this.isNumber() ||\n this.isOperator() ||\n this.isString() ||\n this.isParen() ||\n this.isBracket() ||\n this.isComma() ||\n this.isSemicolon() ||\n this.isNamedOp() ||\n this.isConst() ||\n this.isName()) {\n return this.current;\n } else {\n this.parseError('Unknown character \"' + this.expression.charAt(this.pos) + '\"');\n }\n};\n\nTokenStream.prototype.isString = function () {\n var r = false;\n var startPos = this.pos;\n var quote = this.expression.charAt(startPos);\n\n if (quote === '\\'' || quote === '\"') {\n var index = this.expression.indexOf(quote, startPos + 1);\n while (index >= 0 && this.pos < this.expression.length) {\n this.pos = index + 1;\n if (this.expression.charAt(index - 1) !== '\\\\') {\n var rawString = this.expression.substring(startPos + 1, index);\n this.current = this.newToken(TSTRING, this.unescape(rawString), startPos);\n r = true;\n break;\n }\n index = this.expression.indexOf(quote, index + 1);\n }\n }\n return r;\n};\n\nTokenStream.prototype.isParen = function () {\n var c = this.expression.charAt(this.pos);\n if (c === '(' || c === ')') {\n this.current = this.newToken(TPAREN, c);\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isBracket = function () {\n var c = this.expression.charAt(this.pos);\n if ((c === '[' || c === ']') && this.isOperatorEnabled('[')) {\n this.current = this.newToken(TBRACKET, c);\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isComma = function () {\n var c = this.expression.charAt(this.pos);\n if (c === ',') {\n this.current = this.newToken(TCOMMA, ',');\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isSemicolon = function () {\n var c = this.expression.charAt(this.pos);\n if (c === ';') {\n this.current = this.newToken(TSEMICOLON, ';');\n this.pos++;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isConst = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && c !== '.' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (str in this.consts) {\n this.current = this.newToken(TNUMBER, this.consts[str]);\n this.pos += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isNamedOp = function () {\n var startPos = this.pos;\n var i = startPos;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n }\n }\n if (i > startPos) {\n var str = this.expression.substring(startPos, i);\n if (this.isOperatorEnabled(str) && (str in this.binaryOps || str in this.unaryOps || str in this.ternaryOps)) {\n this.current = this.newToken(TOP, str);\n this.pos += str.length;\n return true;\n }\n }\n return false;\n};\n\nTokenStream.prototype.isName = function () {\n var startPos = this.pos;\n var i = startPos;\n var hasLetter = false;\n for (; i < this.expression.length; i++) {\n var c = this.expression.charAt(i);\n if (c.toUpperCase() === c.toLowerCase()) {\n if (i === this.pos && (c === '$' || c === '_')) {\n if (c === '_') {\n hasLetter = true;\n }\n continue;\n } else if (i === this.pos || !hasLetter || (c !== '_' && (c < '0' || c > '9'))) {\n break;\n }\n } else {\n hasLetter = true;\n }\n }\n if (hasLetter) {\n var str = this.expression.substring(startPos, i);\n this.current = this.newToken(TNAME, str);\n this.pos += str.length;\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isWhitespace = function () {\n var r = false;\n var c = this.expression.charAt(this.pos);\n while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {\n r = true;\n this.pos++;\n if (this.pos >= this.expression.length) {\n break;\n }\n c = this.expression.charAt(this.pos);\n }\n return r;\n};\n\nvar codePointPattern = /^[0-9a-f]{4}$/i;\n\nTokenStream.prototype.unescape = function (v) {\n var index = v.indexOf('\\\\');\n if (index < 0) {\n return v;\n }\n\n var buffer = v.substring(0, index);\n while (index >= 0) {\n var c = v.charAt(++index);\n switch (c) {\n case '\\'':\n buffer += '\\'';\n break;\n case '\"':\n buffer += '\"';\n break;\n case '\\\\':\n buffer += '\\\\';\n break;\n case '/':\n buffer += '/';\n break;\n case 'b':\n buffer += '\\b';\n break;\n case 'f':\n buffer += '\\f';\n break;\n case 'n':\n buffer += '\\n';\n break;\n case 'r':\n buffer += '\\r';\n break;\n case 't':\n buffer += '\\t';\n break;\n case 'u':\n // interpret the following 4 characters as the hex of the unicode code point\n var codePoint = v.substring(index + 1, index + 5);\n if (!codePointPattern.test(codePoint)) {\n this.parseError('Illegal escape sequence: \\\\u' + codePoint);\n }\n buffer += String.fromCharCode(parseInt(codePoint, 16));\n index += 4;\n break;\n default:\n throw this.parseError('Illegal escape sequence: \"\\\\' + c + '\"');\n }\n ++index;\n var backslash = v.indexOf('\\\\', index);\n buffer += v.substring(index, backslash < 0 ? v.length : backslash);\n index = backslash;\n }\n\n return buffer;\n};\n\nTokenStream.prototype.isComment = function () {\n var c = this.expression.charAt(this.pos);\n if (c === '/' && this.expression.charAt(this.pos + 1) === '*') {\n this.pos = this.expression.indexOf('*/', this.pos) + 2;\n if (this.pos === 1) {\n this.pos = this.expression.length;\n }\n return true;\n }\n return false;\n};\n\nTokenStream.prototype.isRadixInteger = function () {\n var pos = this.pos;\n\n if (pos >= this.expression.length - 2 || this.expression.charAt(pos) !== '0') {\n return false;\n }\n ++pos;\n\n var radix;\n var validDigit;\n if (this.expression.charAt(pos) === 'x') {\n radix = 16;\n validDigit = /^[0-9a-f]$/i;\n ++pos;\n } else if (this.expression.charAt(pos) === 'b') {\n radix = 2;\n validDigit = /^[01]$/i;\n ++pos;\n } else {\n return false;\n }\n\n var valid = false;\n var startPos = pos;\n\n while (pos < this.expression.length) {\n var c = this.expression.charAt(pos);\n if (validDigit.test(c)) {\n pos++;\n valid = true;\n } else {\n break;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseInt(this.expression.substring(startPos, pos), radix));\n this.pos = pos;\n }\n return valid;\n};\n\nTokenStream.prototype.isNumber = function () {\n var valid = false;\n var pos = this.pos;\n var startPos = pos;\n var resetPos = pos;\n var foundDot = false;\n var foundDigits = false;\n var c;\n\n while (pos < this.expression.length) {\n c = this.expression.charAt(pos);\n if ((c >= '0' && c <= '9') || (!foundDot && c === '.')) {\n if (c === '.') {\n foundDot = true;\n } else {\n foundDigits = true;\n }\n pos++;\n valid = foundDigits;\n } else {\n break;\n }\n }\n\n if (valid) {\n resetPos = pos;\n }\n\n if (c === 'e' || c === 'E') {\n pos++;\n var acceptSign = true;\n var validExponent = false;\n while (pos < this.expression.length) {\n c = this.expression.charAt(pos);\n if (acceptSign && (c === '+' || c === '-')) {\n acceptSign = false;\n } else if (c >= '0' && c <= '9') {\n validExponent = true;\n acceptSign = false;\n } else {\n break;\n }\n pos++;\n }\n\n if (!validExponent) {\n pos = resetPos;\n }\n }\n\n if (valid) {\n this.current = this.newToken(TNUMBER, parseFloat(this.expression.substring(startPos, pos)));\n this.pos = pos;\n } else {\n this.pos = resetPos;\n }\n return valid;\n};\n\nTokenStream.prototype.isOperator = function () {\n var startPos = this.pos;\n var c = this.expression.charAt(this.pos);\n\n if (c === '+' || c === '-' || c === '*' || c === '/' || c === '%' || c === '^' || c === '?' || c === ':' || c === '.') {\n this.current = this.newToken(TOP, c);\n } else if (c === '∙' || c === '•') {\n this.current = this.newToken(TOP, '*');\n } else if (c === '>') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '>=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, '>');\n }\n } else if (c === '<') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '<=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, '<');\n }\n } else if (c === '|') {\n if (this.expression.charAt(this.pos + 1) === '|') {\n this.current = this.newToken(TOP, '||');\n this.pos++;\n } else {\n return false;\n }\n } else if (c === '=') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '==');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, c);\n }\n } else if (c === '!') {\n if (this.expression.charAt(this.pos + 1) === '=') {\n this.current = this.newToken(TOP, '!=');\n this.pos++;\n } else {\n this.current = this.newToken(TOP, c);\n }\n } else {\n return false;\n }\n this.pos++;\n\n if (this.isOperatorEnabled(this.current.value)) {\n return true;\n } else {\n this.pos = startPos;\n return false;\n }\n};\n\nTokenStream.prototype.isOperatorEnabled = function (op) {\n return this.parser.isOperatorEnabled(op);\n};\n\nTokenStream.prototype.getCoordinates = function () {\n var line = 0;\n var column;\n var newline = -1;\n do {\n line++;\n column = this.pos - newline;\n newline = this.expression.indexOf('\\n', newline + 1);\n } while (newline >= 0 && newline < this.pos);\n\n return {\n line: line,\n column: column\n };\n};\n\nTokenStream.prototype.parseError = function (msg) {\n var coords = this.getCoordinates();\n throw new Error('parse error [' + coords.line + ':' + coords.column + ']: ' + msg);\n};\n\nfunction ParserState(parser, tokenStream, options) {\n this.parser = parser;\n this.tokens = tokenStream;\n this.current = null;\n this.nextToken = null;\n this.next();\n this.savedCurrent = null;\n this.savedNextToken = null;\n this.allowMemberAccess = options.allowMemberAccess !== false;\n}\n\nParserState.prototype.next = function () {\n this.current = this.nextToken;\n return (this.nextToken = this.tokens.next());\n};\n\nParserState.prototype.tokenMatches = function (token, value) {\n if (typeof value === 'undefined') {\n return true;\n } else if (Array.isArray(value)) {\n return contains(value, token.value);\n } else if (typeof value === 'function') {\n return value(token);\n } else {\n return token.value === value;\n }\n};\n\nParserState.prototype.save = function () {\n this.savedCurrent = this.current;\n this.savedNextToken = this.nextToken;\n this.tokens.save();\n};\n\nParserState.prototype.restore = function () {\n this.tokens.restore();\n this.current = this.savedCurrent;\n this.nextToken = this.savedNextToken;\n};\n\nParserState.prototype.accept = function (type, value) {\n if (this.nextToken.type === type && this.tokenMatches(this.nextToken, value)) {\n this.next();\n return true;\n }\n return false;\n};\n\nParserState.prototype.expect = function (type, value) {\n if (!this.accept(type, value)) {\n var coords = this.tokens.getCoordinates();\n throw new Error('parse error [' + coords.line + ':' + coords.column + ']: Expected ' + (value || type));\n }\n};\n\nParserState.prototype.parseAtom = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TNAME) || this.accept(TOP, isPrefixOperator)) {\n instr.push(new Instruction(IVAR, this.current.value));\n } else if (this.accept(TNUMBER)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TSTRING)) {\n instr.push(new Instruction(INUMBER, this.current.value));\n } else if (this.accept(TPAREN, '(')) {\n this.parseExpression(instr);\n this.expect(TPAREN, ')');\n } else if (this.accept(TBRACKET, '[')) {\n if (this.accept(TBRACKET, ']')) {\n instr.push(new Instruction(IARRAY, 0));\n } else {\n var argCount = this.parseArrayList(instr);\n instr.push(new Instruction(IARRAY, argCount));\n }\n } else {\n throw new Error('unexpected ' + this.nextToken);\n }\n};\n\nParserState.prototype.parseExpression = function (instr) {\n var exprInstr = [];\n if (this.parseUntilEndStatement(instr, exprInstr)) {\n return;\n }\n this.parseVariableAssignmentExpression(exprInstr);\n if (this.parseUntilEndStatement(instr, exprInstr)) {\n return;\n }\n this.pushExpression(instr, exprInstr);\n};\n\nParserState.prototype.pushExpression = function (instr, exprInstr) {\n for (var i = 0, len = exprInstr.length; i < len; i++) {\n instr.push(exprInstr[i]);\n }\n};\n\nParserState.prototype.parseUntilEndStatement = function (instr, exprInstr) {\n if (!this.accept(TSEMICOLON)) return false;\n if (this.nextToken && this.nextToken.type !== TEOF && !(this.nextToken.type === TPAREN && this.nextToken.value === ')')) {\n exprInstr.push(new Instruction(IENDSTATEMENT));\n }\n if (this.nextToken.type !== TEOF) {\n this.parseExpression(exprInstr);\n }\n instr.push(new Instruction(IEXPR, exprInstr));\n return true;\n};\n\nParserState.prototype.parseArrayList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TBRACKET, ']')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseVariableAssignmentExpression = function (instr) {\n this.parseConditionalExpression(instr);\n while (this.accept(TOP, '=')) {\n var varName = instr.pop();\n var varValue = [];\n var lastInstrIndex = instr.length - 1;\n if (varName.type === IFUNCALL) {\n if (!this.tokens.isOperatorEnabled('()=')) {\n throw new Error('function definition is not permitted');\n }\n for (var i = 0, len = varName.value + 1; i < len; i++) {\n var index = lastInstrIndex - i;\n if (instr[index].type === IVAR) {\n instr[index] = new Instruction(IVARNAME, instr[index].value);\n }\n }\n this.parseVariableAssignmentExpression(varValue);\n instr.push(new Instruction(IEXPR, varValue));\n instr.push(new Instruction(IFUNDEF, varName.value));\n continue;\n }\n if (varName.type !== IVAR && varName.type !== IMEMBER) {\n throw new Error('expected variable for assignment');\n }\n this.parseVariableAssignmentExpression(varValue);\n instr.push(new Instruction(IVARNAME, varName.value));\n instr.push(new Instruction(IEXPR, varValue));\n instr.push(binaryInstruction('='));\n }\n};\n\nParserState.prototype.parseConditionalExpression = function (instr) {\n this.parseOrExpression(instr);\n while (this.accept(TOP, '?')) {\n var trueBranch = [];\n var falseBranch = [];\n this.parseConditionalExpression(trueBranch);\n this.expect(TOP, ':');\n this.parseConditionalExpression(falseBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(ternaryInstruction('?'));\n }\n};\n\nParserState.prototype.parseOrExpression = function (instr) {\n this.parseAndExpression(instr);\n while (this.accept(TOP, 'or')) {\n var falseBranch = [];\n this.parseAndExpression(falseBranch);\n instr.push(new Instruction(IEXPR, falseBranch));\n instr.push(binaryInstruction('or'));\n }\n};\n\nParserState.prototype.parseAndExpression = function (instr) {\n this.parseComparison(instr);\n while (this.accept(TOP, 'and')) {\n var trueBranch = [];\n this.parseComparison(trueBranch);\n instr.push(new Instruction(IEXPR, trueBranch));\n instr.push(binaryInstruction('and'));\n }\n};\n\nvar COMPARISON_OPERATORS = ['==', '!=', '<', '<=', '>=', '>', 'in'];\n\nParserState.prototype.parseComparison = function (instr) {\n this.parseAddSub(instr);\n while (this.accept(TOP, COMPARISON_OPERATORS)) {\n var op = this.current;\n this.parseAddSub(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nvar ADD_SUB_OPERATORS = ['+', '-', '||'];\n\nParserState.prototype.parseAddSub = function (instr) {\n this.parseTerm(instr);\n while (this.accept(TOP, ADD_SUB_OPERATORS)) {\n var op = this.current;\n this.parseTerm(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nvar TERM_OPERATORS = ['*', '/', '%'];\n\nParserState.prototype.parseTerm = function (instr) {\n this.parseFactor(instr);\n while (this.accept(TOP, TERM_OPERATORS)) {\n var op = this.current;\n this.parseFactor(instr);\n instr.push(binaryInstruction(op.value));\n }\n};\n\nParserState.prototype.parseFactor = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n this.save();\n if (this.accept(TOP, isPrefixOperator)) {\n if (this.current.value !== '-' && this.current.value !== '+') {\n if (this.nextToken.type === TPAREN && this.nextToken.value === '(') {\n this.restore();\n this.parseExponential(instr);\n return;\n } else if (this.nextToken.type === TSEMICOLON || this.nextToken.type === TCOMMA || this.nextToken.type === TEOF || (this.nextToken.type === TPAREN && this.nextToken.value === ')')) {\n this.restore();\n this.parseAtom(instr);\n return;\n }\n }\n\n var op = this.current;\n this.parseFactor(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseExponential(instr);\n }\n};\n\nParserState.prototype.parseExponential = function (instr) {\n this.parsePostfixExpression(instr);\n while (this.accept(TOP, '^')) {\n this.parseFactor(instr);\n instr.push(binaryInstruction('^'));\n }\n};\n\nParserState.prototype.parsePostfixExpression = function (instr) {\n this.parseFunctionCall(instr);\n while (this.accept(TOP, '!')) {\n instr.push(unaryInstruction('!'));\n }\n};\n\nParserState.prototype.parseFunctionCall = function (instr) {\n var unaryOps = this.tokens.unaryOps;\n function isPrefixOperator(token) {\n return token.value in unaryOps;\n }\n\n if (this.accept(TOP, isPrefixOperator)) {\n var op = this.current;\n this.parseAtom(instr);\n instr.push(unaryInstruction(op.value));\n } else {\n this.parseMemberExpression(instr);\n while (this.accept(TPAREN, '(')) {\n if (this.accept(TPAREN, ')')) {\n instr.push(new Instruction(IFUNCALL, 0));\n } else {\n var argCount = this.parseArgumentList(instr);\n instr.push(new Instruction(IFUNCALL, argCount));\n }\n }\n }\n};\n\nParserState.prototype.parseArgumentList = function (instr) {\n var argCount = 0;\n\n while (!this.accept(TPAREN, ')')) {\n this.parseExpression(instr);\n ++argCount;\n while (this.accept(TCOMMA)) {\n this.parseExpression(instr);\n ++argCount;\n }\n }\n\n return argCount;\n};\n\nParserState.prototype.parseMemberExpression = function (instr) {\n this.parseAtom(instr);\n while (this.accept(TOP, '.') || this.accept(TBRACKET, '[')) {\n var op = this.current;\n\n if (op.value === '.') {\n if (!this.allowMemberAccess) {\n throw new Error('unexpected \".\", member access is not permitted');\n }\n\n this.expect(TNAME);\n instr.push(new Instruction(IMEMBER, this.current.value));\n } else if (op.value === '[') {\n if (!this.tokens.isOperatorEnabled('[')) {\n throw new Error('unexpected \"[]\", arrays are disabled');\n }\n\n this.parseExpression(instr);\n this.expect(TBRACKET, ']');\n instr.push(binaryInstruction('['));\n } else {\n throw new Error('unexpected symbol: ' + op.value);\n }\n }\n};\n\nfunction add(a, b) {\n return Number(a) + Number(b);\n}\n\nfunction sub(a, b) {\n return a - b;\n}\n\nfunction mul(a, b) {\n return a * b;\n}\n\nfunction div(a, b) {\n return a / b;\n}\n\nfunction mod(a, b) {\n return a % b;\n}\n\nfunction concat(a, b) {\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.concat(b);\n }\n return '' + a + b;\n}\n\nfunction equal(a, b) {\n return a === b;\n}\n\nfunction notEqual(a, b) {\n return a !== b;\n}\n\nfunction greaterThan(a, b) {\n return a > b;\n}\n\nfunction lessThan(a, b) {\n return a < b;\n}\n\nfunction greaterThanEqual(a, b) {\n return a >= b;\n}\n\nfunction lessThanEqual(a, b) {\n return a <= b;\n}\n\nfunction andOperator(a, b) {\n return Boolean(a && b);\n}\n\nfunction orOperator(a, b) {\n return Boolean(a || b);\n}\n\nfunction inOperator(a, b) {\n return contains(b, a);\n}\n\nfunction sinh(a) {\n return ((Math.exp(a) - Math.exp(-a)) / 2);\n}\n\nfunction cosh(a) {\n return ((Math.exp(a) + Math.exp(-a)) / 2);\n}\n\nfunction tanh(a) {\n if (a === Infinity) return 1;\n if (a === -Infinity) return -1;\n return (Math.exp(a) - Math.exp(-a)) / (Math.exp(a) + Math.exp(-a));\n}\n\nfunction asinh(a) {\n if (a === -Infinity) return a;\n return Math.log(a + Math.sqrt((a * a) + 1));\n}\n\nfunction acosh(a) {\n return Math.log(a + Math.sqrt((a * a) - 1));\n}\n\nfunction atanh(a) {\n return (Math.log((1 + a) / (1 - a)) / 2);\n}\n\nfunction log10(a) {\n return Math.log(a) * Math.LOG10E;\n}\n\nfunction neg(a) {\n return -a;\n}\n\nfunction not(a) {\n return !a;\n}\n\nfunction trunc(a) {\n return a < 0 ? Math.ceil(a) : Math.floor(a);\n}\n\nfunction random(a) {\n return Math.random() * (a || 1);\n}\n\nfunction factorial(a) { // a!\n return gamma(a + 1);\n}\n\nfunction isInteger(value) {\n return isFinite(value) && (value === Math.round(value));\n}\n\nvar GAMMA_G = 4.7421875;\nvar GAMMA_P = [\n 0.99999999999999709182,\n 57.156235665862923517, -59.597960355475491248,\n 14.136097974741747174, -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4, -0.98374475304879564677e-4,\n 0.15808870322491248884e-3, -0.21026444172410488319e-3,\n 0.21743961811521264320e-3, -0.16431810653676389022e-3,\n 0.84418223983852743293e-4, -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Gamma function from math.js\nfunction gamma(n) {\n var t, x;\n\n if (isInteger(n)) {\n if (n <= 0) {\n return isFinite(n) ? Infinity : NaN;\n }\n\n if (n > 171) {\n return Infinity; // Will overflow\n }\n\n var value = n - 2;\n var res = n - 1;\n while (value > 1) {\n res *= value;\n value--;\n }\n\n if (res === 0) {\n res = 1; // 0! is per definition 1\n }\n\n return res;\n }\n\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * gamma(1 - n));\n }\n\n if (n >= 171.35) {\n return Infinity; // will overflow\n }\n\n if (n > 85.0) { // Extended Stirling Approx\n var twoN = n * n;\n var threeN = twoN * n;\n var fourN = threeN * n;\n var fiveN = fourN * n;\n return Math.sqrt(2 * Math.PI / n) * Math.pow((n / Math.E), n) *\n (1 + (1 / (12 * n)) + (1 / (288 * twoN)) - (139 / (51840 * threeN)) -\n (571 / (2488320 * fourN)) + (163879 / (209018880 * fiveN)) +\n (5246819 / (75246796800 * fiveN * n)));\n }\n\n --n;\n x = GAMMA_P[0];\n for (var i = 1; i < GAMMA_P.length; ++i) {\n x += GAMMA_P[i] / (n + i);\n }\n\n t = n + GAMMA_G + 0.5;\n return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\n\nfunction stringOrArrayLength(s) {\n if (Array.isArray(s)) {\n return s.length;\n }\n return String(s).length;\n}\n\nfunction hypot() {\n var sum = 0;\n var larg = 0;\n for (var i = 0; i < arguments.length; i++) {\n var arg = Math.abs(arguments[i]);\n var div;\n if (larg < arg) {\n div = larg / arg;\n sum = (sum * div * div) + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else {\n sum += arg;\n }\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n}\n\nfunction condition(cond, yep, nope) {\n return cond ? yep : nope;\n}\n\n/**\n* Decimal adjustment of a number.\n* From @escopecz.\n*\n* @param {Number} value The number.\n* @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).\n* @return {Number} The adjusted value.\n*/\nfunction roundTo(value, exp) {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = -(+exp);\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n // Shift back\n value = value.toString().split('e');\n return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n}\n\nfunction setVar(name, value, variables) {\n if (variables) variables[name] = value;\n return value;\n}\n\nfunction arrayIndex(array, index) {\n return array[index | 0];\n}\n\nfunction max(array) {\n if (arguments.length === 1 && Array.isArray(array)) {\n return Math.max.apply(Math, array);\n } else {\n return Math.max.apply(Math, arguments);\n }\n}\n\nfunction min(array) {\n if (arguments.length === 1 && Array.isArray(array)) {\n return Math.min.apply(Math, array);\n } else {\n return Math.min.apply(Math, arguments);\n }\n}\n\nfunction arrayMap(f, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to map is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to map is not an array');\n }\n return a.map(function (x, i) {\n return f(x, i);\n });\n}\n\nfunction arrayFold(f, init, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to fold is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to fold is not an array');\n }\n return a.reduce(function (acc, x, i) {\n return f(acc, x, i);\n }, init);\n}\n\nfunction arrayFilter(f, a) {\n if (typeof f !== 'function') {\n throw new Error('First argument to filter is not a function');\n }\n if (!Array.isArray(a)) {\n throw new Error('Second argument to filter is not an array');\n }\n return a.filter(function (x, i) {\n return f(x, i);\n });\n}\n\nfunction stringOrArrayIndexOf(target, s) {\n if (!(Array.isArray(s) || typeof s === 'string')) {\n throw new Error('Second argument to indexOf is not a string or array');\n }\n\n return s.indexOf(target);\n}\n\nfunction arrayJoin(sep, a) {\n if (!Array.isArray(a)) {\n throw new Error('Second argument to join is not an array');\n }\n\n return a.join(sep);\n}\n\nfunction sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n}\n\nvar ONE_THIRD = 1/3;\nfunction cbrt(x) {\n return x < 0 ? -Math.pow(-x, ONE_THIRD) : Math.pow(x, ONE_THIRD);\n}\n\nfunction expm1(x) {\n return Math.exp(x) - 1;\n}\n\nfunction log1p(x) {\n return Math.log(1 + x);\n}\n\nfunction log2(x) {\n return Math.log(x) / Math.LN2;\n}\n\nfunction Parser(options) {\n this.options = options || {};\n this.unaryOps = {\n sin: Math.sin,\n cos: Math.cos,\n tan: Math.tan,\n asin: Math.asin,\n acos: Math.acos,\n atan: Math.atan,\n sinh: Math.sinh || sinh,\n cosh: Math.cosh || cosh,\n tanh: Math.tanh || tanh,\n asinh: Math.asinh || asinh,\n acosh: Math.acosh || acosh,\n atanh: Math.atanh || atanh,\n sqrt: Math.sqrt,\n cbrt: Math.cbrt || cbrt,\n log: Math.log,\n log2: Math.log2 || log2,\n ln: Math.log,\n lg: Math.log10 || log10,\n log10: Math.log10 || log10,\n expm1: Math.expm1 || expm1,\n log1p: Math.log1p || log1p,\n abs: Math.abs,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round,\n trunc: Math.trunc || trunc,\n '-': neg,\n '+': Number,\n exp: Math.exp,\n not: not,\n length: stringOrArrayLength,\n '!': factorial,\n sign: Math.sign || sign\n };\n\n this.binaryOps = {\n '+': add,\n '-': sub,\n '*': mul,\n '/': div,\n '%': mod,\n '^': Math.pow,\n '||': concat,\n '==': equal,\n '!=': notEqual,\n '>': greaterThan,\n '<': lessThan,\n '>=': greaterThanEqual,\n '<=': lessThanEqual,\n and: andOperator,\n or: orOperator,\n 'in': inOperator,\n '=': setVar,\n '[': arrayIndex\n };\n\n this.ternaryOps = {\n '?': condition\n };\n\n this.functions = {\n random: random,\n fac: factorial,\n min: min,\n max: max,\n hypot: Math.hypot || hypot,\n pyt: Math.hypot || hypot, // backward compat\n pow: Math.pow,\n atan2: Math.atan2,\n 'if': condition,\n gamma: gamma,\n roundTo: roundTo,\n map: arrayMap,\n fold: arrayFold,\n filter: arrayFilter,\n indexOf: stringOrArrayIndexOf,\n join: arrayJoin\n };\n\n this.consts = {\n E: Math.E,\n PI: Math.PI,\n 'true': true,\n 'false': false\n };\n}\n\nParser.prototype.parse = function (expr) {\n var instr = [];\n var parserState = new ParserState(\n this,\n new TokenStream(this, expr),\n { allowMemberAccess: this.options.allowMemberAccess }\n );\n\n parserState.parseExpression(instr);\n parserState.expect(TEOF, 'EOF');\n\n return new Expression(instr, this);\n};\n\nParser.prototype.evaluate = function (expr, variables) {\n return this.parse(expr).evaluate(variables);\n};\n\nvar sharedParser = new Parser();\n\nParser.parse = function (expr) {\n return sharedParser.parse(expr);\n};\n\nParser.evaluate = function (expr, variables) {\n return sharedParser.parse(expr).evaluate(variables);\n};\n\nvar optionNameMap = {\n '+': 'add',\n '-': 'subtract',\n '*': 'multiply',\n '/': 'divide',\n '%': 'remainder',\n '^': 'power',\n '!': 'factorial',\n '<': 'comparison',\n '>': 'comparison',\n '<=': 'comparison',\n '>=': 'comparison',\n '==': 'comparison',\n '!=': 'comparison',\n '||': 'concatenate',\n 'and': 'logical',\n 'or': 'logical',\n 'not': 'logical',\n '?': 'conditional',\n ':': 'conditional',\n '=': 'assignment',\n '[': 'array',\n '()=': 'fndef'\n};\n\nfunction getOptionName(op) {\n return optionNameMap.hasOwnProperty(op) ? optionNameMap[op] : op;\n}\n\nParser.prototype.isOperatorEnabled = function (op) {\n var optionName = getOptionName(op);\n var operators = this.options.operators || {};\n\n return !(optionName in operators) || !!operators[optionName];\n};\n\n/*!\n Based on ndef.parser, by Raphael Graf(r@undefined.ch)\n http://www.undefined.ch/mparser/index.html\n\n Ported to JavaScript and modified by Matthew Crumley (email@matthewcrumley.com, http://silentmatt.com/)\n\n You are free to use and modify this code in anyway you find useful. Please leave this comment in the code\n to acknowledge its original source. If you feel like it, I enjoy hearing about projects that use my code,\n but don't feel like you have to let me know or ask permission.\n*/\n\n// Backwards compatibility\nvar index = {\n Parser: Parser,\n Expression: Expression\n};\n\nexport default index;\nexport { Expression, Parser };\n","import { isNumber } from './utils.js';\r\nimport { Parser } from 'expr-eval';\r\n\r\nconst parser = new Parser();\r\n\r\nparser.unaryOps = {\r\n '-': parser.unaryOps['-'],\r\n '+': parser.unaryOps['+'],\r\n '!': parser.unaryOps['not'],\r\n 'not': parser.unaryOps['not'],\r\n};\r\n\r\nparser.functions = {\r\n sin: Math.sin,\r\n cos: Math.cos,\r\n tan: Math.tan,\r\n asin: Math.asin,\r\n acos: Math.acos,\r\n atan: Math.atan,\r\n log: Math.log,\r\n atan2: Math.atan2,\r\n pow: Math.pow,\r\n radians: (degrees) => { return degrees * (Math.PI / 180); },\r\n degrees: (radians) => { return radians * (180 / Math.PI); },\r\n};\r\n\r\nparser.binaryOps = {\r\n ...parser.binaryOps,\r\n '+': (a, b) => {\r\n if (isNumber(a)) {\r\n a = Number(a);\r\n }\r\n\r\n if (isNumber(b)) {\r\n b = Number(b);\r\n }\r\n\r\n return a + b;\r\n },\r\n 'in': (a, b) => {\r\n if (Array.isArray(b)) {\r\n return b.includes(a);\r\n } else if (typeof b === 'string') {\r\n return b.includes(a);\r\n } else {\r\n return a in b;\r\n }\r\n },\r\n '||': (a, b) => Boolean(a || b),\r\n\r\n // binary AND is not supported by expr-eval. See expr-eval issue #253.\r\n // '&&': (a, b) => Boolean(a || b),\r\n};\r\n\r\nparser.consts = {\r\n ...parser.consts,\r\n pi: Math.PI,\r\n e: Math.E,\r\n};\r\n\r\nexport function evaluateExpression(expr) {\r\n return parser.evaluate(expr);\r\n}\r\n","import {\r\n getUrlBase,\r\n removeEndCommentsFromArray,\r\n getElementsWithName,\r\n deepClone,\r\n isOperator,\r\n isString,\r\n isNumber,\r\n normalizeExpression,\r\n tokenize,\r\n mergePropertySets,\r\n createNewPropertyScope,\r\n PARENT_SCOPE,\r\n} from './utils.js';\r\nimport { evaluateExpression } from './evaluateExpression.js';\r\n\r\nexport class XacroParser {\r\n\r\n constructor() {\r\n this.inOrder = true;\r\n this.requirePrefix = true;\r\n this.localProperties = true;\r\n this.rospackCommands = {};\r\n this.workingPath = '';\r\n }\r\n\r\n async getFileContents(path) {\r\n throw new Error('XacroParser: getFileContents() not implemented.');\r\n }\r\n\r\n async parse(data) {\r\n\r\n /* Evaluation */\r\n // Evaluate expressions and rospack commands in attribute text\r\n // TODO: expressions can basically be any python expression\r\n function evaluateAttribute(str, properties, finalValue = false) {\r\n\r\n // recursively unpack parameters\r\n function unpackParams(str, properties) {\r\n\r\n // if we're unpacking something that's already a number then just return\r\n if (typeof str === 'number') {\r\n return str;\r\n }\r\n\r\n // process all of the ${} and $() expressions\r\n const res = str.replace(/(\\$?\\$\\([^)]+\\))|(\\$?\\${[^}]+})/g, match => {\r\n\r\n // if we encounter an escaped $$ then return early\r\n if (/^\\$\\$/.test(match)) {\r\n return match;\r\n }\r\n\r\n const isRospackCommand = /^\\$\\(/.test(match);\r\n let contents = match.substring(2, match.length - 1);\r\n contents = unpackParams(contents, properties);\r\n\r\n if (isRospackCommand) {\r\n\r\n const command = unpackParams(contents, properties);\r\n const tokens = command.split(/\\s+/g);\r\n const stem = tokens.shift();\r\n\r\n try {\r\n return handleRospackCommand(stem, ...tokens);\r\n } catch (e) {\r\n throw new Error(`XacroParser: Cannot run rospack command \"${ contents }\".\\n` + e.message);\r\n }\r\n\r\n } else {\r\n if (stack.includes(contents)) {\r\n throw new Error(\r\n `XacroParser: Cannot evaluate infinitely recursive expression: ${\r\n stack.join(' > ')\r\n } > ${\r\n contents\r\n }`,\r\n );\r\n }\r\n\r\n stack.push(contents);\r\n\r\n const operators = /([()/*+!\\-%|&=[\\]])+/g;\r\n const expr = tokenize(contents)\r\n .map(t => {\r\n operators.lastIndex = 0;\r\n if (isOperator(t)) return t;\r\n if (isNumber(t)) return t;\r\n if (isString(t)) return t;\r\n\r\n if (t in properties) {\r\n const arg = unpackParams(properties[t], properties);\r\n if (!isNumber(arg)) {\r\n return `\"${ arg.toString().replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"') }\"`;\r\n } else {\r\n return arg;\r\n }\r\n } else {\r\n return t;\r\n }\r\n }).map(t => {\r\n // add some spaces around non numbers and operators to avoid\r\n // inadvertently creating a variable token.\r\n operators.lastIndex = 0;\r\n if (/^[^0-9.]/.test(t) && !operators.test(t)) {\r\n return ` ${ t } `;\r\n } else {\r\n return t;\r\n }\r\n }).join('');\r\n\r\n stack.pop();\r\n\r\n if (isString(expr)) {\r\n return expr.substring(1, expr.length - 1);\r\n } else if (isNumber(expr)) {\r\n return expr;\r\n } else {\r\n const cleanExpr = normalizeExpression(expr);\r\n return handleExpressionEvaluation(cleanExpr);\r\n }\r\n }\r\n });\r\n\r\n return res;\r\n\r\n }\r\n\r\n const stack = [];\r\n const allProps = mergePropertySets(globalProperties, properties);\r\n try {\r\n // fix the escaped dollar signs only at the end to prevent double evaluation and only\r\n // if the value is not an intermediate value like a computed property.\r\n let result = unpackParams(str, allProps);\r\n if (finalValue) {\r\n result = result.replace(/\\${2}([({])/g, (val, brace) => `$${ brace }`);\r\n }\r\n return result;\r\n } catch (e) {\r\n throw new Error(`XacroParser: Failed to process expression \"${ str }\". \\n` + e.message);\r\n }\r\n\r\n }\r\n\r\n // Evaluate the given node as a macro\r\n async function evaluateMacro(node, properties, macros, resultsList) {\r\n\r\n // Find the macro\r\n const macroName = node.tagName.replace(/^xacro:/, '');\r\n const macro = macros[macroName];\r\n\r\n if (!macro) {\r\n throw new Error(`XacroParser: Cannot find macro \"${ macroName }\"`);\r\n }\r\n\r\n // Copy the properties and macros so we can modify them with\r\n // macro input fields and local macro definitions.\r\n const ogProperties = properties;\r\n const ogMacros = macros;\r\n properties = createNewPropertyScope(properties);\r\n macros = mergePropertySets(macros);\r\n\r\n // Modify the properties with macro param inputs\r\n let children = [];\r\n for (const c of node.children) {\r\n await processNode(c, ogProperties, ogMacros, children);\r\n }\r\n children = children.filter(c => c.nodeType === c.ELEMENT_NODE);\r\n\r\n let blockCount = 0;\r\n for (const p in macro.params) {\r\n const param = macro.params[p];\r\n if (node.hasAttribute(p)) {\r\n properties[p] = evaluateAttribute(node.getAttribute(p), ogProperties);\r\n } else if (param.type === 'BLOCK') {\r\n properties[p] = [children[blockCount]];\r\n blockCount++;\r\n } else if (param.type === 'MULTI_BLOCK') {\r\n properties[p] = [...children.filter(c => c.tagName === p)[0].childNodes];\r\n } else {\r\n properties[p] = evaluateAttribute(macro.params[p].def, ogProperties);\r\n }\r\n }\r\n\r\n // Expand the macro\r\n const macroChildren = [...macro.node.childNodes];\r\n for (const c of macroChildren) {\r\n const nodes = [];\r\n await processNode(c, properties, macros, nodes);\r\n resultsList.push(...nodes);\r\n }\r\n }\r\n\r\n /* Parsing */\r\n // Conver the params into an object representation\r\n function parseMacroParam(param) {\r\n const obj = {};\r\n\r\n // Save the type of parameter\r\n // - two asterisks means an element expands input multiple\r\n // - one asterisk means copy the first elemnt\r\n // - no asterisks means value param\r\n if (/^\\*\\*/.test(param)) {\r\n obj.type = 'MULTI_BLOCK';\r\n } else if (/^\\*/.test(param)) {\r\n obj.type = 'BLOCK';\r\n } else {\r\n obj.type = 'PARAM';\r\n }\r\n\r\n // strip the asterisks\r\n param = param.replace(/^\\*{1,2}/g, '');\r\n\r\n // Check if a default value is provided\r\n if (/:=/.test(param)) {\r\n const [name, def] = param.split(':=');\r\n\r\n // TODO: Support caret and default syntax\r\n // TODO: is there any difference between the := and = syntax?\r\n if (/^\\^/.test(def) || /\\|/.test(def)) {\r\n throw new Error(`XacroParser: ROS Jade pass-through notation not supported in macro defaults: ${ def }`);\r\n }\r\n\r\n obj.name = name;\r\n if (def.startsWith('\\'') && def.endsWith('\\'')) {\r\n // strip quotes from the default value if it happens to be a string like so:\r\n // a:='0.0 1.0 2.0'\r\n obj.def = def.substring(1, def.length - 1);\r\n } else {\r\n obj.def = def;\r\n }\r\n } else {\r\n obj.name = param;\r\n obj.def = null;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n // Parse a xacro:macro tag\r\n function parseMacro(node) {\r\n // get attributes\r\n const name = node.getAttribute('name').replace(/^xacro:/, '');\r\n const params = node.getAttribute('params');\r\n\r\n // parse params\r\n const inputMap = {};\r\n if (params) {\r\n // find param definitions including string values like a:='0.0 1.0 2.0'\r\n const inputs = params\r\n .trim()\r\n .match(/[^\\s']+('[^']*')?/g)\r\n .map(s => parseMacroParam(s));\r\n inputs.forEach(inp => {\r\n inputMap[inp.name] = inp;\r\n });\r\n }\r\n\r\n return {\r\n name,\r\n node: deepClone(node, false),\r\n params: inputMap,\r\n };\r\n }\r\n\r\n // Recursively process and expand a node\r\n async function processNode(node, properties, macros, resultsList = []) {\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n const res = node.cloneNode();\r\n res.textContent = evaluateAttribute(res.textContent, properties, true);\r\n resultsList.push(res);\r\n return;\r\n }\r\n\r\n let tagName = node.tagName.toLowerCase();\r\n if (!requirePrefix) {\r\n switch (tagName) {\r\n\r\n case 'arg':\r\n case 'property':\r\n case 'macro':\r\n case 'insert_block':\r\n case 'if':\r\n case 'unless':\r\n case 'include':\r\n case 'element':\r\n case 'attribute':\r\n tagName = `xacro:${ tagName }`;\r\n break;\r\n default:\r\n if (tagName in macros) {\r\n tagName = `xacro:${ tagName }`;\r\n }\r\n break;\r\n\r\n }\r\n }\r\n\r\n switch (tagName) {\r\n\r\n case 'xacro:property': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const name = node.getAttribute('name');\r\n\r\n let value;\r\n if (node.hasAttribute('value')) {\r\n value = node.getAttribute('value');\r\n } else if (node.hasAttribute('default')) {\r\n value = node.getAttribute('default');\r\n } else {\r\n const childNodes = [...node.childNodes];\r\n value = [];\r\n for (const c of childNodes) {\r\n value.push(deepClone(c, false));\r\n }\r\n }\r\n\r\n let scope = 'global';\r\n if (localProperties) {\r\n scope = node.getAttribute('scope') || 'local';\r\n }\r\n\r\n // Emulated behavior here\r\n // https://github.com/ros/xacro/blob/melodic-devel/src/xacro/__init__.py#L565\r\n if (scope !== 'local') {\r\n value = evaluateAttribute(value, properties);\r\n }\r\n\r\n if (scope === 'global') {\r\n globalProperties[name] = value;\r\n } else if (scope === 'parent') {\r\n properties[PARENT_SCOPE][name] = value;\r\n } else {\r\n properties[name] = value;\r\n }\r\n\r\n break;\r\n }\r\n case 'xacro:macro': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const macro = parseMacro(node);\r\n macros[macro.name] = macro;\r\n break;\r\n }\r\n case 'xacro:insert_block': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const name = node.getAttribute('name');\r\n const nodes = properties[name];\r\n\r\n for (const c of nodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n return;\r\n }\r\n case 'xacro:if':\r\n case 'xacro:unless': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n const value = evaluateAttribute(node.getAttribute('value'), properties, true);\r\n let bool = null;\r\n if (!isNaN(parseFloat(value))) {\r\n bool = !!parseFloat(value);\r\n } else if (value === 'true' || value === 'false') {\r\n bool = value === 'true';\r\n } else {\r\n bool = value;\r\n }\r\n\r\n if (tagName === 'xacro:unless') {\r\n bool = !bool;\r\n }\r\n\r\n if (bool) {\r\n const childNodes = [...node.childNodes];\r\n for (const c of childNodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n }\r\n return;\r\n }\r\n case 'xacro:include': {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n if (node.hasAttribute('ns')) {\r\n throw new Error('XacroParser: xacro:include name spaces not supported.');\r\n }\r\n const filename = evaluateAttribute(node.getAttribute('filename'), properties, true);\r\n const isAbsolute = /^[/\\\\]/.test(filename) || /^[a-zA-Z]+:[/\\\\]/.test(filename);\r\n const filePath = isAbsolute ? filename : currWorkingPath + filename;\r\n\r\n const prevWorkingPath = currWorkingPath;\r\n currWorkingPath = getUrlBase(filePath);\r\n\r\n const includeContent = await loadInclude(filePath);\r\n const childNodes = [...includeContent.children[0].childNodes];\r\n for (const c of childNodes) {\r\n await processNode(c, properties, macros, resultsList);\r\n }\r\n\r\n currWorkingPath = prevWorkingPath;\r\n return;\r\n }\r\n case 'xacro:arg':\r\n case 'xacro:attribute':\r\n case 'xacro:element':\r\n throw new Error(`XacroParser: ${ tagName } tags not supported.`);\r\n default: {\r\n // TODO: check if there's a 'call' attribute here which indicates that\r\n // a macro should be invoked?\r\n if (/^xacro:/.test(tagName) || tagName in macros) {\r\n removeEndCommentsFromArray(resultsList);\r\n\r\n return evaluateMacro(node, properties, macros, resultsList);\r\n } else {\r\n\r\n const res = node.cloneNode();\r\n for (let i = 0, l = res.attributes.length; i < l; i++) {\r\n const attr = res.attributes[i];\r\n const value = evaluateAttribute(attr.value, properties, true);\r\n res.setAttribute(attr.name, value);\r\n }\r\n\r\n const childNodes = [...node.childNodes];\r\n const resultChildren = [];\r\n for (let i = 0, l = childNodes.length; i < l; i++) {\r\n await processNode(childNodes[i], properties, macros, resultChildren);\r\n }\r\n resultChildren.forEach(c => res.appendChild(c));\r\n resultsList.push(res);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n // Process all property and macro tags into the objects\r\n async function gatherPropertiesAndMacros(el, properties, macros) {\r\n const propertyEl = getElementsWithName(el, 'xacro:property');\r\n if (!requirePrefix) {\r\n propertyEl.push(...getElementsWithName(el, 'property'));\r\n }\r\n for (const el of propertyEl) {\r\n await processNode(el, properties, macros);\r\n }\r\n\r\n const macroEl = getElementsWithName(el, 'xacro:macro');\r\n if (!requirePrefix) {\r\n macroEl.push(...getElementsWithName(el, 'macro'));\r\n }\r\n for (const el of macroEl) {\r\n await processNode(el, properties, macros);\r\n }\r\n }\r\n\r\n // Process a document node with a new property and macro scope\r\n async function processXacro(xacro, properties, macros) {\r\n const res = xacro.cloneNode();\r\n for (let i = 0, l = xacro.children.length; i < l; i++) {\r\n const child = [];\r\n await processNode(xacro.children[i], properties, macros, child);\r\n\r\n const root = child[0];\r\n root.removeAttribute('xmlns:xacro');\r\n res.appendChild(root);\r\n }\r\n return res;\r\n }\r\n\r\n async function loadInclude(path) {\r\n\r\n try {\r\n const text = await scope.getFileContents(path);\r\n return new DOMParser().parseFromString(text, 'text/xml');\r\n } catch (e) {\r\n throw new Error(`XacroParser: Could not load included file: ${ path }`);\r\n }\r\n\r\n }\r\n\r\n async function loadIncludes(xacro, workingPath, results = []) {\r\n\r\n const includeEl = getElementsWithName(xacro, 'xacro:include');\r\n if (!requirePrefix) {\r\n includeEl.push(...getElementsWithName(xacro, 'include'));\r\n }\r\n\r\n const promises = includeEl.map(el => {\r\n // TODO: Handle namespaces on the include.\r\n if (el.hasAttribute('ns')) {\r\n throw new Error('XacroParser: xacro:include name spaces not supported.');\r\n }\r\n\r\n const filename = el.getAttribute('filename');\r\n const namespace = el.getAttribute('ns') || null;\r\n const isAbsolute = /^[/\\\\]/.test(filename) || /^[a-zA-Z]+:[/\\\\]/.test(filename);\r\n const filePath = isAbsolute ? filename : workingPath + filename;\r\n const pr = loadInclude(filePath)\r\n .then(content => {\r\n results.push({ filename, namespace, content });\r\n\r\n const relPath = getUrlBase(filePath);\r\n return loadIncludes(content, relPath, results);\r\n });\r\n return pr;\r\n });\r\n\r\n await Promise.all(promises);\r\n return results;\r\n }\r\n\r\n // TODO: Provide a default \"arg\" command function that defaults to\r\n // xacro:arg fields.\r\n const scope = this;\r\n const inOrder = this.inOrder;\r\n\r\n // add a file separator to the end of the working path if it's specified\r\n // and doesn't have one.\r\n const workingPath = this.workingPath + (this.workingPath && !/[\\\\/]$/.test(this.workingPath) ? '/' : '');\r\n const requirePrefix = this.requirePrefix;\r\n const rospackCommands = this.rospackCommands;\r\n const globalMacros = {};\r\n const includeMap = {};\r\n const globalProperties = { True: 1, False: 0 };\r\n globalProperties[PARENT_SCOPE] = globalProperties;\r\n\r\n const handleRospackCommand = (stem, ...args) => {\r\n\r\n if (rospackCommands instanceof Function) {\r\n\r\n return rospackCommands(stem, ...args);\r\n\r\n } else {\r\n\r\n return rospackCommands[stem](...args);\r\n\r\n }\r\n\r\n };\r\n const handleExpressionEvaluation = evaluateExpression;\r\n\r\n let localProperties = this.localProperties;\r\n let currWorkingPath = workingPath;\r\n let content = new DOMParser().parseFromString(data, 'text/xml');\r\n\r\n if (localProperties && !inOrder) {\r\n console.warn('XacroParser: Implicitly setting \"localProperties\" option to false because \"inOrder\" is false.');\r\n localProperties = false;\r\n }\r\n\r\n let inOrderPromise = null;\r\n if (!inOrder) {\r\n inOrderPromise = (async function() {\r\n await gatherPropertiesAndMacros(content, globalProperties, globalMacros);\r\n content = deepClone(content, true);\r\n\r\n return loadIncludes(content, workingPath)\r\n .then(arr => {\r\n arr.forEach(inc => {\r\n // TODO: handle namespaces here when rolling up properties and macros\r\n gatherPropertiesAndMacros(inc.content, globalProperties, globalMacros);\r\n inc.content = deepClone(inc.content, true);\r\n includeMap[inc.filename] = inc.content;\r\n });\r\n });\r\n })();\r\n } else {\r\n inOrderPromise = Promise.resolve();\r\n }\r\n\r\n await inOrderPromise;\r\n return processXacro(content, globalProperties, globalMacros);\r\n }\r\n\r\n}\r\n","import { getUrlBase } from './utils.js';\r\nimport { XacroParser } from './XacroParser.js';\r\n\r\nexport class XacroLoader extends XacroParser {\r\n\r\n constructor() {\r\n\r\n super();\r\n this.fetchOptions = {};\r\n\r\n }\r\n\r\n load(url, onComplete, onError) {\r\n\r\n const workingPath = getUrlBase(url);\r\n if (this.workingPath === '') {\r\n\r\n this.workingPath = workingPath;\r\n\r\n }\r\n\r\n this\r\n .getFileContents(url)\r\n .then(text => {\r\n\r\n this.parse(text, onComplete, onError);\r\n\r\n })\r\n .catch(e => {\r\n\r\n if (onError) {\r\n\r\n onError(e);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n parse(data, onComplete, onError) {\r\n\r\n super\r\n .parse(data)\r\n .then(onComplete)\r\n .catch(e => {\r\n\r\n if (onError) {\r\n\r\n onError(e);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n getFileContents(path) {\r\n\r\n return fetch(path, this.fetchOptions)\r\n .then(res => {\r\n\r\n if (res.ok) {\r\n\r\n return res.text();\r\n\r\n } else {\r\n\r\n throw new Error(`XacroLoader: Failed to load url '${ path }' with error code ${ res.status } : ${ res.statusText }.`);\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n}\r\n"],"names":[],"mappings":"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"} \ No newline at end of file