Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/Mono.Xml.Ext/Mono.Xml.XPath2/XQueryModuleProlog.cs')
-rwxr-xr-xmcs/class/Mono.Xml.Ext/Mono.Xml.XPath2/XQueryModuleProlog.cs529
1 files changed, 529 insertions, 0 deletions
diff --git a/mcs/class/Mono.Xml.Ext/Mono.Xml.XPath2/XQueryModuleProlog.cs b/mcs/class/Mono.Xml.Ext/Mono.Xml.XPath2/XQueryModuleProlog.cs
new file mode 100755
index 00000000000..7091c775e71
--- /dev/null
+++ b/mcs/class/Mono.Xml.Ext/Mono.Xml.XPath2/XQueryModuleProlog.cs
@@ -0,0 +1,529 @@
+//
+// XQueryModuleProlog.cs - abstract syntax tree for XQuery
+//
+// Author:
+// Atsushi Enomoto <atsushi@ximian.com>
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Xml;
+using System.Xml.Query;
+using System.Xml.Schema;
+using Mono.Xml.XQuery;
+
+namespace Mono.Xml.XPath2
+{
+ internal abstract class XQueryModule
+ {
+ string version;
+ Prolog prolog;
+ IXmlNamespaceResolver nsResolver;
+
+ public string Version {
+ get { return version; }
+ set { version = value; }
+ }
+
+ public Prolog Prolog {
+ get { return prolog; }
+ set { prolog = value; }
+ }
+
+ public IXmlNamespaceResolver NSResolver {
+ get { return nsResolver; }
+ set { nsResolver = value; }
+ }
+ }
+
+ internal class XQueryMainModule : XQueryModule
+ {
+ ExprSequence queryBody;
+
+ public ExprSequence QueryBody {
+ get { return queryBody; }
+ set { queryBody = value; }
+ }
+ }
+
+ internal class XQueryLibraryModule : XQueryModule
+ {
+ ModuleDecl moduleDecl;
+
+ public ModuleDecl ModuleDecl {
+ get { return moduleDecl; }
+ set { moduleDecl = value; }
+ }
+ }
+
+ internal class ModuleDecl
+ {
+ string prefix;
+ string ns;
+
+ public string Prefix {
+ get { return prefix; }
+ set { prefix = value; }
+ }
+
+ public string Namespace {
+ get { return ns; }
+ set { ns = value; }
+ }
+ }
+
+ internal class Prolog
+ {
+ public Prolog ()
+ {
+ namespaceDecls = new StringDictionary ();
+ schemaImports = new SchemaImportCollection ();
+ moduleImports = new ModuleImportCollection ();
+ variables = new XQueryVariableTable ();
+ functions = new FunctionCollection ();
+ }
+
+ string version;
+ StringDictionary namespaceDecls;
+ XmlSpace xmlSpaceDecl;
+ XmlSpace constructorDecl;
+ string defaultElementNamespace;
+ string defaultFunctionNamespace;
+ string defaultCollation;
+ string baseUri;
+ bool defaultOrdered; // false by default
+ SchemaImportCollection schemaImports;
+ ModuleImportCollection moduleImports;
+ XQueryVariableTable variables;
+ XmlSchemaContentProcessing validationType;
+ FunctionCollection functions;
+
+ public string Version {
+ get { return version; }
+ set { version = value; }
+ }
+
+ public StringDictionary NamespaceDecls {
+ get { return namespaceDecls; }
+ }
+
+ public XmlSpace XmlSpace {
+ get { return xmlSpaceDecl; }
+ set { xmlSpaceDecl = value; }
+ }
+
+ public XmlSpace Constructor {
+ get { return constructorDecl; }
+ set { constructorDecl = value; }
+ }
+
+ public bool DefaultOrdered {
+ get { return defaultOrdered; }
+ set { defaultOrdered = value; }
+ }
+
+ public string DefaultElementNamespace {
+ get { return defaultElementNamespace; }
+ set { defaultElementNamespace = value; }
+ }
+
+ public string DefaultFunctionNamespace {
+ get { return defaultFunctionNamespace; }
+ set { defaultFunctionNamespace = value; }
+ }
+
+ public string DefaultCollation {
+ get { return defaultCollation; }
+ set { defaultCollation = value; }
+ }
+
+ public string BaseUri {
+ get { return baseUri; }
+ set { baseUri = value; }
+ }
+
+ public SchemaImportCollection SchemaImports {
+ get { return schemaImports; }
+ }
+
+ public ModuleImportCollection ModuleImports {
+ get { return moduleImports; }
+ }
+
+ public XQueryVariableTable Variables {
+ get { return variables; }
+ }
+
+ public XmlSchemaContentProcessing ValidationType {
+ get { return validationType; }
+ set { validationType = value; }
+ }
+
+ public FunctionCollection Functions {
+ get { return functions; }
+ }
+
+ public void Add (object item)
+ {
+ if (item is bool)
+ DefaultOrdered = (bool) item;
+ else if (item is XmlQualifiedName) {
+ XmlQualifiedName q = (XmlQualifiedName) item;
+ NamespaceDecls.Add (q.Name, q.Namespace);
+ } else if (item is XmlSpaceDecl) {
+ XmlSpace = ((XmlSpaceDecl) item).Value;
+ } else if (item is ConstructionDecl) {
+ Constructor = ((ConstructionDecl) item).Value;
+ } else if (item is SimplePrologContent) {
+ SimplePrologContent c = (SimplePrologContent) item;
+ string s = c.LiteralValue;
+ switch (c.Type) {
+ case PrologContentType.DefaultElementNamespace:
+ DefaultElementNamespace = s;
+ break;
+ case PrologContentType.DefaultFunctionNamespace:
+ DefaultFunctionNamespace = s;
+ break;
+ case PrologContentType.DefaultCollation:
+ DefaultCollation = s;
+ break;
+ case PrologContentType.BaseUri:
+ BaseUri = s;
+ break;
+ default:
+ throw new XmlQueryCompileException ("Invalid XQuery prolog content was found.");
+ }
+ } else if (item is SchemaImport) {
+ SchemaImports.Add (item as SchemaImport);
+ } else if (item is ModuleImport) {
+ ModuleImports.Add (item as ModuleImport);
+ } else if (item is XQueryVariable) {
+ XQueryVariable var = item as XQueryVariable;
+ Variables.Add (var);
+ } else if (item is XmlSchemaContentProcessing) {
+ ValidationType = (XmlSchemaContentProcessing) item;
+ } else if (item is FunctionDeclaration) {
+ Functions.Add (item as FunctionDeclaration);
+ } else
+ throw new XmlQueryCompileException ("Invalid XQuery prolog content item was found.");
+ }
+ }
+
+ class XmlSpaceDecl
+ {
+ public XmlSpace Value;
+
+ public XmlSpaceDecl (XmlSpace value)
+ {
+ Value = value;
+ }
+ }
+
+ class ConstructionDecl
+ {
+ public XmlSpace Value;
+
+ public ConstructionDecl (XmlSpace value)
+ {
+ Value = value;
+ }
+ }
+
+ public class ModuleImportCollection : CollectionBase
+ {
+ public void Add (ModuleImport import)
+ {
+ List.Add (import);
+ }
+ }
+
+ public class SchemaImportCollection : CollectionBase
+ {
+ public void Add (SchemaImport import)
+ {
+ List.Add (import);
+ }
+ }
+
+ public enum PrologContentType {
+ DefaultElementNamespace,
+ DefaultFunctionNamespace,
+ DefaultCollation,
+ BaseUri
+ }
+
+ public class SimplePrologContent
+ {
+ public SimplePrologContent (PrologContentType type, string literalValue)
+ {
+ this.type = type;
+ this.literalValue = literalValue;
+ }
+
+ PrologContentType type;
+ string literalValue;
+
+ public PrologContentType Type {
+ get { return type; }
+ set { type = value; }
+ }
+
+ public string LiteralValue {
+ get { return literalValue; }
+ set { literalValue = value; }
+ }
+ }
+
+ public abstract class AbstractImport
+ {
+ public AbstractImport (string prefix, string ns, ICollection locations)
+ {
+ this.prefix = prefix;
+ this.ns = ns;
+ this.locations = locations;
+ if (locations == null)
+ this.locations = new ArrayList (); // empty list
+ }
+
+ string prefix, ns;
+ ICollection locations;
+
+ public string Prefix {
+ get { return prefix; }
+ set { prefix = value; }
+ }
+
+ public string Namespace {
+ get { return ns; }
+ set { ns = value; }
+ }
+
+ public ICollection Locations {
+ get { return locations; }
+ set { locations = value != null ? value : new ArrayList (); }
+ }
+ }
+
+ public class SchemaImport : AbstractImport
+ {
+ public SchemaImport (string prefix, string ns, ICollection schemaLocations)
+ : base (prefix == "default element namespace" ? String.Empty : prefix, ns, schemaLocations)
+ {
+ // Prefix might 1) String.Empty for non-specified prefix,
+ // 2) "default element namespace" that is as is
+ // specified in xquery.
+ if (prefix == "default element namespace")
+ useDefaultElementNamespace = true;
+ }
+
+ bool useDefaultElementNamespace;
+
+ public bool UseDefaultElementNamespace {
+ get { return useDefaultElementNamespace; }
+ set { useDefaultElementNamespace = value; }
+ }
+ }
+
+ public class ModuleImport : AbstractImport
+ {
+ public ModuleImport (string prefix, string ns, ICollection moduleLocations)
+ : base (prefix, ns, moduleLocations)
+ {
+ }
+ }
+
+ public class XQueryVariableTable : DictionaryBase
+ {
+ public void Add (XQueryVariable decl)
+ {
+ Dictionary.Add (decl.Name, decl);
+ }
+
+ public ICollection Keys {
+ get { return Dictionary.Keys; }
+ }
+
+ public ICollection Values {
+ get { return Dictionary.Values; }
+ }
+
+ public XQueryVariable this [XmlQualifiedName name] {
+ get { return Dictionary [name] as XQueryVariable; }
+ }
+ }
+
+ public class XQueryVariable
+ {
+ public XQueryVariable (XmlQualifiedName name, SequenceType type, ExprSequence varBody)
+ {
+ this.name = name;
+ this.type = type;
+ this.varBody = varBody; // might be null (just declaration).
+ }
+
+ XmlQualifiedName name;
+ SequenceType type;
+ ExprSequence varBody;
+
+ public XmlQualifiedName Name {
+ get { return name; }
+ }
+
+ public SequenceType VariableType {
+ get { return type; }
+ }
+
+ public bool External {
+ get { return varBody == null; }
+ }
+
+ public ExprSequence VariableBody {
+ get { return varBody; }
+ }
+ }
+
+ internal class FunctionCollection : DictionaryBase
+ {
+ public void Add (FunctionDeclaration decl)
+ {
+ Dictionary.Add (decl.Name, decl);
+ }
+
+ public ICollection Keys {
+ get { return Dictionary.Keys; }
+ }
+
+ public ICollection Values {
+ get { return Dictionary.Values; }
+ }
+
+ public FunctionDeclaration this [XmlQualifiedName name] {
+ get { return Dictionary [name] as FunctionDeclaration; }
+ }
+ }
+
+ internal class FunctionDeclaration
+ {
+ public FunctionDeclaration (XmlQualifiedName name,
+ XQueryFunctionArgumentList parameters,
+ SequenceType type,
+ EnclosedExpr expr)
+ {
+ this.name = name;
+ this.parameters = parameters;
+ this.returnType = type;
+ this.funcBody = expr;
+ }
+
+ XmlQualifiedName name;
+ SequenceType returnType;
+ XQueryFunctionArgumentList parameters;
+ EnclosedExpr funcBody;
+
+ public XmlQualifiedName Name {
+ get { return name; }
+ }
+
+ public SequenceType ReturnType {
+ get { return returnType; }
+ }
+
+ public bool External {
+ get { return funcBody == null; }
+ }
+
+ public XQueryFunctionArgumentList Parameters {
+ get { return parameters; }
+ }
+
+ public EnclosedExpr FunctionBody {
+ get { return funcBody; }
+ }
+ }
+
+ public class XQueryFunctionArgumentList : CollectionBase
+ {
+ public void Add (XQueryFunctionArgument p)
+ {
+ List.Add (p);
+ }
+
+ public void Insert (int pos, XQueryFunctionArgument p)
+ {
+ List.Insert (pos, p);
+ }
+
+ public XQueryFunctionArgument this [int i] {
+ get { return (XQueryFunctionArgument) List [i]; }
+ }
+
+ public XQueryFunctionArgument [] ToArray ()
+ {
+ XQueryFunctionArgument [] arr = new XQueryFunctionArgument [List.Count];
+ List.CopyTo (arr, 0);
+ return arr;
+ }
+ }
+
+ public abstract class PragmaMUExtensionBase
+ {
+ XmlQualifiedName name;
+ string text;
+
+ protected PragmaMUExtensionBase (XmlQualifiedName name, string text)
+ {
+ this.name = name;
+ this.text = text;
+ }
+
+ public XmlQualifiedName Name {
+ get { return name; }
+ }
+
+ public string Text {
+ get { return text; }
+ }
+ }
+
+ public class Pragma : PragmaMUExtensionBase
+ {
+ public Pragma (XmlQualifiedName name, string text)
+ : base (name, text)
+ {
+ }
+ }
+
+ public class MUExtension : PragmaMUExtensionBase
+ {
+ public MUExtension (XmlQualifiedName name, string text)
+ : base (name, text)
+ {
+ }
+ }
+}
+
+#endif