2002-03-28 Duncan Mak <duncan@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlDeclaration.cs
1 //\r
2 // System.Xml.XmlDeclaration\r
3 //\r
4 // Author:\r
5 //      Duncan Mak  (duncan@ximian.com)\r
6 //\r
7 // (C) Ximian, Inc.\r
8 \r
9 using System;\r
10 using System.Xml;\r
11 \r
12 namespace System.Xml\r
13 {\r
14         public class XmlDeclaration : XmlLinkedNode\r
15         {\r
16                 string encoding = "UTF-8"; // defaults to UTF-8\r
17                 string standAlone;\r
18                 string version;\r
19 \r
20                 protected internal XmlDeclaration (string version, string encoding,\r
21                                                    string standAlone, XmlDocument doc)\r
22                         : base (doc)\r
23                 {\r
24                         this.version = version;\r
25                         this.encoding = encoding;\r
26                         this.standAlone = standAlone;\r
27                 }\r
28 \r
29                 public string Encoding  {\r
30                         get {\r
31                                 if (encoding == null)\r
32                                         return String.Empty;\r
33                                 else\r
34                                         return encoding;\r
35                         } \r
36 \r
37                         set { encoding = value ; } // Note: MS' doesn't check this string, should we?\r
38                 }\r
39 \r
40                 public override string InnerText {\r
41                         get { return Value; }\r
42                         set { ParseInput (value); }\r
43                 }\r
44                 \r
45                 public override string LocalName {\r
46                         get { return "xml"; }\r
47                 }\r
48 \r
49                 public override string Name {\r
50                         get { return "xml"; }\r
51                 }\r
52 \r
53                 public override XmlNodeType NodeType {\r
54                         get { return XmlNodeType.XmlDeclaration; }\r
55                 }\r
56 \r
57                 public string Standalone {\r
58                         get {\r
59                                 if (standAlone == null)\r
60                                         return String.Empty;\r
61                                 else\r
62                                         return standAlone;\r
63                         }\r
64 \r
65                         set {\r
66                                 if (value.ToUpper() == "YES")\r
67                                         standAlone = "yes";\r
68                                 if (value.ToUpper() == "NO")\r
69                                         standAlone = "no";\r
70                         }\r
71                 }\r
72 \r
73                 public override string Value {\r
74                         get { return String.Format ("version=\"{0}\" encoding=\"{1}\" standalone=\"{2}\"",\r
75                                                     Version, Encoding, Standalone); }\r
76                         set { ParseInput (value); }\r
77                 }\r
78 \r
79                 public string Version {\r
80                         get { return version; }\r
81                 }\r
82 \r
83                 public override XmlNode CloneNode (bool deep)\r
84                 {\r
85                         return new XmlDeclaration (Version, Encoding, standAlone, OwnerDocument);\r
86                 }\r
87 \r
88                 public override void WriteContentTo (XmlWriter w)\r
89                 {\r
90                         // Nothing to do - no children.\r
91                 }\r
92 \r
93                 [MonoTODO]\r
94                 public override void WriteTo (XmlWriter w)\r
95                 {\r
96                         if ((Standalone == String.Empty) || (Encoding == String.Empty))\r
97                                 return;\r
98                 }\r
99 \r
100                 void ParseInput (string input)\r
101                 {                       \r
102                         Encoding = input.Split (new char [] { ' ' }) [1].Split (new char [] { '=' }) [1];\r
103                         Standalone = input.Split (new char [] { ' ' }) [2].Split (new char [] { '=' }) [1];\r
104                 }\r
105         }\r
106 }\r