This commit was manufactured by cvs2svn to create branch 'mono-1-0'.
[mono.git] / mcs / class / System.XML / System.Xml / XmlDocumentType.cs
1 //\r
2 // System.Xml.XmlDocumentType.cs\r
3 //\r
4 // Author: Duncan Mak (duncan@ximian.com)\r
5 //         Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)\r
6 //\r
7 // (C) Ximian, Inc.\r
8 //\r
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 using System;\r
31 using System.IO;\r
32 using System.Collections;\r
33 using Mono.Xml;\r
34 \r
35 namespace System.Xml\r
36 {\r
37         public class XmlDocumentType  : XmlLinkedNode\r
38         {\r
39                 // Fields\r
40                 internal XmlNamedNodeMap entities;\r
41                 internal XmlNamedNodeMap notations;\r
42                 DTDObjectModel dtd;\r
43 \r
44                 // Constructor\r
45                 protected internal XmlDocumentType (string name, string publicId,\r
46                                                     string systemId, string internalSubset,\r
47                                                     XmlDocument doc)\r
48                         : base (doc)\r
49                 {\r
50                         XmlTextReader xtr = new XmlTextReader (BaseURI, new StringReader (""), doc.NameTable);\r
51                         xtr.XmlResolver = doc.Resolver;\r
52                         xtr.GenerateDTDObjectModel (name, publicId, systemId, internalSubset);\r
53                         this.dtd = xtr.DTD;\r
54 \r
55                         ImportFromDTD ();\r
56                 }\r
57 \r
58                 internal XmlDocumentType (DTDObjectModel dtd, XmlDocument doc)\r
59                         : base (doc)\r
60                 {\r
61                         this.dtd = dtd;\r
62                         ImportFromDTD ();\r
63                 }\r
64 \r
65                 private void ImportFromDTD ()\r
66                 {\r
67                         entities = new XmlNamedNodeMap (this);\r
68                         notations = new XmlNamedNodeMap (this);\r
69 \r
70                         foreach (DTDEntityDeclaration decl in DTD.EntityDecls.Values) {
71                                 XmlNode n = new XmlEntity (decl.Name, decl.NotationName,
72                                         decl.PublicId, decl.SystemId, OwnerDocument);
73                                 entities.SetNamedItem (n);
74                         }
75                         foreach (DTDNotationDeclaration decl in DTD.NotationDecls.Values) {
76                                 XmlNode n = new XmlNotation (decl.LocalName, decl.Prefix,
77                                         decl.PublicId, decl.SystemId, OwnerDocument);
78                                 notations.SetNamedItem (n);
79                         }
80                 }\r
81 \r
82                 // Properties\r
83                 internal DTDObjectModel DTD {\r
84                         get { return dtd; }\r
85                 }\r
86 \r
87                 public XmlNamedNodeMap Entities\r
88                 {\r
89                         get { return entities; }\r
90                 }\r
91                         \r
92                 public string InternalSubset\r
93                 {\r
94                         get { return dtd.InternalSubset; }\r
95                 }\r
96 \r
97                 public override bool IsReadOnly\r
98                 {\r
99                         get { return true; } // always return true\r
100                 }\r
101 \r
102                 public override string LocalName\r
103                 {\r
104                         get { return dtd.Name; }\r
105                 }\r
106 \r
107                 public override string Name\r
108                 {\r
109                         get { return dtd.Name; }\r
110                 }\r
111 \r
112                 public override XmlNodeType NodeType\r
113                 {\r
114                         get { return XmlNodeType.DocumentType; }\r
115                 }\r
116 \r
117                 public XmlNamedNodeMap Notations\r
118                 {\r
119                         get { return notations; }\r
120                 }\r
121 \r
122                 public string PublicId\r
123                 {\r
124                         get { return dtd.PublicId; }\r
125                 }\r
126 \r
127                 public string SystemId\r
128                 {\r
129                         get { return dtd.SystemId; }\r
130                 }\r
131 \r
132                 // Methods\r
133                 public override XmlNode CloneNode (bool deep)\r
134                 {\r
135                         // deep is ignored\r
136                         return new XmlDocumentType (dtd, OwnerDocument);\r
137                 }\r
138                 \r
139                 public override void WriteContentTo (XmlWriter w)\r
140                 {\r
141                         // No effect\r
142                 }\r
143 \r
144                 public override void WriteTo (XmlWriter w)\r
145                 {\r
146                         w.WriteDocType (Name, PublicId, SystemId, InternalSubset);\r
147                 }\r
148         }\r
149 }\r