//
// Author:
// Jason Diamond (jason@injektilo.org)
+// Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
//
// (C) 2001, 2002 Jason Diamond http://injektilo.org/
+// (C) 2003 Atsushi Enomoto
//
-
+using System.Collections;
using System.Text;
+using Mono.Xml;
namespace System.Xml
{
this (
nt,
nsMgr,
- null,
- null,
- null,
- null,
- null,
+ docTypeName,
+ pubId,
+ sysId,
+ internalSubset,
+ baseURI,
xmlLang,
xmlSpace,
null
string xmlLang,
XmlSpace xmlSpace,
Encoding enc)
+ : this (
+ nt,
+ nsMgr,
+ (docTypeName != null && docTypeName != String.Empty) ?
+ new XmlTextReader ("", 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.NameTable;
this.NameTable = nt;
this.namespaceManager = nsMgr;
- this.docTypeName = docTypeName;
- this.publicID = pubId;
- this.systemID = sysId;
- this.internalSubset = internalSubset;
- this.baseURI = baseURI != null ? baseURI : String.Empty;
- this.xmlLang = xmlLang;
- this.xmlSpace = xmlSpace;
+ 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;
- }
+ baseURIStack = new Stack ();
+ xmlLangStack = new Stack ();
+ xmlSpaceStack = new Stack ();
+ baseURIStack.Push (baseURI != null ? baseURI : String.Empty);
+ xmlLangStack.Push (xmlLang);
+ xmlSpaceStack.Push (xmlSpace);
+ }
#endregion
#region Fields
private string systemID;
private string xmlLang;
private XmlSpace xmlSpace;
+ private Stack baseURIStack;
+ private Stack xmlLangStack;
+ private Stack xmlSpaceStack;
+ private DTDObjectModel dtd;
#endregion
#region Properties
public string BaseURI {
- get { return baseURI; }
+ get { return baseURI != null ? baseURI : baseURIStack.Peek () as string; }
set { baseURI = value; }
}
public string DocTypeName {
- get { return docTypeName; }
+ get { return docTypeName != null ? docTypeName : dtd != null ? dtd.Name : null; }
set { docTypeName = value; }
}
+ internal DTDObjectModel Dtd {
+ get { return dtd; }
+ set { dtd = value; }
+ }
+
public Encoding Encoding {
get { return encoding; }
set { encoding = value; }
}
public string InternalSubset {
- get { return internalSubset; }
+ get { return internalSubset != null ? internalSubset : dtd != null ? dtd.InternalSubset : null; }
set { internalSubset = value; }
}
}
public string PublicId {
- get { return publicID; }
+ get { return publicID != null ? publicID : dtd != null ? dtd.PublicId : null; }
set { publicID = value; }
}
public string SystemId {
- get { return systemID; }
+ get { return systemID != null ? systemID : dtd != null ? dtd.SystemId : null; }
set { systemID = value; }
}
public string XmlLang {
- get { return xmlLang; }
+ get { return xmlLang != null ? xmlLang : xmlLangStack.Peek () as string; }
set { xmlLang = value; }
}
public XmlSpace XmlSpace {
- get { return xmlSpace; }
+ get { return xmlSpace != XmlSpace.None ? xmlSpace : (XmlSpace) xmlSpaceStack.Peek (); }
set { xmlSpace = value; }
}
#endregion
+
+ #region Methods
+ internal void PushScope ()
+ {
+ baseURIStack.Push (BaseURI);
+ xmlLangStack.Push (XmlLang);
+ xmlSpaceStack.Push (XmlSpace);
+ baseURI = null;
+ xmlLang = null;
+ xmlSpace = XmlSpace.None;
+ }
+
+ internal void PopScope ()
+ {
+ baseURIStack.Pop ();
+ xmlLangStack.Pop ();
+ xmlSpaceStack.Pop ();
+ baseURI = null;
+ xmlLang = null;
+ xmlSpace = XmlSpace.None;
+ }
+ #endregion
}
}