continuo
Version:
Select notes on a rendered MEI music score and create permalinks using the Music Addressability URL scheme.
1,168 lines (973 loc) • 3.02 MB
JavaScript
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
/*
* jQuery XPath plugin v0.3.1
* https://github.com/ilinsky/jquery-xpath
* Copyright 2015, Sergey Ilinsky
* Dual licensed under the MIT and GPL licenses.
*
* Includes xpath.js - XPath 2.0 implementation in JavaScript
* https://github.com/ilinsky/xpath.js
* Copyright 2015, Sergey Ilinsky
* Dual licensed under the MIT and GPL licenses.
*
*/
(function () {
var cString = window.String,
cBoolean = window.Boolean,
cNumber = window.Number,
cObject = window.Object,
cArray = window.Array,
cRegExp = window.RegExp,
cDate = window.Date,
cFunction = window.Function,
cMath = window.Math,
cError = window.Error,
cSyntaxError = window.SyntaxError,
cTypeError = window.TypeError,
fIsNaN = window.isNaN,
fIsFinite = window.isFinite,
nNaN = window.NaN,
nInfinity = window.Infinity,
fWindow_btoa = window.btoa,
fWindow_atob = window.atob,
fWindow_parseInt = window.parseInt,
fString_trim = function () {
return cString.prototype.trim ? function (sValue) {
return cString(sValue).trim();
} : function (sValue) {
return cString(sValue).replace(/^\s+|\s+$/g, '');
};
}(),
fArray_indexOf = function () {
return cArray.prototype.indexOf ? function (aValue, vItem) {
return aValue.indexOf(vItem);
} : function (aValue, vItem) {
for (var nIndex = 0, nLength = aValue.length; nIndex < nLength; nIndex++) {
if (aValue[nIndex] === vItem) return nIndex;
}return -1;
};
}();
var sNS_XSD = "http://www.w3.org/2001/XMLSchema",
sNS_XPF = "http://www.w3.org/2005/xpath-functions",
sNS_XNS = "http://www.w3.org/2000/xmlns/",
sNS_XML = "http://www.w3.org/XML/1998/namespace";
function cException(sCode, sMessage) {
this.code = sCode;
this.message = sMessage || oException_messages[sCode];
};
cException.prototype = new cError();
var oException_messages = {};
oException_messages["XPDY0002"] = "Evaluation of an expression relies on some part of the dynamic context that has not been assigned a value.";
oException_messages["XPST0003"] = "Expression is not a valid instance of the grammar";
oException_messages["XPTY0004"] = "Type is not appropriate for the context in which the expression occurs";
oException_messages["XPST0008"] = "Expression refers to an element name, attribute name, schema type name, namespace prefix, or variable name that is not defined in the static context";
oException_messages["XPST0010"] = "Axis not supported";
oException_messages["XPST0017"] = "Expanded QName and number of arguments in a function call do not match the name and arity of a function signature";
oException_messages["XPTY0018"] = "The result of the last step in a path expression contains both nodes and atomic values";
oException_messages["XPTY0019"] = "The result of a step (other than the last step) in a path expression contains an atomic value.";
oException_messages["XPTY0020"] = "In an axis step, the context item is not a node.";
oException_messages["XPST0051"] = "It is a static error if a QName that is used as an AtomicType in a SequenceType is not defined in the in-scope schema types as an atomic type.";
oException_messages["XPST0081"] = "A QName used in an expression contains a namespace prefix that cannot be expanded into a namespace URI by using the statically known namespaces.";
oException_messages["FORG0001"] = "Invalid value for cast/constructor.";
oException_messages["FORG0003"] = "fn:zero-or-one called with a sequence containing more than one item.";
oException_messages["FORG0004"] = "fn:one-or-more called with a sequence containing no items.";
oException_messages["FORG0005"] = "fn:exactly-one called with a sequence containing zero or more than one item.";
oException_messages["FORG0006"] = "Invalid argument type.";
oException_messages["FODC0001"] = "No context document.";
oException_messages["FORX0001"] = "Invalid regular expression flags.";
oException_messages["FOCA0002"] = "Invalid lexical value.";
oException_messages["FOCH0002"] = "Unsupported collation.";
oException_messages["FONS0004"] = "No namespace found for prefix.";
function cLexer(sValue) {
var aMatch = sValue.match(/\$?(?:(?![0-9-])(?:[\w-]+|\*):)?(?![0-9-])(?:[\w-]+|\*)|\(:|:\)|\/\/|\.\.|::|\d+(?:\.\d*)?(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?|"[^"]*(?:""[^"]*)*"|'[^']*(?:''[^']*)*'|<<|>>|[!<>]=|(?![0-9-])[\w-]+:\*|\s+|./g);
if (aMatch) {
var nStack = 0;
for (var nIndex = 0, nLength = aMatch.length; nIndex < nLength; nIndex++) {
if (aMatch[nIndex] == '(:') nStack++;else if (aMatch[nIndex] == ':)' && nStack) nStack--;else if (!nStack && !/^\s/.test(aMatch[nIndex])) this[this.length++] = aMatch[nIndex];
}if (nStack) throw new cException("XPST0003", "Unclosed comment");
}
};
cLexer.prototype.index = 0;
cLexer.prototype.length = 0;
cLexer.prototype.reset = function () {
this.index = 0;
};
cLexer.prototype.peek = function (nOffset) {
return this[this.index + (nOffset || 0)] || '';
};
cLexer.prototype.next = function (nOffset) {
return (this.index += nOffset || 1) < this.length;
};
cLexer.prototype.back = function (nOffset) {
return (this.index -= nOffset || 1) > 0;
};
cLexer.prototype.eof = function () {
return this.index >= this.length;
};
function cDOMAdapter() {};
cDOMAdapter.prototype.isNode = function (oNode) {
return oNode && !!oNode.nodeType;
};
cDOMAdapter.prototype.getProperty = function (oNode, sName) {
return oNode[sName];
};
cDOMAdapter.prototype.isSameNode = function (oNode, oNode2) {
return oNode == oNode2;
};
cDOMAdapter.prototype.compareDocumentPosition = function (oNode, oNode2) {
return oNode.compareDocumentPosition(oNode2);
};
cDOMAdapter.prototype.lookupNamespaceURI = function (oNode, sPrefix) {
return oNode.lookupNamespaceURI(sPrefix);
};
cDOMAdapter.prototype.getElementById = function (oNode, sId) {
return oNode.getElementById(sId);
};
cDOMAdapter.prototype.getElementsByTagNameNS = function (oNode, sNameSpaceURI, sLocalName) {
return oNode.getElementsByTagNameNS(sNameSpaceURI, sLocalName);
};
function cDynamicContext(oStaticContext, vItem, oScope, oDOMAdapter) {
this.staticContext = oStaticContext;
this.item = vItem;
this.scope = oScope || {};
this.stack = {};
this.DOMAdapter = oDOMAdapter || new cDOMAdapter();
var oDate = new cDate(),
nOffset = oDate.getTimezoneOffset();
this.dateTime = new cXSDateTime(oDate.getFullYear(), oDate.getMonth() + 1, oDate.getDate(), oDate.getHours(), oDate.getMinutes(), oDate.getSeconds() + oDate.getMilliseconds() / 1000, -nOffset);
this.timezone = new cXSDayTimeDuration(0, cMath.abs(~~(nOffset / 60)), cMath.abs(nOffset % 60), 0, nOffset > 0);
};
cDynamicContext.prototype.item = null;
cDynamicContext.prototype.position = 0;
cDynamicContext.prototype.size = 0;
cDynamicContext.prototype.scope = null;
cDynamicContext.prototype.stack = null;cDynamicContext.prototype.dateTime = null;
cDynamicContext.prototype.timezone = null;
cDynamicContext.prototype.staticContext = null;
cDynamicContext.prototype.pushVariable = function (sName, vValue) {
if (!this.stack.hasOwnProperty(sName)) this.stack[sName] = [];
this.stack[sName].push(this.scope[sName]);
this.scope[sName] = vValue;
};
cDynamicContext.prototype.popVariable = function (sName) {
if (this.stack.hasOwnProperty(sName)) {
this.scope[sName] = this.stack[sName].pop();
if (!this.stack[sName].length) {
delete this.stack[sName];
if (typeof this.scope[sName] == "undefined") delete this.scope[sName];
}
}
};
function cStaticContext() {
this.dataTypes = {};
this.documents = {};
this.functions = {};
this.collations = {};
this.collections = {};
};
cStaticContext.prototype.baseURI = null;
cStaticContext.prototype.dataTypes = null;
cStaticContext.prototype.documents = null;
cStaticContext.prototype.functions = null;
cStaticContext.prototype.defaultFunctionNamespace = null;
cStaticContext.prototype.collations = null;
cStaticContext.prototype.defaultCollationName = sNS_XPF + "/collation/codepoint";
cStaticContext.prototype.collections = null;
cStaticContext.prototype.namespaceResolver = null;
cStaticContext.prototype.defaultElementNamespace = null;
var rStaticContext_uri = /^(?:\{([^\}]+)\})?(.+)$/;
cStaticContext.prototype.setDataType = function (sUri, fFunction) {
var aMatch = sUri.match(rStaticContext_uri);
if (aMatch) if (aMatch[1] != sNS_XSD) this.dataTypes[sUri] = fFunction;
};
cStaticContext.prototype.getDataType = function (sUri) {
var aMatch = sUri.match(rStaticContext_uri);
if (aMatch) return aMatch[1] == sNS_XSD ? hStaticContext_dataTypes[cRegExp.$2] : this.dataTypes[sUri];
};
cStaticContext.prototype.setDocument = function (sUri, fFunction) {
this.documents[sUri] = fFunction;
};
cStaticContext.prototype.setFunction = function (sUri, fFunction) {
var aMatch = sUri.match(rStaticContext_uri);
if (aMatch) if (aMatch[1] != sNS_XPF) this.functions[sUri] = fFunction;
};
cStaticContext.prototype.getFunction = function (sUri) {
var aMatch = sUri.match(rStaticContext_uri);
if (aMatch) return aMatch[1] == sNS_XPF ? hStaticContext_functions[cRegExp.$2] : this.functions[sUri];
};
cStaticContext.prototype.setCollation = function (sUri, fFunction) {
this.collations[sUri] = fFunction;
};
cStaticContext.prototype.getCollation = function (sUri) {
return this.collations[sUri];
};
cStaticContext.prototype.setCollection = function (sUri, fFunction) {
this.collections[sUri] = fFunction;
};
cStaticContext.prototype.getURIForPrefix = function (sPrefix) {
var oResolver = this.namespaceResolver,
fResolver = oResolver && oResolver.lookupNamespaceURI ? oResolver.lookupNamespaceURI : oResolver,
sNameSpaceURI;
if (fResolver instanceof cFunction && (sNameSpaceURI = fResolver.call(oResolver, sPrefix))) return sNameSpaceURI;
if (sPrefix == 'fn') return sNS_XPF;
if (sPrefix == 'xs') return sNS_XSD;
if (sPrefix == "xml") return sNS_XML;
if (sPrefix == "xmlns") return sNS_XNS;
throw new cException("XPST0081", "Prefix '" + sPrefix + "' has not been declared");
};
cStaticContext.js2xs = function (vItem) {
if (typeof vItem == "boolean") vItem = new cXSBoolean(vItem);else if (typeof vItem == "number") vItem = fIsNaN(vItem) || !fIsFinite(vItem) ? new cXSDouble(vItem) : fNumericLiteral_parseValue(cString(vItem));else vItem = new cXSString(cString(vItem));
return vItem;
};
cStaticContext.xs2js = function (vItem) {
if (vItem instanceof cXSBoolean) vItem = vItem.valueOf();else if (fXSAnyAtomicType_isNumeric(vItem)) vItem = vItem.valueOf();else vItem = vItem.toString();
return vItem;
};
var hStaticContext_functions = {},
hStaticContext_signatures = {},
hStaticContext_dataTypes = {},
hStaticContext_operators = {};
function fStaticContext_defineSystemFunction(sName, aParameters, fFunction) {
hStaticContext_functions[sName] = fFunction;
hStaticContext_signatures[sName] = aParameters;
};
function fStaticContext_defineSystemDataType(sName, fFunction) {
hStaticContext_dataTypes[sName] = fFunction;
};
function cExpression(sExpression, oStaticContext) {
var oLexer = new cLexer(sExpression),
oExpr = fExpr_parse(oLexer, oStaticContext);
if (!oLexer.eof()) throw new cException("XPST0003", "Unexpected token beyond end of query");
if (!oExpr) throw new cException("XPST0003", "Expected expression");
this.internalExpression = oExpr;
};
cExpression.prototype.internalExpression = null;
cExpression.prototype.evaluate = function (oContext) {
return this.internalExpression.evaluate(oContext);
};
function cStringCollator() {};
cStringCollator.prototype.equals = function (sValue1, sValue2) {
throw "Not implemented";
};
cStringCollator.prototype.compare = function (sValue1, sValue2) {
throw "Not implemented";
};
function cXSConstants() {};
cXSConstants.ANYSIMPLETYPE_DT = 1;
cXSConstants.STRING_DT = 2;
cXSConstants.BOOLEAN_DT = 3;
cXSConstants.DECIMAL_DT = 4;
cXSConstants.FLOAT_DT = 5;
cXSConstants.DOUBLE_DT = 6;
cXSConstants.DURATION_DT = 7;
cXSConstants.DATETIME_DT = 8;
cXSConstants.TIME_DT = 9;
cXSConstants.DATE_DT = 10;
cXSConstants.GYEARMONTH_DT = 11;
cXSConstants.GYEAR_DT = 12;
cXSConstants.GMONTHDAY_DT = 13;
cXSConstants.GDAY_DT = 14;
cXSConstants.GMONTH_DT = 15;
cXSConstants.HEXBINARY_DT = 16;
cXSConstants.BASE64BINARY_DT = 17;
cXSConstants.ANYURI_DT = 18;
cXSConstants.QNAME_DT = 19;
cXSConstants.NOTATION_DT = 20;
cXSConstants.NORMALIZEDSTRING_DT = 21;
cXSConstants.TOKEN_DT = 22;
cXSConstants.LANGUAGE_DT = 23;
cXSConstants.NMTOKEN_DT = 24;
cXSConstants.NAME_DT = 25;
cXSConstants.NCNAME_DT = 26;
cXSConstants.ID_DT = 27;
cXSConstants.IDREF_DT = 28;
cXSConstants.ENTITY_DT = 29;
cXSConstants.INTEGER_DT = 30;
cXSConstants.NONPOSITIVEINTEGER_DT = 31;
cXSConstants.NEGATIVEINTEGER_DT = 32;
cXSConstants.LONG_DT = 33;
cXSConstants.INT_DT = 34;
cXSConstants.SHORT_DT = 35;
cXSConstants.BYTE_DT = 36;
cXSConstants.NONNEGATIVEINTEGER_DT = 37;
cXSConstants.UNSIGNEDLONG_DT = 38;
cXSConstants.UNSIGNEDINT_DT = 39;
cXSConstants.UNSIGNEDSHORT_DT = 40;
cXSConstants.UNSIGNEDBYTE_DT = 41;
cXSConstants.POSITIVEINTEGER_DT = 42;
cXSConstants.LISTOFUNION_DT = 43;
cXSConstants.LIST_DT = 44;
cXSConstants.UNAVAILABLE_DT = 45;
cXSConstants.DATETIMESTAMP_DT = 46;
cXSConstants.DAYMONTHDURATION_DT = 47;
cXSConstants.DAYTIMEDURATION_DT = 48;
cXSConstants.PRECISIONDECIMAL_DT = 49;
cXSConstants.ANYATOMICTYPE_DT = 50;
cXSConstants.ANYTYPE_DT = 51;
cXSConstants.XT_YEARMONTHDURATION_DT = -1;
cXSConstants.XT_UNTYPEDATOMIC_DT = -2;
function cExpr() {
this.items = [];
};
cExpr.prototype.items = null;
function fExpr_parse(oLexer, oStaticContext) {
var oItem;
if (oLexer.eof() || !(oItem = fExprSingle_parse(oLexer, oStaticContext))) return;
var oExpr = new cExpr();
oExpr.items.push(oItem);
while (oLexer.peek() == ',') {
oLexer.next();
if (oLexer.eof() || !(oItem = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected expression");
oExpr.items.push(oItem);
}
return oExpr;
};
cExpr.prototype.evaluate = function (oContext) {
var oSequence = [];
for (var nIndex = 0, nLength = this.items.length; nIndex < nLength; nIndex++) {
oSequence = hStaticContext_operators["concatenate"].call(oContext, oSequence, this.items[nIndex].evaluate(oContext));
}return oSequence;
};
function cExprSingle() {};
function fExprSingle_parse(oLexer, oStaticContext) {
if (!oLexer.eof()) return fIfExpr_parse(oLexer, oStaticContext) || fForExpr_parse(oLexer, oStaticContext) || fQuantifiedExpr_parse(oLexer, oStaticContext) || fOrExpr_parse(oLexer, oStaticContext);
};
function cForExpr() {
this.bindings = [];
this.returnExpr = null;
};
cForExpr.prototype.bindings = null;
cForExpr.prototype.returnExpr = null;
function fForExpr_parse(oLexer, oStaticContext) {
if (oLexer.peek() == "for" && oLexer.peek(1).substr(0, 1) == '$') {
oLexer.next();
var oForExpr = new cForExpr(),
oExpr;
do {
oForExpr.bindings.push(fSimpleForBinding_parse(oLexer, oStaticContext));
} while (oLexer.peek() == ',' && oLexer.next());
if (oLexer.peek() != "return") throw new cException("XPST0003", "Expected 'return' token in for expression");
oLexer.next();
if (oLexer.eof() || !(oExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected return statement operand in for expression");
oForExpr.returnExpr = oExpr;
return oForExpr;
}
};
cForExpr.prototype.evaluate = function (oContext) {
var oSequence = [];
(function (oSelf, nBinding) {
var oBinding = oSelf.bindings[nBinding++],
oSequence1 = oBinding.inExpr.evaluate(oContext),
sUri = (oBinding.namespaceURI ? '{' + oBinding.namespaceURI + '}' : '') + oBinding.localName;
for (var nIndex = 0, nLength = oSequence1.length; nIndex < nLength; nIndex++) {
oContext.pushVariable(sUri, oSequence1[nIndex]);
if (nBinding < oSelf.bindings.length) arguments.callee(oSelf, nBinding);else oSequence = oSequence.concat(oSelf.returnExpr.evaluate(oContext));
oContext.popVariable(sUri);
}
})(this, 0);
return oSequence;
};
function cSimpleForBinding(sPrefix, sLocalName, sNameSpaceURI, oInExpr) {
this.prefix = sPrefix;
this.localName = sLocalName;
this.namespaceURI = sNameSpaceURI;
this.inExpr = oInExpr;
};
cSimpleForBinding.prototype.prefix = null;
cSimpleForBinding.prototype.localName = null;
cSimpleForBinding.prototype.namespaceURI = null;
cSimpleForBinding.prototype.inExpr = null;
function fSimpleForBinding_parse(oLexer, oStaticContext) {
var aMatch = oLexer.peek().substr(1).match(rNameTest);
if (!aMatch) throw new cException("XPST0003", "Expected binding in for expression");
if (aMatch[1] == '*' || aMatch[2] == '*') throw new cException("XPST0003", "Illegal use of wildcard in for expression binding variable name");
oLexer.next();
if (oLexer.peek() != "in") throw new cException("XPST0003", "Expected 'in' token in for expression binding");
oLexer.next();
var oExpr;
if (oLexer.eof() || !(oExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected in statement operand in for expression binding");
return new cSimpleForBinding(aMatch[1] || null, aMatch[2], aMatch[1] ? oStaticContext.getURIForPrefix(aMatch[1]) : null, oExpr);
};
function cIfExpr(oCondExpr, oThenExpr, oElseExpr) {
this.condExpr = oCondExpr;
this.thenExpr = oThenExpr;
this.elseExpr = oElseExpr;
};
cIfExpr.prototype.condExpr = null;
cIfExpr.prototype.thenExpr = null;
cIfExpr.prototype.elseExpr = null;
function fIfExpr_parse(oLexer, oStaticContext) {
var oCondExpr, oThenExpr, oElseExpr;
if (oLexer.peek() == "if" && oLexer.peek(1) == '(') {
oLexer.next(2);
if (oLexer.eof() || !(oCondExpr = fExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected if statement operand in conditional expression");
if (oLexer.peek() != ')') throw new cException("XPST0003", "Expected ')' token in for expression");
oLexer.next();
if (oLexer.peek() != "then") throw new cException("XPST0003", "Expected 'then' token in conditional if expression");
oLexer.next();
if (oLexer.eof() || !(oThenExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected then statement operand in condional expression");
if (oLexer.peek() != "else") throw new cException("XPST0003", "Expected 'else' token in conditional if expression");
oLexer.next();
if (oLexer.eof() || !(oElseExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected else statement operand in condional expression");
return new cIfExpr(oCondExpr, oThenExpr, oElseExpr);
}
};
cIfExpr.prototype.evaluate = function (oContext) {
return this[fFunction_sequence_toEBV(this.condExpr.evaluate(oContext), oContext) ? "thenExpr" : "elseExpr"].evaluate(oContext);
};
function cQuantifiedExpr(sQuantifier) {
this.quantifier = sQuantifier;
this.bindings = [];
this.satisfiesExpr = null;
};
cQuantifiedExpr.prototype.bindings = null;
cQuantifiedExpr.prototype.quantifier = null;
cQuantifiedExpr.prototype.satisfiesExpr = null;
function fQuantifiedExpr_parse(oLexer, oStaticContext) {
var sQuantifier = oLexer.peek();
if ((sQuantifier == "some" || sQuantifier == "every") && oLexer.peek(1).substr(0, 1) == '$') {
oLexer.next();
var oQuantifiedExpr = new cQuantifiedExpr(sQuantifier),
oExpr;
do {
oQuantifiedExpr.bindings.push(fSimpleQuantifiedBinding_parse(oLexer, oStaticContext));
} while (oLexer.peek() == ',' && oLexer.next());
if (oLexer.peek() != "satisfies") throw new cException("XPST0003", "Expected 'satisfies' token in quantified expression");
oLexer.next();
if (oLexer.eof() || !(oExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected satisfies statement operand in quantified expression");
oQuantifiedExpr.satisfiesExpr = oExpr;
return oQuantifiedExpr;
}
};
cQuantifiedExpr.prototype.evaluate = function (oContext) {
var bEvery = this.quantifier == "every",
bResult = bEvery ? true : false;
(function (oSelf, nBinding) {
var oBinding = oSelf.bindings[nBinding++],
oSequence1 = oBinding.inExpr.evaluate(oContext),
sUri = (oBinding.namespaceURI ? '{' + oBinding.namespaceURI + '}' : '') + oBinding.localName;
for (var nIndex = 0, nLength = oSequence1.length; nIndex < nLength && (bEvery ? bResult : !bResult); nIndex++) {
oContext.pushVariable(sUri, oSequence1[nIndex]);
if (nBinding < oSelf.bindings.length) arguments.callee(oSelf, nBinding);else bResult = fFunction_sequence_toEBV(oSelf.satisfiesExpr.evaluate(oContext), oContext);
oContext.popVariable(sUri);
}
})(this, 0);
return [new cXSBoolean(bResult)];
};
function cSimpleQuantifiedBinding(sPrefix, sLocalName, sNameSpaceURI, oInExpr) {
this.prefix = sPrefix;
this.localName = sLocalName;
this.namespaceURI = sNameSpaceURI;
this.inExpr = oInExpr;
};
cSimpleQuantifiedBinding.prototype.prefix = null;
cSimpleQuantifiedBinding.prototype.localName = null;
cSimpleQuantifiedBinding.prototype.namespaceURI = null;
cSimpleQuantifiedBinding.prototype.inExpr = null;
function fSimpleQuantifiedBinding_parse(oLexer, oStaticContext) {
var aMatch = oLexer.peek().substr(1).match(rNameTest);
if (!aMatch) throw new cException("XPST0003", "Expected binding in quantified expression");
if (aMatch[1] == '*' || aMatch[2] == '*') throw new cException("XPST0003", "Illegal use of wildcard in quantified expression binding variable name");
oLexer.next();
if (oLexer.peek() != "in") throw new cException("XPST0003", "Expected 'in' token in quantified expression binding");
oLexer.next();
var oExpr;
if (oLexer.eof() || !(oExpr = fExprSingle_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected in statement operand in quantified expression binding");
return new cSimpleQuantifiedBinding(aMatch[1] || null, aMatch[2], aMatch[1] ? oStaticContext.getURIForPrefix(aMatch[1]) : null, oExpr);
};
function cComparisonExpr(oLeft, oRight, sOperator) {
this.left = oLeft;
this.right = oRight;
this.operator = sOperator;
};
cComparisonExpr.prototype.left = null;
cComparisonExpr.prototype.right = null;
cComparisonExpr.prototype.operator = null;
function fComparisonExpr_parse(oLexer, oStaticContext) {
var oExpr, oRight;
if (oLexer.eof() || !(oExpr = fRangeExpr_parse(oLexer, oStaticContext))) return;
if (!(oLexer.peek() in hComparisonExpr_operators)) return oExpr;
var sOperator = oLexer.peek();
oLexer.next();
if (oLexer.eof() || !(oRight = fRangeExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected second operand in comparison expression");
return new cComparisonExpr(oExpr, oRight, sOperator);
};
cComparisonExpr.prototype.evaluate = function (oContext) {
var oResult = hComparisonExpr_operators[this.operator](this, oContext);
return oResult == null ? [] : [oResult];
};
function fComparisonExpr_GeneralComp(oExpr, oContext) {
var oLeft = fFunction_sequence_atomize(oExpr.left.evaluate(oContext), oContext);
if (!oLeft.length) return new cXSBoolean(false);
var oRight = fFunction_sequence_atomize(oExpr.right.evaluate(oContext), oContext);
if (!oRight.length) return new cXSBoolean(false);
var bResult = false;
for (var nLeftIndex = 0, nLeftLength = oLeft.length, bLeft, vLeft; nLeftIndex < nLeftLength && !bResult; nLeftIndex++) {
for (var nRightIndex = 0, nRightLength = oRight.length, bRight, vRight; nRightIndex < nRightLength && !bResult; nRightIndex++) {
vLeft = oLeft[nLeftIndex];
vRight = oRight[nRightIndex];
bLeft = vLeft instanceof cXSUntypedAtomic;
bRight = vRight instanceof cXSUntypedAtomic;
if (bLeft && bRight) {
vLeft = cXSString.cast(vLeft);
vRight = cXSString.cast(vRight);
} else {
if (bLeft) {
if (vRight instanceof cXSDayTimeDuration) vLeft = cXSDayTimeDuration.cast(vLeft);else if (vRight instanceof cXSYearMonthDuration) vLeft = cXSYearMonthDuration.cast(vLeft);else if (vRight.primitiveKind) vLeft = hStaticContext_dataTypes[vRight.primitiveKind].cast(vLeft);
} else if (bRight) {
if (vLeft instanceof cXSDayTimeDuration) vRight = cXSDayTimeDuration.cast(vRight);else if (vLeft instanceof cXSYearMonthDuration) vRight = cXSYearMonthDuration.cast(vRight);else if (vLeft.primitiveKind) vRight = hStaticContext_dataTypes[vLeft.primitiveKind].cast(vRight);
}
if (vLeft instanceof cXSAnyURI) vLeft = cXSString.cast(vLeft);
if (vRight instanceof cXSAnyURI) vRight = cXSString.cast(vRight);
}
bResult = hComparisonExpr_ValueComp_operators[hComparisonExpr_GeneralComp_map[oExpr.operator]](vLeft, vRight, oContext).valueOf();
}
}
return new cXSBoolean(bResult);
};
var hComparisonExpr_GeneralComp_map = {
'=': 'eq',
'!=': 'ne',
'>': 'gt',
'<': 'lt',
'>=': 'ge',
'<=': 'le'
};
function fComparisonExpr_ValueComp(oExpr, oContext) {
var oLeft = fFunction_sequence_atomize(oExpr.left.evaluate(oContext), oContext);
if (!oLeft.length) return null;
fFunctionCall_assertSequenceCardinality(oContext, oLeft, '?', "first operand of '" + oExpr.operator + "'");
var oRight = fFunction_sequence_atomize(oExpr.right.evaluate(oContext), oContext);
if (!oRight.length) return null;
fFunctionCall_assertSequenceCardinality(oContext, oRight, '?', "second operand of '" + oExpr.operator + "'");
var vLeft = oLeft[0],
vRight = oRight[0];
if (vLeft instanceof cXSUntypedAtomic) vLeft = cXSString.cast(vLeft);
if (vRight instanceof cXSUntypedAtomic) vRight = cXSString.cast(vRight);
if (vLeft instanceof cXSAnyURI) vLeft = cXSString.cast(vLeft);
if (vRight instanceof cXSAnyURI) vRight = cXSString.cast(vRight);
return hComparisonExpr_ValueComp_operators[oExpr.operator](vLeft, vRight, oContext);
};
var hComparisonExpr_ValueComp_operators = {};
hComparisonExpr_ValueComp_operators['eq'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-equal";
} else if (oLeft instanceof cXSBoolean) {
if (oRight instanceof cXSBoolean) sOperator = "boolean-equal";
} else if (oLeft instanceof cXSString) {
if (oRight instanceof cXSString) return hStaticContext_operators["numeric-equal"].call(oContext, hStaticContext_functions["compare"].call(oContext, oLeft, oRight), new cXSInteger(0));
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "date-equal";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "time-equal";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "dateTime-equal";
} else if (oLeft instanceof cXSDuration) {
if (oRight instanceof cXSDuration) sOperator = "duration-equal";
} else if (oLeft instanceof cXSGYearMonth) {
if (oRight instanceof cXSGYearMonth) sOperator = "gYearMonth-equal";
} else if (oLeft instanceof cXSGYear) {
if (oRight instanceof cXSGYear) sOperator = "gYear-equal";
} else if (oLeft instanceof cXSGMonthDay) {
if (oRight instanceof cXSGMonthDay) sOperator = "gMonthDay-equal";
} else if (oLeft instanceof cXSGMonth) {
if (oRight instanceof cXSGMonth) sOperator = "gMonth-equal";
} else if (oLeft instanceof cXSGDay) {
if (oRight instanceof cXSGDay) sOperator = "gDay-equal";
} else if (oLeft instanceof cXSQName) {
if (oRight instanceof cXSQName) sOperator = "QName-equal";
} else if (oLeft instanceof cXSHexBinary) {
if (oRight instanceof cXSHexBinary) sOperator = "hexBinary-equal";
} else if (oLeft instanceof cXSBase64Binary) {
if (oRight instanceof cXSBase64Binary) sOperator = "base64Binary-equal";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Cannot compare values of given types");
};
hComparisonExpr_ValueComp_operators['ne'] = function (oLeft, oRight, oContext) {
return new cXSBoolean(!hComparisonExpr_ValueComp_operators['eq'](oLeft, oRight, oContext).valueOf());
};
hComparisonExpr_ValueComp_operators['gt'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-greater-than";
} else if (oLeft instanceof cXSBoolean) {
if (oRight instanceof cXSBoolean) sOperator = "boolean-greater-than";
} else if (oLeft instanceof cXSString) {
if (oRight instanceof cXSString) return hStaticContext_operators["numeric-greater-than"].call(oContext, hStaticContext_functions["compare"].call(oContext, oLeft, oRight), new cXSInteger(0));
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "date-greater-than";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "time-greater-than";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "dateTime-greater-than";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "yearMonthDuration-greater-than";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "dayTimeDuration-greater-than";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Cannot compare values of given types");
};
hComparisonExpr_ValueComp_operators['lt'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-less-than";
} else if (oLeft instanceof cXSBoolean) {
if (oRight instanceof cXSBoolean) sOperator = "boolean-less-than";
} else if (oLeft instanceof cXSString) {
if (oRight instanceof cXSString) return hStaticContext_operators["numeric-less-than"].call(oContext, hStaticContext_functions["compare"].call(oContext, oLeft, oRight), new cXSInteger(0));
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "date-less-than";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "time-less-than";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "dateTime-less-than";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "yearMonthDuration-less-than";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "dayTimeDuration-less-than";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Cannot compare values of given types");
};
hComparisonExpr_ValueComp_operators['ge'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-less-than";
} else if (oLeft instanceof cXSBoolean) {
if (oRight instanceof cXSBoolean) sOperator = "boolean-less-than";
} else if (oLeft instanceof cXSString) {
if (oRight instanceof cXSString) return hStaticContext_operators["numeric-greater-than"].call(oContext, hStaticContext_functions["compare"].call(oContext, oLeft, oRight), new cXSInteger(-1));
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "date-less-than";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "time-less-than";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "dateTime-less-than";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "yearMonthDuration-less-than";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "dayTimeDuration-less-than";
}
if (sOperator) return new cXSBoolean(!hStaticContext_operators[sOperator].call(oContext, oLeft, oRight).valueOf());
throw new cException("XPTY0004", "Cannot compare values of given types");
};
hComparisonExpr_ValueComp_operators['le'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-greater-than";
} else if (oLeft instanceof cXSBoolean) {
if (oRight instanceof cXSBoolean) sOperator = "boolean-greater-than";
} else if (oLeft instanceof cXSString) {
if (oRight instanceof cXSString) return hStaticContext_operators["numeric-less-than"].call(oContext, hStaticContext_functions["compare"].call(oContext, oLeft, oRight), new cXSInteger(1));
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "date-greater-than";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "time-greater-than";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "dateTime-greater-than";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "yearMonthDuration-greater-than";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "dayTimeDuration-greater-than";
}
if (sOperator) return new cXSBoolean(!hStaticContext_operators[sOperator].call(oContext, oLeft, oRight).valueOf());
throw new cException("XPTY0004", "Cannot compare values of given types");
};
function fComparisonExpr_NodeComp(oExpr, oContext) {
var oLeft = oExpr.left.evaluate(oContext);
if (!oLeft.length) return null;
fFunctionCall_assertSequenceCardinality(oContext, oLeft, '?', "first operand of '" + oExpr.operator + "'");
fFunctionCall_assertSequenceItemType(oContext, oLeft, cXTNode, "first operand of '" + oExpr.operator + "'");
var oRight = oExpr.right.evaluate(oContext);
if (!oRight.length) return null;
fFunctionCall_assertSequenceCardinality(oContext, oRight, '?', "second operand of '" + oExpr.operator + "'");
fFunctionCall_assertSequenceItemType(oContext, oRight, cXTNode, "second operand of '" + oExpr.operator + "'");
return hComparisonExpr_NodeComp_operators[oExpr.operator](oLeft[0], oRight[0], oContext);
};
var hComparisonExpr_NodeComp_operators = {};
hComparisonExpr_NodeComp_operators['is'] = function (oLeft, oRight, oContext) {
return hStaticContext_operators["is-same-node"].call(oContext, oLeft, oRight);
};
hComparisonExpr_NodeComp_operators['>>'] = function (oLeft, oRight, oContext) {
return hStaticContext_operators["node-after"].call(oContext, oLeft, oRight);
};
hComparisonExpr_NodeComp_operators['<<'] = function (oLeft, oRight, oContext) {
return hStaticContext_operators["node-before"].call(oContext, oLeft, oRight);
};
var hComparisonExpr_operators = {
'=': fComparisonExpr_GeneralComp,
'!=': fComparisonExpr_GeneralComp,
'<': fComparisonExpr_GeneralComp,
'<=': fComparisonExpr_GeneralComp,
'>': fComparisonExpr_GeneralComp,
'>=': fComparisonExpr_GeneralComp,
'eq': fComparisonExpr_ValueComp,
'ne': fComparisonExpr_ValueComp,
'lt': fComparisonExpr_ValueComp,
'le': fComparisonExpr_ValueComp,
'gt': fComparisonExpr_ValueComp,
'ge': fComparisonExpr_ValueComp,
'is': fComparisonExpr_NodeComp,
'>>': fComparisonExpr_NodeComp,
'<<': fComparisonExpr_NodeComp
};
function cAdditiveExpr(oExpr) {
this.left = oExpr;
this.items = [];
};
cAdditiveExpr.prototype.left = null;
cAdditiveExpr.prototype.items = null;
var hAdditiveExpr_operators = {};
hAdditiveExpr_operators['+'] = function (oLeft, oRight, oContext) {
var sOperator = '',
bReverse = false;
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-add";
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "add-yearMonthDuration-to-date";else if (oRight instanceof cXSDayTimeDuration) sOperator = "add-dayTimeDuration-to-date";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSDate) {
sOperator = "add-yearMonthDuration-to-date";
bReverse = true;
} else if (oRight instanceof cXSDateTime) {
sOperator = "add-yearMonthDuration-to-dateTime";
bReverse = true;
} else if (oRight instanceof cXSYearMonthDuration) sOperator = "add-yearMonthDurations";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDate) {
sOperator = "add-dayTimeDuration-to-date";
bReverse = true;
} else if (oRight instanceof cXSTime) {
sOperator = "add-dayTimeDuration-to-time";
bReverse = true;
} else if (oRight instanceof cXSDateTime) {
sOperator = "add-dayTimeDuration-to-dateTime";
bReverse = true;
} else if (oRight instanceof cXSDayTimeDuration) sOperator = "add-dayTimeDurations";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "add-dayTimeDuration-to-time";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "add-yearMonthDuration-to-dateTime";else if (oRight instanceof cXSDayTimeDuration) sOperator = "add-dayTimeDuration-to-dateTime";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, bReverse ? oRight : oLeft, bReverse ? oLeft : oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
hAdditiveExpr_operators['-'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-subtract";
} else if (oLeft instanceof cXSDate) {
if (oRight instanceof cXSDate) sOperator = "subtract-dates";else if (oRight instanceof cXSYearMonthDuration) sOperator = "subtract-yearMonthDuration-from-date";else if (oRight instanceof cXSDayTimeDuration) sOperator = "subtract-dayTimeDuration-from-date";
} else if (oLeft instanceof cXSTime) {
if (oRight instanceof cXSTime) sOperator = "subtract-times";else if (oRight instanceof cXSDayTimeDuration) sOperator = "subtract-dayTimeDuration-from-time";
} else if (oLeft instanceof cXSDateTime) {
if (oRight instanceof cXSDateTime) sOperator = "subtract-dateTimes";else if (oRight instanceof cXSYearMonthDuration) sOperator = "subtract-yearMonthDuration-from-dateTime";else if (oRight instanceof cXSDayTimeDuration) sOperator = "subtract-dayTimeDuration-from-dateTime";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (oRight instanceof cXSYearMonthDuration) sOperator = "subtract-yearMonthDurations";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (oRight instanceof cXSDayTimeDuration) sOperator = "subtract-dayTimeDurations";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
function fAdditiveExpr_parse(oLexer, oStaticContext) {
var oExpr;
if (oLexer.eof() || !(oExpr = fMultiplicativeExpr_parse(oLexer, oStaticContext))) return;
if (!(oLexer.peek() in hAdditiveExpr_operators)) return oExpr;
var oAdditiveExpr = new cAdditiveExpr(oExpr),
sOperator;
while ((sOperator = oLexer.peek()) in hAdditiveExpr_operators) {
oLexer.next();
if (oLexer.eof() || !(oExpr = fMultiplicativeExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected second operand in additive expression");
oAdditiveExpr.items.push([sOperator, oExpr]);
}
return oAdditiveExpr;
};
cAdditiveExpr.prototype.evaluate = function (oContext) {
var oLeft = fFunction_sequence_atomize(this.left.evaluate(oContext), oContext);
if (!oLeft.length) return [];
fFunctionCall_assertSequenceCardinality(oContext, oLeft, '?', "first operand of '" + this.items[0][0] + "'");
var vLeft = oLeft[0];
if (vLeft instanceof cXSUntypedAtomic) vLeft = cXSDouble.cast(vLeft);
for (var nIndex = 0, nLength = this.items.length, oRight, vRight; nIndex < nLength; nIndex++) {
oRight = fFunction_sequence_atomize(this.items[nIndex][1].evaluate(oContext), oContext);
if (!oRight.length) return [];
fFunctionCall_assertSequenceCardinality(oContext, oRight, '?', "first operand of '" + this.items[nIndex][0] + "'");
vRight = oRight[0];
if (vRight instanceof cXSUntypedAtomic) vRight = cXSDouble.cast(vRight);
vLeft = hAdditiveExpr_operators[this.items[nIndex][0]](vLeft, vRight, oContext);
}
return [vLeft];
};
function cMultiplicativeExpr(oExpr) {
this.left = oExpr;
this.items = [];
};
cMultiplicativeExpr.prototype.left = null;
cMultiplicativeExpr.prototype.items = null;
var hMultiplicativeExpr_operators = {};
hMultiplicativeExpr_operators['*'] = function (oLeft, oRight, oContext) {
var sOperator = '',
bReverse = false;
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-multiply";else if (oRight instanceof cXSYearMonthDuration) {
sOperator = "multiply-yearMonthDuration";
bReverse = true;
} else if (oRight instanceof cXSDayTimeDuration) {
sOperator = "multiply-dayTimeDuration";
bReverse = true;
}
} else {
if (oLeft instanceof cXSYearMonthDuration) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "multiply-yearMonthDuration";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "multiply-dayTimeDuration";
}
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, bReverse ? oRight : oLeft, bReverse ? oLeft : oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
hMultiplicativeExpr_operators['div'] = function (oLeft, oRight, oContext) {
var sOperator = '';
if (fXSAnyAtomicType_isNumeric(oLeft)) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "numeric-divide";
} else if (oLeft instanceof cXSYearMonthDuration) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "divide-yearMonthDuration";else if (oRight instanceof cXSYearMonthDuration) sOperator = "divide-yearMonthDuration-by-yearMonthDuration";
} else if (oLeft instanceof cXSDayTimeDuration) {
if (fXSAnyAtomicType_isNumeric(oRight)) sOperator = "divide-dayTimeDuration";else if (oRight instanceof cXSDayTimeDuration) sOperator = "divide-dayTimeDuration-by-dayTimeDuration";
}
if (sOperator) return hStaticContext_operators[sOperator].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
hMultiplicativeExpr_operators['idiv'] = function (oLeft, oRight, oContext) {
if (fXSAnyAtomicType_isNumeric(oLeft) && fXSAnyAtomicType_isNumeric(oRight)) return hStaticContext_operators["numeric-integer-divide"].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
hMultiplicativeExpr_operators['mod'] = function (oLeft, oRight, oContext) {
if (fXSAnyAtomicType_isNumeric(oLeft) && fXSAnyAtomicType_isNumeric(oRight)) return hStaticContext_operators["numeric-mod"].call(oContext, oLeft, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
function fMultiplicativeExpr_parse(oLexer, oStaticContext) {
var oExpr;
if (oLexer.eof() || !(oExpr = fUnionExpr_parse(oLexer, oStaticContext))) return;
if (!(oLexer.peek() in hMultiplicativeExpr_operators)) return oExpr;
var oMultiplicativeExpr = new cMultiplicativeExpr(oExpr),
sOperator;
while ((sOperator = oLexer.peek()) in hMultiplicativeExpr_operators) {
oLexer.next();
if (oLexer.eof() || !(oExpr = fUnionExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected second operand in multiplicative expression");
oMultiplicativeExpr.items.push([sOperator, oExpr]);
}
return oMultiplicativeExpr;
};
cMultiplicativeExpr.prototype.evaluate = function (oContext) {
var oLeft = fFunction_sequence_atomize(this.left.evaluate(oContext), oContext);
if (!oLeft.length) return [];
fFunctionCall_assertSequenceCardinality(oContext, oLeft, '?', "first operand of '" + this.items[0][0] + "'");
var vLeft = oLeft[0];
if (vLeft instanceof cXSUntypedAtomic) vLeft = cXSDouble.cast(vLeft);
for (var nIndex = 0, nLength = this.items.length, oRight, vRight; nIndex < nLength; nIndex++) {
oRight = fFunction_sequence_atomize(this.items[nIndex][1].evaluate(oContext), oContext);
if (!oRight.length) return [];
fFunctionCall_assertSequenceCardinality(oContext, oRight, '?', "second operand of '" + this.items[nIndex][0] + "'");
vRight = oRight[0];
if (vRight instanceof cXSUntypedAtomic) vRight = cXSDouble.cast(vRight);
vLeft = hMultiplicativeExpr_operators[this.items[nIndex][0]](vLeft, vRight, oContext);
}
return [vLeft];
};
function cUnaryExpr(sOperator, oExpr) {
this.operator = sOperator;
this.expression = oExpr;
};
cUnaryExpr.prototype.operator = null;
cUnaryExpr.prototype.expression = null;
var hUnaryExpr_operators = {};
hUnaryExpr_operators['-'] = function (oRight, oContext) {
if (fXSAnyAtomicType_isNumeric(oRight)) return hStaticContext_operators["numeric-unary-minus"].call(oContext, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
hUnaryExpr_operators['+'] = function (oRight, oContext) {
if (fXSAnyAtomicType_isNumeric(oRight)) return hStaticContext_operators["numeric-unary-plus"].call(oContext, oRight);
throw new cException("XPTY0004", "Arithmetic operator is not defined for provided arguments");
};
function fUnaryExpr_parse(oLexer, oStaticContext) {
if (oLexer.eof()) return;
if (!(oLexer.peek() in hUnaryExpr_operators)) return fValueExpr_parse(oLexer, oStaticContext);
var sOperator = '+',
oExpr;
while (oLexer.peek() in hUnaryExpr_operators) {
if (oLexer.peek() == '-') sOperator = sOperator == '-' ? '+' : '-';
oLexer.next();
}
if (oLexer.eof() || !(oExpr = fValueExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected operand in unary expression");
return new cUnaryExpr(sOperator, oExpr);
};
cUnaryExpr.prototype.evaluate = function (oContext) {
var oRight = fFunction_sequence_atomize(this.expression.evaluate(oContext), oContext);
if (!oRight.length) return [];
fFunctionCall_assertSequenceCardinality(oContext, oRight, '?', "second operand of '" + this.operator + "'");
var vRight = oRight[0];
if (vRight instanceof cXSUntypedAtomic) vRight = cXSDouble.cast(vRight);
return [hUnaryExpr_operators[this.operator](vRight, oContext)];
};
function cValueExpr() {};
function fValueExpr_parse(oLexer, oStaticContext) {
return fPathExpr_parse(oLexer, oStaticContext);
};
function cOrExpr(oExpr) {
this.left = oExpr;
this.items = [];
};
cOrExpr.prototype.left = null;
cOrExpr.prototype.items = null;
function fOrExpr_parse(oLexer, oStaticContext) {
var oExpr;
if (oLexer.eof() || !(oExpr = fAndExpr_parse(oLexer, oStaticContext))) return;
if (oLexer.peek() != "or") return oExpr;
var oOrExpr = new cOrExpr(oExpr);
while (oLexer.peek() == "or") {
oLexer.next();
if (oLexer.eof() || !(oExpr = fAndExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected second operand in logical expression");
oOrExpr.items.push(oExpr);
}
return oOrExpr;
};
cOrExpr.prototype.evaluate = function (oContext) {
var bValue = fFunction_sequence_toEBV(this.left.evaluate(oContext), oContext);
for (var nIndex = 0, nLength = this.items.length; nIndex < nLength && !bValue; nIndex++) {
bValue = fFunction_sequence_toEBV(this.items[nIndex].evaluate(oContext), oContext);
}return [new cXSBoolean(bValue)];
};
function cAndExpr(oExpr) {
this.left = oExpr;
this.items = [];
};
cAndExpr.prototype.left = null;
cAndExpr.prototype.items = null;
function fAndExpr_parse(oLexer, oStaticContext) {
var oExpr;
if (oLexer.eof() || !(oExpr = fComparisonExpr_parse(oLexer, oStaticContext))) return;
if (oLexer.peek() != "and") return oExpr;
var oAndExpr = new cAndExpr(oExpr);
while (oLexer.peek() == "and") {
oLexer.next();
if (oLexer.eof() || !(oExpr = fComparisonExpr_parse(oLexer, oStaticContext))) throw new cException("XPST0003", "Expected second operand in logical expression");
oAndExpr.items.push(oExpr);
}
return oAndExpr;
};
cAndExpr.prototype.evaluate = function (oContext) {
var bValue = fFunction_sequence_toEBV(this.left.evaluate(oContext), oContext);
for (var nIndex = 0, nLength = this.items.length; nIndex < nLength && bValue; nIndex++) {
bValue = fFunction_sequence_toEBV(this.items[nIndex].evaluate(oContext), oContext);
}return [new cXSBoolean(bValue)];
};
function cStepExpr() {};
cStepExpr.prototype.predicates = null;
function fStepExpr_parse(oLexer, oStaticContext) {
if (!oLexer.eof()) return fFilterExpr_parse(oLexer, oStaticContext) || fAxisStep_parse