Dont make function call to StringBuffer
[mono.git] / mcs / class / System.XML / System.Xml / XmlParserContext.cs
1 //
2 // System.Xml.XmlParserContext
3 //
4 // Author:
5 //   Jason Diamond (jason@injektilo.org)
6 //   Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
7 //
8 // (C) 2001, 2002 Jason Diamond  http://injektilo.org/
9 // (C) 2003 Atsushi Enomoto
10 //
11 using System.Collections;
12 using System.Text;
13 using Mono.Xml;
14
15 namespace System.Xml
16 {
17         public class XmlParserContext
18         {
19                 #region Constructors
20
21                 public XmlParserContext (
22                         XmlNameTable nt,
23                         XmlNamespaceManager nsMgr,
24                         string xmlLang,
25                         XmlSpace xmlSpace) :
26
27                         this (
28                                 nt,
29                                 nsMgr,
30                                 null,
31                                 null,
32                                 null,
33                                 null,
34                                 null,
35                                 xmlLang,
36                                 xmlSpace,
37                                 null
38                         )
39                 {
40                 }
41
42                 public XmlParserContext (
43                         XmlNameTable nt,
44                         XmlNamespaceManager nsMgr,
45                         string xmlLang,
46                         XmlSpace xmlSpace,
47                         Encoding enc) :
48
49                         this (
50                                 nt,
51                                 nsMgr,
52                                 null,
53                                 null,
54                                 null,
55                                 null,
56                                 null,
57                                 xmlLang,
58                                 xmlSpace,
59                                 enc
60                         )
61                 {
62                 }
63
64                 public XmlParserContext (
65                         XmlNameTable nt,
66                         XmlNamespaceManager nsMgr,
67                         string docTypeName,
68                         string pubId,
69                         string sysId,
70                         string internalSubset,
71                         string baseURI,
72                         string xmlLang,
73                         XmlSpace xmlSpace) :
74
75                         this (
76                                 nt,
77                                 nsMgr,
78                                 docTypeName,
79                                 pubId,
80                                 sysId,
81                                 internalSubset,
82                                 baseURI,
83                                 xmlLang,
84                                 xmlSpace,
85                                 null
86                         )
87                 {
88                 }
89
90                 public XmlParserContext (
91                         XmlNameTable nt,
92                         XmlNamespaceManager nsMgr,
93                         string docTypeName,
94                         string pubId,
95                         string sysId,
96                         string internalSubset,
97                         string baseURI,
98                         string xmlLang,
99                         XmlSpace xmlSpace,
100                         Encoding enc)
101                         : this (
102                                 nt,
103                                 nsMgr,
104                                 (docTypeName != null && docTypeName != String.Empty) ?
105                                         new XmlTextReader ("", nt).GenerateDTDObjectModel (
106                                                 docTypeName, pubId, sysId, internalSubset) : null,
107                                 baseURI,
108                                 xmlLang,
109                                 xmlSpace,
110                                 enc)
111                 {
112                 }
113
114                 internal XmlParserContext (XmlNameTable nt,
115                         XmlNamespaceManager nsMgr,
116                         DTDObjectModel dtd,
117                         string baseURI,
118                         string xmlLang,
119                         XmlSpace xmlSpace,
120                         Encoding enc)
121                 {
122                         if (nt == null)
123                                 this.nameTable = nsMgr.NameTable;
124                         else
125                                 this.NameTable = nt;
126
127                         this.namespaceManager = nsMgr;
128                         if (dtd != null) {
129                                 this.docTypeName = dtd.Name;
130                                 this.publicID = dtd.PublicId;
131                                 this.systemID = dtd.SystemId;
132                                 this.internalSubset = dtd.InternalSubset;
133                                 this.dtd = dtd;
134                         }
135                         this.encoding = enc;
136
137                         baseURIStack = new Stack ();
138                         xmlLangStack = new Stack ();
139                         xmlSpaceStack = new Stack ();
140                         baseURIStack.Push (baseURI != null ? baseURI : String.Empty);
141                         xmlLangStack.Push (xmlLang);
142                         xmlSpaceStack.Push (xmlSpace);
143                 }
144                 #endregion
145
146                 #region Fields
147
148                 private string baseURI;
149                 private string docTypeName;
150                 private Encoding encoding;
151                 private string internalSubset;
152                 private XmlNamespaceManager namespaceManager;
153                 private XmlNameTable nameTable;
154                 private string publicID;
155                 private string systemID;
156                 private string xmlLang;
157                 private XmlSpace xmlSpace;
158                 private Stack baseURIStack;
159                 private Stack xmlLangStack;
160                 private Stack xmlSpaceStack;
161                 private DTDObjectModel dtd;
162
163                 #endregion
164
165                 #region Properties
166
167                 public string BaseURI {
168                         get { return baseURI != null ? baseURI : baseURIStack.Peek () as string; }
169                         set { baseURI = value; }
170                 }
171
172                 public string DocTypeName {
173                         get { return docTypeName != null ? docTypeName : dtd != null ? dtd.Name : null; }
174                         set { docTypeName = value; }
175                 }
176
177                 internal DTDObjectModel Dtd {
178                         get { return dtd; }
179                         set { dtd = value; }
180                 }
181
182                 public Encoding Encoding {
183                         get { return encoding; }
184                         set { encoding = value; }
185                 }
186
187                 public string InternalSubset {
188                         get { return internalSubset != null ? internalSubset : dtd != null ? dtd.InternalSubset : null; }
189                         set { internalSubset = value; }
190                 }
191
192                 public XmlNamespaceManager NamespaceManager {
193                         get { return namespaceManager; }
194                         set { namespaceManager = value; }
195                 }
196
197                 public XmlNameTable NameTable {
198                         get { return nameTable; }
199                         set { nameTable = value; }
200                 }
201
202                 public string PublicId {
203                         get { return publicID != null ? publicID : dtd != null ? dtd.PublicId : null; }
204                         set { publicID = value; }
205                 }
206
207                 public string SystemId {
208                         get { return systemID != null ? systemID : dtd != null ? dtd.SystemId : null; }
209                         set { systemID = value; }
210                 }
211
212                 public string XmlLang {
213                         get { return xmlLang != null ? xmlLang : xmlLangStack.Peek () as string; }
214                         set { xmlLang = value; }
215                 }
216
217                 public XmlSpace XmlSpace {
218                         get { return xmlSpace != XmlSpace.None ? xmlSpace : (XmlSpace) xmlSpaceStack.Peek (); }
219                         set { xmlSpace = value; }
220                 }
221
222                 #endregion
223
224                 #region Methods
225                 internal void PushScope ()
226                 {
227                         baseURIStack.Push (BaseURI);
228                         xmlLangStack.Push (XmlLang);
229                         xmlSpaceStack.Push (XmlSpace);
230                         baseURI = null;
231                         xmlLang = null;
232                         xmlSpace = XmlSpace.None;
233                 }
234
235                 internal void PopScope ()
236                 {
237                         baseURIStack.Pop ();
238                         xmlLangStack.Pop ();
239                         xmlSpaceStack.Pop ();
240                         baseURI = null;
241                         xmlLang = null;
242                         xmlSpace = XmlSpace.None;
243                 }
244                 #endregion
245         }
246 }