imported everything from my branch (which is slightly harmless).
[mono.git] / mcs / class / System.XML / System.Xml.XPath / XPathExpression.cs
1 //
2 // System.Xml.XPath.XPathExpression
3 //
4 // Author:
5 //   Jason Diamond (jason@injektilo.org)
6 //
7 // (C) 2002 Jason Diamond  http://injektilo.org/
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using System.Collections;
32 using Mono.Xml.XPath;
33
34 #if NET_2_0
35 using NSResolver = System.Xml.IXmlNamespaceResolver;
36 #else
37 using NSResolver = System.Xml.XmlNamespaceManager;
38 #endif
39
40 namespace System.Xml.XPath
41 {
42         public abstract class XPathExpression
43         {
44                 #region Constructor
45
46                 internal XPathExpression ()
47                 {
48                 }
49
50                 #endregion
51
52                 #region Properties
53
54                 public abstract string Expression { get; }
55
56                 public abstract XPathResultType ReturnType { get; }
57
58                 #endregion
59
60                 #region Methods
61
62                 public abstract void AddSort (object expr, IComparer comparer);
63
64                 public abstract void AddSort (
65                         object expr,
66                         XmlSortOrder order,
67                         XmlCaseOrder caseOrder,
68                         string lang,
69                         XmlDataType dataType
70                 );
71
72                 public abstract XPathExpression Clone ();
73
74                 public abstract void SetContext (XmlNamespaceManager nsManager);
75
76 #if NET_2_0
77                 public
78 #else
79                 internal
80 #endif
81                 static XPathExpression Compile (string xpath)
82                 {
83                         return Compile (xpath, null, null);
84                 }
85
86 #if NET_2_0
87                 public static XPathExpression Compile (
88                         string xpath, NSResolver nsmgr)
89                 {
90                         return Compile (xpath, nsmgr, null);
91                 }
92 #endif
93
94                 internal static XPathExpression Compile (string xpath,
95                         NSResolver nsmgr, System.Xml.Xsl.IStaticXsltContext ctx)
96                 {
97                         XPathParser parser = new XPathParser (ctx);
98                         XPathExpression x = new CompiledExpression (
99                                 xpath, parser.Compile (xpath));
100                         x.SetContext (nsmgr);
101                         return x;
102                 }
103
104 #if NET_2_0
105                 public abstract void SetContext (IXmlNamespaceResolver nsResolver);
106 #endif
107                 #endregion
108         }
109 }