2004-02-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlEntity.cs
1 //
2 // System.Xml.XmlEntity.cs
3 //
4 // Author:
5 //      Duncan Mak  (duncan@ximian.com)
6 //      Atsushi Enomoto  (atsushi@ximian.com)
7 //
8 // (C) Ximian, Inc.
9 // (C) 2004 Novell Inc.
10 //
11 using Mono.Xml;
12
13 namespace System.Xml
14 {
15         public class XmlEntity : XmlNode
16         {
17                 #region Constructors
18
19                 internal XmlEntity (string name, string NDATA, string publicId, string systemId,
20                                     XmlDocument doc)
21                         : base (doc)
22                 {
23                         this.name = doc.NameTable.Add (name);
24                         this.NDATA = NDATA;
25                         this.publicId = publicId;
26                         this.systemId = systemId;
27                         this.baseUri = doc.BaseURI;
28                 }
29
30                 #endregion
31                 
32                 #region Fields
33
34                 string name;
35                 string NDATA;
36                 string publicId;
37                 string systemId;
38                 string baseUri;
39                 XmlLinkedNode lastChild;
40
41                 #endregion
42
43                 #region Properties
44
45                 public override string BaseURI {
46                         get {  return baseUri; }
47                 }
48
49                 public override string InnerText {
50                         get { return base.InnerText; }
51                         set { throw new InvalidOperationException ("This operation is not supported."); }
52                 }
53
54                 public override string InnerXml {
55                         get { return base.InnerXml; }
56                         set { throw new InvalidOperationException ("This operation is not supported."); }
57                 }
58
59                 public override bool IsReadOnly {
60                         get { return true; } // always read-only.
61                 }
62
63                 public override string LocalName {
64                         get { return name; }
65                 }
66
67                 public override string Name {
68                         get { return name; }
69                 }
70
71                 public override XmlNodeType NodeType {
72                         get { return XmlNodeType.Entity; }
73                 }
74
75                 public string NotationName {
76                         get {
77                                 if (NDATA == null)
78                                         return null;
79                                 else
80                                         return NDATA;
81                         }
82                 }
83
84                 public override string OuterXml {
85                         get { return String.Empty; }
86                 }
87
88                 public string PublicId {
89                         get {
90                                 if (publicId == null)
91                                         return null;
92                                 else
93                                         return publicId;
94                         }
95                 }
96
97                 public string SystemId {
98                         get {
99                                 if (publicId == null)
100                                         return null;
101                                 else
102                                         return systemId;
103                         }
104                 }
105                 #endregion
106
107                 #region Methods
108
109                 public override XmlNode CloneNode (bool deep)
110                 {
111                         throw new InvalidOperationException ("This operation is not supported.");
112                 }
113
114                 public override void WriteContentTo (XmlWriter w)
115                 {
116                         // No effect.
117                 }
118
119                 public override void WriteTo (XmlWriter w)
120                 {
121                         // No effect.
122                 }
123 \r
124                 internal void SetEntityContent ()\r
125                 {\r
126                         if (FirstChild != null)
127                                 return;
128
129                         XmlDocumentType doctype = OwnerDocument.DocumentType;
130 \r
131                         if (doctype == null)\r
132                                 return;\r
133
134                         DTDEntityDeclaration decl = doctype.DTD.EntityDecls [name];
135                         if (decl == null)
136                                 return;
137
138                         XmlNameTable nt = this.OwnerDocument.NameTable;
139                         XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();
140                         XmlParserContext ctx = new XmlParserContext (OwnerDocument.NameTable, nsmgr,
141                                 doctype != null ? doctype.DTD : null,
142                                 BaseURI, XmlLang, XmlSpace, null);
143                         XmlTextReader xmlReader = new XmlTextReader (decl.EntityValue, XmlNodeType.Element, ctx);
144                         xmlReader.XmlResolver = OwnerDocument.Resolver;
145
146                         do {
147                                 XmlNode n = OwnerDocument.ReadNode (xmlReader);
148                                 if(n == null) break;
149                                 InsertBefore (n, null, false, false);
150                         } while (true);
151                 }\r
152                 #endregion
153         }
154 }