| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- //
- // System.Xml.XmlParserContext
- //
- // Author:
- // Jason Diamond ([email protected])
- // Atsushi Enomoto ([email protected])
- //
- // (C) 2001, 2002 Jason Diamond http://injektilo.org/
- // (C) 2003 Atsushi Enomoto
- //
- //
- // 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.
- //
- using System.Collections;
- using System.Text;
- using Mono.Xml;
- #if NET_2_0
- using XmlTextReaderImpl = Mono.Xml2.XmlTextReader;
- #else
- using XmlTextReaderImpl = System.Xml.XmlTextReader;
- #endif
- namespace System.Xml
- {
- public class XmlParserContext
- {
- #region Class
- class ContextItem
- {
- public string BaseURI;
- public string XmlLang;
- public XmlSpace XmlSpace;
- }
- #endregion
- #region Constructors
- public XmlParserContext (
- XmlNameTable nt,
- XmlNamespaceManager nsMgr,
- string xmlLang,
- XmlSpace xmlSpace) :
- this (
- nt,
- nsMgr,
- null,
- null,
- null,
- null,
- null,
- xmlLang,
- xmlSpace,
- null
- )
- {
- }
- public XmlParserContext (
- XmlNameTable nt,
- XmlNamespaceManager nsMgr,
- string xmlLang,
- XmlSpace xmlSpace,
- Encoding enc) :
- this (
- nt,
- nsMgr,
- null,
- null,
- null,
- null,
- null,
- xmlLang,
- xmlSpace,
- enc
- )
- {
- }
- public XmlParserContext (
- XmlNameTable nt,
- XmlNamespaceManager nsMgr,
- string docTypeName,
- string pubId,
- string sysId,
- string internalSubset,
- string baseURI,
- string xmlLang,
- XmlSpace xmlSpace) :
- this (
- nt,
- nsMgr,
- docTypeName,
- pubId,
- sysId,
- internalSubset,
- baseURI,
- xmlLang,
- xmlSpace,
- null
- )
- {
- }
- public XmlParserContext (
- XmlNameTable nt,
- XmlNamespaceManager nsMgr,
- string docTypeName,
- string pubId,
- string sysId,
- string internalSubset,
- string baseURI,
- string xmlLang,
- XmlSpace xmlSpace,
- Encoding enc)
- : this (
- nt,
- nsMgr,
- (docTypeName != null && docTypeName != String.Empty) ?
- new XmlTextReaderImpl ("", nt).GenerateDTDObjectModel (
- docTypeName, pubId, sysId, internalSubset) : null,
- baseURI,
- xmlLang,
- xmlSpace,
- enc)
- {
- }
- internal XmlParserContext (XmlNameTable nt,
- XmlNamespaceManager nsMgr,
- DTDObjectModel dtd,
- string baseURI,
- string xmlLang,
- XmlSpace xmlSpace,
- Encoding enc)
- {
- if (nt == null)
- this.nameTable = nsMgr == null ? new NameTable () : nsMgr.NameTable;
- else
- this.nameTable = nt;
- this.namespaceManager = nsMgr != null ? nsMgr : new XmlNamespaceManager (nameTable);
- if (dtd != null) {
- this.DocTypeName = dtd.Name;
- this.PublicId = dtd.PublicId;
- this.SystemId = dtd.SystemId;
- this.InternalSubset = dtd.InternalSubset;
- this.dtd = dtd;
- }
- this.encoding = enc;
- this.BaseURI = baseURI;
- this.XmlLang = xmlLang;
- this.xmlSpace = xmlSpace;
- contextItems = new ArrayList ();
- }
- #endregion
- #region Fields
- private string baseURI = String.Empty;
- private string docTypeName = String.Empty;
- private Encoding encoding;
- private string internalSubset = String.Empty;
- private XmlNamespaceManager namespaceManager;
- private XmlNameTable nameTable;
- private string publicID = String.Empty;
- private string systemID = String.Empty;
- private string xmlLang = String.Empty;
- private XmlSpace xmlSpace;
- private ArrayList contextItems;
- private int contextItemCount;
- private DTDObjectModel dtd;
- #endregion
- #region Properties
- public string BaseURI {
- get { return baseURI; }
- set { baseURI = value != null ? value : String.Empty; }
- }
- public string DocTypeName {
- get { return docTypeName != null ? docTypeName : dtd != null ? dtd.Name : null; }
- set { docTypeName = value != null ? value : String.Empty; }
- }
- internal DTDObjectModel Dtd {
- get { return dtd; }
- set { dtd = value; }
- }
- public Encoding Encoding {
- get { return encoding; }
- set { encoding = value; }
- }
- public string InternalSubset {
- get { return internalSubset != null ? internalSubset : dtd != null ? dtd.InternalSubset : null; }
- set { internalSubset = value != null ? value : String.Empty; }
- }
- public XmlNamespaceManager NamespaceManager {
- get { return namespaceManager; }
- set { namespaceManager = value; }
- }
- public XmlNameTable NameTable {
- get { return nameTable; }
- set { nameTable = value; }
- }
- public string PublicId {
- get { return publicID != null ? publicID : dtd != null ? dtd.PublicId : null; }
- set { publicID = value != null ? value : String.Empty; }
- }
- public string SystemId {
- get { return systemID != null ? systemID : dtd != null ? dtd.SystemId : null; }
- set { systemID = value != null ? value : String.Empty; }
- }
- public string XmlLang {
- get { return xmlLang; }
- set { xmlLang = value != null ? value : String.Empty; }
- }
- public XmlSpace XmlSpace {
- get { return xmlSpace; }
- set { xmlSpace = value; }
- }
- #endregion
- #region Methods
- internal void PushScope ()
- {
- ContextItem item = null;
- if (contextItems.Count == contextItemCount) {
- item = new ContextItem ();
- contextItems.Add (item);
- }
- else
- item = (ContextItem) contextItems [contextItemCount];
- item.BaseURI = BaseURI;
- item.XmlLang = XmlLang;
- item.XmlSpace = XmlSpace;
- contextItemCount++;
- }
- internal void PopScope ()
- {
- if (contextItemCount == 0)
- throw new XmlException ("Unexpected end of element scope.");
- contextItemCount--;
- ContextItem prev = (ContextItem) contextItems [contextItemCount];
- baseURI = prev.BaseURI;
- xmlLang = prev.XmlLang;
- xmlSpace = prev.XmlSpace;
- }
- #endregion
- }
- }
|