re-enable ResolveEntity in XmlReader and derived classes
[mono.git] / mcs / class / System.XML / Mono.Xml / XmlFilterReader.cs
1 //\r
2 // Mono.Xml.XmlFilterReader.cs\r
3 //\r
4 // Author:\r
5 //      Atsushi Enomoto <atsushi@ximian.com>\r
6 //\r
7 // Copyright (c) 2004 Novell Inc. All rights reserved\r
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 \r
29 //\r
30 // Similar to SAX DefaultHandler\r
31 //\r
32 \r
33 #if NET_2_0\r
34 using System;\r
35 using System.Xml;\r
36 using System.Xml.Schema;\r
37 \r
38 namespace Mono.Xml\r
39 {\r
40         internal class XmlFilterReader : XmlReader, IXmlLineInfo\r
41         {\r
42                 XmlReader reader;\r
43                 XmlReaderSettings settings;\r
44                 IXmlLineInfo lineInfo;\r
45 \r
46                 public XmlFilterReader (XmlReader reader, XmlReaderSettings settings)\r
47                 {\r
48                         this.reader = reader;\r
49                         this.settings = settings.Clone ();\r
50                         this.lineInfo = reader as IXmlLineInfo;\r
51                 }\r
52 \r
53                 #region Properties\r
54 \r
55 #if NET_2_0\r
56                 public override bool CanReadBinaryContent {\r
57                         get { return reader.CanReadBinaryContent; }\r
58                 }\r
59 \r
60                 public override bool CanReadValueChunk {\r
61                         get { return reader.CanReadValueChunk; }\r
62                 }\r
63 #endif\r
64 \r
65                 // This is the only one non-overriden property.\r
66                 public XmlReader Reader {\r
67                         get { return reader; }\r
68                 }\r
69 \r
70                 public int LineNumber {\r
71                         get { return lineInfo != null ? lineInfo.LineNumber : 0; }\r
72                 }\r
73                 \r
74                 public int LinePosition {\r
75                         get { return lineInfo != null ? lineInfo.LinePosition : 0; }\r
76                 }\r
77                 \r
78                 public override XmlNodeType NodeType \r
79                 {\r
80                         get { return reader.NodeType; }\r
81                 }\r
82 \r
83                 public override string Name {\r
84                         get { return reader.Name; }\r
85                 }\r
86 \r
87                 public override string LocalName {\r
88                         get { return reader.LocalName; }\r
89                 }\r
90 \r
91                 public override string NamespaceURI {\r
92                         get { return reader.NamespaceURI; }\r
93                 }\r
94 \r
95                 public override string Prefix {\r
96                         get { return reader.Prefix; }\r
97                 }\r
98 \r
99 #if !NET_2_1\r
100                 public override bool HasValue {\r
101                         get { return reader.HasValue; }\r
102                 }\r
103 #endif\r
104 \r
105                 public override int Depth {\r
106                         get { return reader.Depth; }\r
107                 }\r
108 \r
109                 public override string Value {\r
110                         get { return reader.Value; }\r
111                 }\r
112 \r
113                 public override string BaseURI {\r
114                         get { return reader.BaseURI; }\r
115                 }\r
116 \r
117                 public override bool IsEmptyElement {\r
118                         get { return reader.IsEmptyElement; }\r
119                 }\r
120 \r
121                 public override bool IsDefault {\r
122                         get { return reader.IsDefault; }\r
123                 }\r
124 \r
125                 public override char QuoteChar {\r
126                         get { return reader.QuoteChar; }\r
127                 }\r
128 \r
129                 public override string XmlLang {\r
130                         get { return reader.XmlLang; }\r
131                 }\r
132 \r
133                 public override XmlSpace XmlSpace {\r
134                         get { return reader.XmlSpace; }\r
135                 }\r
136 \r
137                 public override int AttributeCount {\r
138                         get { return reader.AttributeCount; }\r
139                 }\r
140 \r
141                 public override string this [int i] {\r
142                         get { return reader [i]; }\r
143                 }\r
144 \r
145                 public override string this [string name] {\r
146                         get { return reader [name]; }\r
147                 }\r
148 \r
149                 public override string this [string localName, string namespaceURI] {\r
150                         get { return reader [localName, namespaceURI]; }\r
151                 }\r
152 \r
153                 public override bool EOF {\r
154                         get { return reader.EOF; }\r
155                 }\r
156 \r
157                 public override ReadState ReadState {\r
158                         get { return reader.ReadState; }\r
159                 }\r
160 \r
161                 public override XmlNameTable NameTable {\r
162                         get { return reader.NameTable; }\r
163                 }\r
164 \r
165 #if !NET_2_1\r
166                 public override IXmlSchemaInfo SchemaInfo {\r
167                         get { return reader.SchemaInfo; }\r
168                 }\r
169 #endif\r
170 \r
171                 public override XmlReaderSettings Settings {\r
172                         get { return settings; }\r
173                 }\r
174                 #endregion\r
175 \r
176                 #region Methods\r
177 \r
178                 public override string GetAttribute (string name)\r
179                 {\r
180                         return reader.GetAttribute (name);\r
181                 }\r
182 \r
183                 public override string GetAttribute (string localName, string namespaceURI)\r
184                 {\r
185                         return reader.GetAttribute (localName, namespaceURI);\r
186                 }\r
187 \r
188                 public override string GetAttribute (int i)\r
189                 {\r
190                         return reader.GetAttribute (i);\r
191                 }\r
192 \r
193                 public bool HasLineInfo ()\r
194                 {\r
195                         return lineInfo != null ? lineInfo.HasLineInfo () : false;\r
196                 }\r
197 \r
198                 public override bool MoveToAttribute (string name)\r
199                 {\r
200                         return reader.MoveToAttribute (name);\r
201                 }\r
202 \r
203                 public override bool MoveToAttribute (string localName, string namespaceURI)\r
204                 {\r
205                         return reader.MoveToAttribute (localName, namespaceURI);\r
206                 }\r
207 \r
208                 public override void MoveToAttribute (int i)\r
209                 {\r
210                         reader.MoveToAttribute (i);\r
211                 }\r
212 \r
213                 public override bool MoveToFirstAttribute ()\r
214                 {\r
215                         return reader.MoveToFirstAttribute ();\r
216                 }\r
217 \r
218                 public override bool MoveToNextAttribute ()\r
219                 {\r
220                         return reader.MoveToNextAttribute ();\r
221                 }\r
222 \r
223                 public override bool MoveToElement ()\r
224                 {\r
225                         return reader.MoveToElement ();\r
226                 }\r
227 \r
228                 public override void Close ()\r
229                 {\r
230                         if (settings.CloseInput)\r
231                                 reader.Close ();\r
232                 }\r
233 \r
234                 public override bool Read ()\r
235                 {\r
236                         if (!reader.Read ())\r
237                                 return false;\r
238 \r
239                         if (reader.NodeType == XmlNodeType.DocumentType && settings.ProhibitDtd)\r
240                                 throw new XmlException ("Document Type Definition (DTD) is prohibited in this XML reader.");\r
241 \r
242                         if (reader.NodeType == XmlNodeType.Whitespace &&\r
243                                 settings.IgnoreWhitespace)\r
244                                         return Read ();\r
245                         if (reader.NodeType == XmlNodeType.ProcessingInstruction &&\r
246                                 settings.IgnoreProcessingInstructions)\r
247                                         return Read ();\r
248                         if (reader.NodeType == XmlNodeType.Comment &&\r
249                                 settings.IgnoreComments)\r
250                                         return Read ();\r
251 \r
252                         return true;\r
253                 }\r
254 \r
255                 public override string ReadString ()\r
256                 {\r
257                         return reader.ReadString ();\r
258                 }\r
259 \r
260 #if NET_1_1\r
261 #else\r
262                 public override string ReadInnerXml ()\r
263                 {\r
264                         return ReadInnerXmlInternal ();\r
265                 }\r
266 \r
267                 public override string ReadOuterXml ()\r
268                 {\r
269                         return ReadOuterXmlInternal ();\r
270                 }\r
271 #endif\r
272 \r
273                 public override string LookupNamespace (string prefix)\r
274                 {\r
275                         return reader.LookupNamespace (prefix);\r
276                 }\r
277 \r
278                 public override void ResolveEntity ()\r
279                 {\r
280                         reader.ResolveEntity ();\r
281                 }\r
282 \r
283 #if !NET_2_1
284                 public override bool ReadAttributeValue () {\r
285                         return reader.ReadAttributeValue ();\r
286                 }\r
287 #endif\r
288                 #endregion\r
289         }\r
290 }\r
291 \r
292 #endif\r