XmlParserContext.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. //
  2. // System.Xml.XmlParserContext
  3. //
  4. // Author:
  5. // Jason Diamond ([email protected])
  6. // Atsushi Enomoto ([email protected])
  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. namespace System.Xml
  14. {
  15. public class XmlParserContext
  16. {
  17. #region Constructors
  18. public XmlParserContext (
  19. XmlNameTable nt,
  20. XmlNamespaceManager nsMgr,
  21. string xmlLang,
  22. XmlSpace xmlSpace) :
  23. this (
  24. nt,
  25. nsMgr,
  26. null,
  27. null,
  28. null,
  29. null,
  30. null,
  31. xmlLang,
  32. xmlSpace,
  33. null
  34. )
  35. {
  36. }
  37. public XmlParserContext (
  38. XmlNameTable nt,
  39. XmlNamespaceManager nsMgr,
  40. string xmlLang,
  41. XmlSpace xmlSpace,
  42. Encoding enc) :
  43. this (
  44. nt,
  45. nsMgr,
  46. null,
  47. null,
  48. null,
  49. null,
  50. null,
  51. xmlLang,
  52. xmlSpace,
  53. enc
  54. )
  55. {
  56. }
  57. public XmlParserContext (
  58. XmlNameTable nt,
  59. XmlNamespaceManager nsMgr,
  60. string docTypeName,
  61. string pubId,
  62. string sysId,
  63. string internalSubset,
  64. string baseURI,
  65. string xmlLang,
  66. XmlSpace xmlSpace) :
  67. this (
  68. nt,
  69. nsMgr,
  70. null,
  71. null,
  72. null,
  73. null,
  74. null,
  75. xmlLang,
  76. xmlSpace,
  77. null
  78. )
  79. {
  80. }
  81. public XmlParserContext (
  82. XmlNameTable nt,
  83. XmlNamespaceManager nsMgr,
  84. string docTypeName,
  85. string pubId,
  86. string sysId,
  87. string internalSubset,
  88. string baseURI,
  89. string xmlLang,
  90. XmlSpace xmlSpace,
  91. Encoding enc)
  92. {
  93. if (nt == null)
  94. this.nameTable = nsMgr.NameTable;
  95. else
  96. this.NameTable = nt;
  97. this.namespaceManager = nsMgr;
  98. this.docTypeName = docTypeName;
  99. this.publicID = pubId;
  100. this.systemID = sysId;
  101. this.internalSubset = internalSubset;
  102. this.encoding = enc;
  103. baseURIStack = new Stack ();
  104. xmlLangStack = new Stack ();
  105. xmlSpaceStack = new Stack ();
  106. baseURIStack.Push (baseURI != null ? baseURI : String.Empty);
  107. xmlLangStack.Push (xmlLang);
  108. xmlSpaceStack.Push (xmlSpace);
  109. }
  110. #endregion
  111. #region Fields
  112. private string baseURI;
  113. private string docTypeName;
  114. private Encoding encoding;
  115. private string internalSubset;
  116. private XmlNamespaceManager namespaceManager;
  117. private XmlNameTable nameTable;
  118. private string publicID;
  119. private string systemID;
  120. private string xmlLang;
  121. private XmlSpace xmlSpace;
  122. private Stack baseURIStack;
  123. private Stack xmlLangStack;
  124. private Stack xmlSpaceStack;
  125. #endregion
  126. #region Properties
  127. public string BaseURI {
  128. get { return baseURI != null ? baseURI : baseURIStack.Peek () as string; }
  129. set { baseURI = value; }
  130. }
  131. public string DocTypeName {
  132. get { return docTypeName; }
  133. set { docTypeName = value; }
  134. }
  135. public Encoding Encoding {
  136. get { return encoding; }
  137. set { encoding = value; }
  138. }
  139. public string InternalSubset {
  140. get { return internalSubset; }
  141. set { internalSubset = value; }
  142. }
  143. public XmlNamespaceManager NamespaceManager {
  144. get { return namespaceManager; }
  145. set { namespaceManager = value; }
  146. }
  147. public XmlNameTable NameTable {
  148. get { return nameTable; }
  149. set { nameTable = value; }
  150. }
  151. public string PublicId {
  152. get { return publicID; }
  153. set { publicID = value; }
  154. }
  155. public string SystemId {
  156. get { return systemID; }
  157. set { systemID = value; }
  158. }
  159. public string XmlLang {
  160. get { return xmlLang != null ? xmlLang : xmlLangStack.Peek () as string; }
  161. set { xmlLang = value; }
  162. }
  163. public XmlSpace XmlSpace {
  164. get { return xmlSpace != XmlSpace.None ? xmlSpace : (XmlSpace) xmlSpaceStack.Peek (); }
  165. set { xmlSpace = value; }
  166. }
  167. #endregion
  168. #region Methods
  169. internal void PushScope ()
  170. {
  171. baseURIStack.Push (BaseURI);
  172. xmlLangStack.Push (XmlLang);
  173. xmlSpaceStack.Push (XmlSpace);
  174. baseURI = null;
  175. xmlLang = null;
  176. xmlSpace = XmlSpace.None;
  177. }
  178. internal void PopScope ()
  179. {
  180. baseURIStack.Pop ();
  181. xmlLangStack.Pop ();
  182. xmlSpaceStack.Pop ();
  183. baseURI = null;
  184. xmlLang = null;
  185. xmlSpace = XmlSpace.None;
  186. }
  187. #endregion
  188. }
  189. }