Esempio n. 1
0
        public static BufferedNodeIterator Preload(XPath2NodeIterator baseIter)
        {
            BufferedNodeIterator res = new BufferedNodeIterator(baseIter);

            res.Fill();
            return(res);
        }
Esempio n. 2
0
 public virtual List<XPathItem> ToList()
 {
     XPath2NodeIterator iter = Clone();
     List<XPathItem> res = new List<XPathItem>();
     while (iter.MoveNext())
         res.Add(iter.Current.Clone());
     return res;
 }
Esempio n. 3
0
        public static IEnumerable <Object> SelectValues(string xpath, IXmlNamespaceResolver resolver, object arg)
        {
            XPath2NodeIterator iter = XPath2NodeIterator.Create(Compile(xpath, resolver).EvaluateWithProperties(null, arg));

            while (iter.MoveNext())
            {
                yield return(iter.Current.GetTypedValue());
            }
        }
Esempio n. 4
0
        public static IEnumerable <Object> SelectValues(string xpath, IXmlNamespaceResolver resolver, IDictionary <XmlQualifiedName, object> vars)
        {
            XPath2NodeIterator iter = XPath2NodeIterator.Create(Compile(xpath, resolver).Evaluate(null, vars));

            while (iter.MoveNext())
            {
                yield return(iter.Current.GetTypedValue());
            }
        }
Esempio n. 5
0
        public static XPathNavigator XPath2SelectSingleNode(this XPathNavigator nav, XPath2Expression expression, object arg)
        {
            XPath2NodeIterator iter = nav.XPath2Select(expression, arg);

            if (iter.MoveNext() && iter.Current.IsNode)
            {
                return((XPathNavigator)iter.Current);
            }
            return(null);
        }
Esempio n. 6
0
        public static IEnumerable <Object> XPath2SelectValues(this XNode node, XPath2Expression expr, object arg)
        {
            XPathNavigator     nav  = node.CreateNavigator();
            XPath2NodeIterator iter = XPath2NodeIterator.Create(nav.XPath2Evaluate(expr, arg));

            while (iter.MoveNext())
            {
                yield return(iter.Current.GetTypedValue());
            }
        }
Esempio n. 7
0
        public static XmlNode XPath2SelectSingleNode(this XmlNode node, string xquery, IXmlNamespaceResolver nsmgr, object arg)
        {
            XPathNavigator     nav  = node.CreateNavigator();
            XPath2NodeIterator iter = nav.XPath2Select(xquery, nsmgr, arg);

            if (iter.MoveNext() && iter.Current.IsNode)
            {
                return(NodeList.ToXmlNode((XPathNavigator)iter.Current));
            }
            return(null);
        }
Esempio n. 8
0
 public bool MoveNext()
 {
     if (!iterationStarted)
     {
         current = original.Clone();
         iterationStarted = true;
     }
     if (current != null && current.MoveNext())
         return true;
     current = null;
     return false;
 }
Esempio n. 9
0
 public static XPath2NodeIterator Create(object value)
 {
     if (value == Undefined.Value)
         return EmptyIterator.Shared;
     XPath2NodeIterator iter = value as XPath2NodeIterator;
     if (iter != null)
         return iter.Clone();
     XPathItem item = value as XPathItem;
     if (item == null)
         item = new XPath2Item(value);
     return new SingleIterator(item);
 }
Esempio n. 10
0
        public static IEnumerable <Object> XPath2Select(this XNode node, XPath2Expression expression, object arg)
        {
            XPathNavigator     nav  = node.CreateNavigator();
            XPath2NodeIterator iter = nav.XPath2Select(expression, arg);

            foreach (XPathItem item in iter)
            {
                if (item.IsNode)
                {
                    XPathNavigator curr = (XPathNavigator)item;
                    yield return(curr.UnderlyingObject);
                }
                else
                {
                    yield return(item.TypedValue);
                }
            }
        }
Esempio n. 11
0
        public static XPath2NodeIterator Create(object value)
        {
            if (value == Undefined.Value)
            {
                return(EmptyIterator.Shared);
            }
            XPath2NodeIterator iter = value as XPath2NodeIterator;

            if (iter != null)
            {
                return(iter.Clone());
            }
            XPathItem item = value as XPathItem;

            if (item == null)
            {
                item = new XPath2Item(value);
            }
            return(new SingleIterator(item));
        }
Esempio n. 12
0
        public bool DeepEqual(XPath2NodeIterator iter1, XPath2NodeIterator iter2)
        {
            iter1 = iter1.Clone();
            iter2 = iter2.Clone();
            bool flag1;
            bool flag2;

            do
            {
                flag1 = iter1.MoveNext();
                flag2 = iter2.MoveNext();
                if (flag1 != flag2)
                {
                    return(false);
                }
                else
                if (flag1 && flag2)
                {
                    if (iter1.Current.IsNode != iter2.Current.IsNode)
                    {
                        return(false);
                    }
                    else
                    {
                        if (iter1.Current.IsNode && iter2.Current.IsNode)
                        {
                            if (!NodeEqual((XPathNavigator)iter1.Current, (XPathNavigator)iter2.Current))
                            {
                                return(false);
                            }
                        }
                        else
                        if (!ItemEqual(iter1.Current, iter2.Current))
                        {
                            return(false);
                        }
                    }
                }
            }while (flag1 && flag2);
            return(true);
        }
Esempio n. 13
0
        private object PrepareValue(object value)
        {
            if (value == null)
            {
                return(Undefined.Value);
            }
            XmlNode xmlNode = value as XmlNode;

            if (xmlNode != null)
            {
                return(xmlNode.CreateNavigator());
            }
            XNode xnode = value as XNode;

            if (xnode != null)
            {
                return(xnode.CreateNavigator());
            }
            XPath2NodeIterator iter = value as XPath2NodeIterator;

            if (iter != null)
            {
                return(iter);
            }
            IEnumerable <XNode> en = value as IEnumerable <XNode>;

            if (en != null)
            {
                return(new NodeIterator(CreateIterator(en)));
            }
            IEnumerable <Object> eno = value as IEnumerable <Object>;

            if (eno != null)
            {
                return(new NodeIterator(CreateIterator(eno)));
            }
            return(value);
        }
Esempio n. 14
0
        public static IEnumerable <T> Select <T>(string xpath, IXmlNamespaceResolver resolver, object arg)
            where T : XObject
        {
            XPath2NodeIterator iter = XPath2NodeIterator.Create(Compile(xpath, resolver).EvaluateWithProperties(null, arg));

            foreach (XPathItem item in iter)
            {
                if (item.IsNode)
                {
                    XPathNavigator curr = (XPathNavigator)item;
                    XObject        o    = (XObject)curr.UnderlyingObject;
                    if (!(o is T))
                    {
                        throw new InvalidOperationException(String.Format("Unexpected evaluation {0}", o.GetType()));
                    }
                    yield return((T)o);
                }
                else
                {
                    throw new InvalidOperationException(String.Format("Unexpected evaluation {0}", item.TypedValue.GetType()));
                }
            }
        }
Esempio n. 15
0
        public static IEnumerable <T> XPath2Select <T>(this XNode node, XPath2Expression expression, object arg)
            where T : XObject
        {
            XPathNavigator     nav  = node.CreateNavigator();
            XPath2NodeIterator iter = nav.XPath2Select(expression, arg);

            foreach (XPathItem item in iter)
            {
                if (item.IsNode)
                {
                    XPathNavigator curr = (XPathNavigator)item;
                    XObject        o    = (XObject)curr.UnderlyingObject;
                    if (!(o is T))
                    {
                        throw new InvalidOperationException(String.Format("Unexpected evalution {0}", o.GetType()));
                    }
                    yield return((T)o);
                }
                else
                {
                    throw new InvalidOperationException(String.Format("Unexpected evalution {0}", item.TypedValue.GetType()));
                }
            }
        }
Esempio n. 16
0
 public XPathNodeIteratorAdapter(XPath2NodeIterator iter)
 {
     this.iter = iter.Clone();
 }
Esempio n. 17
0
 public Enumerator(XPath2NodeIterator iter)
 {
     original = iter.Clone();
 }
Esempio n. 18
0
 public BufferedNodeIterator(XPath2NodeIterator src, bool clone)
 {
     this.src = clone ? src.Clone() : src;
     buffer   = new List <XPathItem>();
 }
Esempio n. 19
0
 public BufferedNodeIterator(XPath2NodeIterator src)
     : this(src, true)
 {
 }
Esempio n. 20
0
 public static XPath2NodeIterator XPath2Select(this XPathNavigator nav, XPath2Expression expr, object arg)
 {
     return(XPath2NodeIterator.Create(XPath2Evaluate(nav, expr)));
 }
Esempio n. 21
0
 public ContextProvider(object value)
 {
     m_iter = XPath2NodeIterator.Create(value);
 }
Esempio n. 22
0
 public ContextProvider(XPath2NodeIterator iter)
 {
     m_iter = iter;
 }
Esempio n. 23
0
 public XQueryNodeIteratorDebugView(XPath2NodeIterator iter)
 {
     this.iter = iter.Clone();
 }
Esempio n. 24
0
 public XPath2NodeIteratorDebugView(XPath2NodeIterator iter)
 {
     this.iter = iter;
 }
Esempio n. 25
0
 public NodeList(XPath2NodeIterator iter, XmlDocument doc)
 {
     _list = new List <XmlNode>();
     _iter = iter;
 }
Esempio n. 26
0
        private FunctionTable()
        {
            _funcTable = new Dictionary <FunctionDesc, XPathFunctionDef>();

            Add(XmlReservedNs.NsXQueryFunc, "dateTime", 2, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.CreateDateTime(
                    CoreFuncs.CastArg(context, args[0], new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne)),
                    CoreFuncs.CastArg(context, args[1], new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "current-dateTime", 0, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.GetCurrentDateTime(context));
            Add(XmlReservedNs.NsXQueryFunc, "current-date", 0, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.GetCurrentDate(context));
            Add(XmlReservedNs.NsXQueryFunc, "current-time", 0, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.GetCurrentTime(context));
            Add(XmlReservedNs.NsXQueryFunc, "in-scope-prefixes", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.GetInScopePrefixes(CoreFuncs.NodeValue(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "namespace-uri-for-prefix", 2, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.GetNamespaceUriForPrefix(context, CoreFuncs.Atomize(args[0]), CoreFuncs.NodeValue(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "resolve-QName", 2, XPath2ResultType.QName, (context, provider, args) =>
                ExtFuncs.ResolveQName(context, CoreFuncs.Atomize(args[0]), CoreFuncs.NodeValue(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "QName", 2, XPath2ResultType.QName, (context, provider, args) =>
                ExtFuncs.CreateQName(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                     CoreFuncs.CastToStringExactOne(context, args[1], false)));
            Add(XmlReservedNs.NsXQueryFunc, "prefix-from-QName", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.PrefixFromQName(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "local-name-from-QName", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.LocalNameFromQName(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "namespace-uri-from-QName", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.NamespaceUriFromQName(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "string-to-codepoints", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.StringToCodepoint(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "codepoints-to-string", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.CodepointToString((XPath2NodeIterator)CoreFuncs.CastArg(context, args[0],
                                                                                 new SequenceType(XmlTypeCode.Int, XmlTypeCardinality.ZeroOrMore))));
            Add(XmlReservedNs.NsXQueryFunc, "default-collation", 0, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.DefaultCollation(context));
            Add(XmlReservedNs.NsXQueryFunc, "resolve-uri", 2, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.ResolveUri(CoreFuncs.CastToStringOptional(context, args[0]),
                                    CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "resolve-uri", 1, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.ResolveUri(context, CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "static-base-uri", 0, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.StaticBaseUri(context));
            Add(XmlReservedNs.NsXQueryFunc, "implicit-timezone", 0, XPath2ResultType.Duration, (context, provider, args) =>
                ExtFuncs.ImplicitTimezone(context));
            Add(XmlReservedNs.NsXQueryFunc, "lang", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.NodeLang(CoreFuncs.CastToStringOptional(context, args[0]), CoreFuncs.NodeValue(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "lang", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.NodeLang(provider, CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "name", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.GetName(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "name", 0, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.GetName(provider));
            Add(XmlReservedNs.NsXQueryFunc, "node-name", 1, XPath2ResultType.QName, (context, provider, args) =>
                ExtFuncs.GetNodeName(context, CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "local-name", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.GetLocalName(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "local-name", 0, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.GetLocalName(provider));
            Add(XmlReservedNs.NsXQueryFunc, "namespace-uri", 1, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.GetNamespaceUri(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "namespace-uri", 0, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.GetNamespaceUri(provider));
            Add(XmlReservedNs.NsXQueryFunc, "nilled", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.GetNilled(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "base-uri", 0, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.GetBaseUri(context, provider));
            Add(XmlReservedNs.NsXQueryFunc, "base-uri", 1, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.GetBaseUri(context, CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "document-uri", 1, XPath2ResultType.AnyUri, (context, provider, args) =>
                ExtFuncs.DocumentUri(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "trace", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.WriteTrace(context, XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "trace", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.WriteTrace(context, XPath2NodeIterator.Create(args[0]),
                                    CoreFuncs.CastToStringExactOne(context, args[1], false)));
            Add(XmlReservedNs.NsXQueryFunc, "data", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.GetData(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "concat", XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Concat(context, args));
            Add(XmlReservedNs.NsXQueryFunc, "string-join", 2, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.StringJoin(XPath2NodeIterator.Create(args[0]),
                                    CoreFuncs.CastToStringExactOne(context, args[1], false)));
            Add(XmlReservedNs.NsXQueryFunc, "substring", 3, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Substring(CoreFuncs.CastToStringOptional(context, args[0]),
                                   CoreFuncs.Number(context, args[1]), CoreFuncs.Number(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "substring", 2, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Substring(CoreFuncs.CastToStringOptional(context, args[0]),
                                   CoreFuncs.Number(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "string-length", 0, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.StringLength(context, provider));
            Add(XmlReservedNs.NsXQueryFunc, "string-length", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.StringLength(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "normalize-space", 0, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.NormalizeSpace(context, provider));
            Add(XmlReservedNs.NsXQueryFunc, "normalize-space", 1, XPath2ResultType.String, (context, provider, args) =>
                CoreFuncs.NormalizeSpace(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "normalize-unicode", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.NormalizeUnicode(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "normalize-unicode", 2, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.NormalizeUnicode(CoreFuncs.CastToStringOptional(context, args[0]),
                                          CoreFuncs.CastToStringExactOne(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "upper-case", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.UpperCase(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "lower-case", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.LowerCase(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "translate", 3, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Translate(CoreFuncs.CastToStringOptional(context, args[0]),
                                   CoreFuncs.CastToStringExactOne(context, args[1]),
                                   CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "encode-for-uri", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.EncodeForUri(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "iri-to-uri", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.IriToUri(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "escape-html-uri", 1, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.EscapeHtmlUri(CoreFuncs.CastToStringOptional(context, args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "contains", 3, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.Contains(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1]),
                                  CoreFuncs.CastToStringExactOne(context, args[2], false)));
            Add(XmlReservedNs.NsXQueryFunc, "contains", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.Contains(CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "starts-with", 3, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.StartsWith(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                    CoreFuncs.CastToStringOptional(context, args[1]),
                                    CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "starts-with", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.StartsWith(CoreFuncs.CastToStringOptional(context, args[0]),
                                    CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "ends-with", 3, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.EndsWith(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1]),
                                  CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "ends-with", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.EndsWith(CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "substring-before", 3, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.SubstringBefore(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                         CoreFuncs.CastToStringOptional(context, args[1]),
                                         CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "substring-before", 2, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.SubstringBefore(CoreFuncs.CastToStringOptional(context, args[0]),
                                         CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "substring-after", 3, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.SubstringAfter(context, CoreFuncs.CastToStringOptional(context, args[0]),
                                        CoreFuncs.CastToStringOptional(context, args[1]),
                                        CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "substring-after", 2, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.SubstringAfter(CoreFuncs.CastToStringOptional(context, args[0]),
                                        CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "matches", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.Matches(CoreFuncs.CastToStringOptional(context, args[0]),
                                 CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "matches", 3, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.Matches(CoreFuncs.CastToStringOptional(context, args[0]),
                                 CoreFuncs.CastToStringOptional(context, args[1]),
                                 CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "replace", 3, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Replace(CoreFuncs.CastToStringOptional(context, args[0]),
                                 CoreFuncs.CastToStringOptional(context, args[1]),
                                 CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "replace", 4, XPath2ResultType.String, (context, provider, args) =>
                ExtFuncs.Replace(CoreFuncs.CastToStringOptional(context, args[0]),
                                 CoreFuncs.CastToStringOptional(context, args[1]),
                                 CoreFuncs.CastToStringExactOne(context, args[2]),
                                 (string)CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[3]), new SequenceType(XmlTypeCode.String))));
            Add(XmlReservedNs.NsXQueryFunc, "tokenize", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Tokenize(CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "tokenize", 3, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Tokenize(CoreFuncs.CastToStringOptional(context, args[0]),
                                  CoreFuncs.CastToStringOptional(context, args[1]),
                                  CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "years-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.YearsFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                             new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "months-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MonthsFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                              new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "days-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.DaysFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                            new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "hours-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.HoursFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                             new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "minutes-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MinutesFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                               new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "seconds-from-duration", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.SecondsFromDuration(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                               new SequenceType(XmlTypeCode.Duration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "year-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.YearFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                            new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "month-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MonthFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                             new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "day-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.DayFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                           new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "hours-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.HoursFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                             new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "minutes-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MinutesFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                               new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "seconds-from-dateTime", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.SecondsFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                               new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "timezone-from-dateTime", 1, XPath2ResultType.Duration, (context, provider, args) =>
                ExtFuncs.TimezoneFromDateTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "year-from-date", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.YearFromDate(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                        new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "month-from-date", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MonthFromDate(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                         new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "day-from-date", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.DayFromDate(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                       new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "timezone-from-date", 1, XPath2ResultType.Duration, (context, provider, args) =>
                ExtFuncs.TimezoneFromDate(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                            new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "hours-from-time", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.HoursFromTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                         new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "minutes-from-time", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.MinutesFromTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                           new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "seconds-from-time", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.SecondsFromTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                           new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "timezone-from-time", 1, XPath2ResultType.Duration, (context, provider, args) =>
                ExtFuncs.TimezoneFromTime(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                            new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-dateTime-to-timezone", 2, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustDateTimeToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                    new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne)),
                                                  CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[1]),
                                                                    new SequenceType(XmlTypeCode.DayTimeDuration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-dateTime-to-timezone", 1, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustDateTimeToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                    new SequenceType(XmlTypeCode.DateTime, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-date-to-timezone", 2, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustDateToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne)),
                                              CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[1]), new SequenceType(XmlTypeCode.DayTimeDuration,
                                                                                                                      XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-date-to-timezone", 1, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustDateToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                new SequenceType(XmlTypeCode.Date, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-time-to-timezone", 2, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustTimeToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne)),
                                              CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[1]),
                                                                new SequenceType(XmlTypeCode.DayTimeDuration, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "adjust-time-to-timezone", 1, XPath2ResultType.DateTime, (context, provider, args) =>
                ExtFuncs.AdjustTimeToTimezone(CoreFuncs.CastArg(context, CoreFuncs.Atomize(args[0]),
                                                                new SequenceType(XmlTypeCode.Time, XmlTypeCardinality.ZeroOrOne))));
            Add(XmlReservedNs.NsXQueryFunc, "abs", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetAbs(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "ceiling", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetCeiling(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "floor", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetFloor(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "round", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetRound(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "round-half-to-even", 2, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetRoundHalfToEven(CoreFuncs.Atomize(args[0]), CoreFuncs.Atomize(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "round-half-to-even", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.GetRoundHalfToEven(CoreFuncs.Atomize(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "compare", 2, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.Compare(CoreFuncs.CastToStringOptional(context, args[0]), CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "compare", 3, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.Compare(context, CoreFuncs.CastToStringOptional(context, args[0]), CoreFuncs.CastToStringOptional(context, args[1]),
                                 CoreFuncs.CastToStringExactOne(context, args[2], false)));
            Add(XmlReservedNs.NsXQueryFunc, "codepoint-equal", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.CodepointEqual(CoreFuncs.CastToStringOptional(context, args[0]), CoreFuncs.CastToStringOptional(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "empty", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.EmptySequence(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "exists", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.ExistsSequence(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "reverse", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.ReverseSequence(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "index-of", 3, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.IndexOfSequence(context, XPath2NodeIterator.Create(args[0]), CoreFuncs.Atomize(args[1]),
                                         CoreFuncs.CastToStringExactOne(context, args[2], false)));
            Add(XmlReservedNs.NsXQueryFunc, "index-of", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.IndexOfSequence(XPath2NodeIterator.Create(args[0]), CoreFuncs.Atomize(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "remove", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Remove(XPath2NodeIterator.Create(args[0]), CoreFuncs.CastToInt(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "insert-before", 3, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.InsertBefore(XPath2NodeIterator.Create(args[0]), CoreFuncs.CastToInt(context, args[1]),
                                      XPath2NodeIterator.Create(args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "subsequence", 3, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Subsequence(XPath2NodeIterator.Create(args[0]), CoreFuncs.Number(context, args[1]),
                                     CoreFuncs.Number(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "subsequence", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Subsequence(XPath2NodeIterator.Create(args[0]), CoreFuncs.Number(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "unordered", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.Unordered(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "zero-or-one", 1, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.ZeroOrOne(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "one-or-more", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.OneOrMore(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "exactly-one", 1, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.ExactlyOne(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "distinct-values", 2, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.DistinctValues(context, XPath2NodeIterator.Create(args[0]),
                                        CoreFuncs.CastToStringExactOne(context, args[1], false)));
            Add(XmlReservedNs.NsXQueryFunc, "distinct-values", 1, XPath2ResultType.NodeSet, (context, provider, args) =>
                ExtFuncs.DistinctValues(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "deep-equal", 3, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.DeepEqual(context, XPath2NodeIterator.Create(args[0]), XPath2NodeIterator.Create(args[1]),
                                   CoreFuncs.CastToStringExactOne(context, args[2])));
            Add(XmlReservedNs.NsXQueryFunc, "deep-equal", 2, XPath2ResultType.Boolean, (context, provider, args) =>
                ExtFuncs.DeepEqual(XPath2NodeIterator.Create(args[0]), XPath2NodeIterator.Create(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "count", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.CountValues(XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "max", 1, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.MaxValue(context, XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "max", 2, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.MaxValue(context, XPath2NodeIterator.Create(args[0]),
                                  CoreFuncs.CastToStringExactOne(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "min", 1, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.MinValue(context, XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "min", 2, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.MaxValue(context, XPath2NodeIterator.Create(args[0]),
                                  CoreFuncs.CastToStringExactOne(context, args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "sum", 2, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.SumValue(context, XPath2NodeIterator.Create(args[0]), CoreFuncs.Atomize(args[1])));
            Add(XmlReservedNs.NsXQueryFunc, "sum", 1, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.SumValue(context, XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "avg", 1, XPath2ResultType.Any, (context, provider, args) =>
                ExtFuncs.AvgValue(context, XPath2NodeIterator.Create(args[0])));
            Add(XmlReservedNs.NsXQueryFunc, "position", 0, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.CurrentPosition(provider));
            Add(XmlReservedNs.NsXQueryFunc, "last", 0, XPath2ResultType.Number, (context, provider, args) =>
                ExtFuncs.LastPosition(provider));
            Add(XmlReservedNs.NsXQueryFunc, "root", 1, XPath2ResultType.Navigator, (context, provider, args) =>
                CoreFuncs.GetRoot(CoreFuncs.NodeValue(args[0], false)));
            Add(XmlReservedNs.NsXQueryFunc, "boolean", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                CoreFuncs.BooleanValue(args[0]));
            Add(XmlReservedNs.NsXQueryFunc, "true", 0, XPath2ResultType.Boolean, (context, provider, args) => CoreFuncs.True);
            Add(XmlReservedNs.NsXQueryFunc, "false", 0, XPath2ResultType.Boolean, (context, provider, args) => CoreFuncs.False);
            Add(XmlReservedNs.NsXQueryFunc, "not", 1, XPath2ResultType.Boolean, (context, provider, args) =>
                CoreFuncs.Not(args[0]));
            Add(XmlReservedNs.NsXQueryFunc, "string", 1, XPath2ResultType.String, (context, provider, args) =>
                CoreFuncs.StringValue(context, args[0]));
            Add(XmlReservedNs.NsXQueryFunc, "number", 0, XPath2ResultType.Number, (context, provider, args) =>
                CoreFuncs.Number(context, provider));
            Add(XmlReservedNs.NsXQueryFunc, "number", 1, XPath2ResultType.Number, (context, provider, args) =>
                CoreFuncs.Number(context, args[0]));
        }