2006-09-12 Lluis Sanchez Gual <lluis@novell.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaDocumentation.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining
6 // a copy of this software and associated documentation files (the
7 // "Software"), to deal in the Software without restriction, including
8 // without limitation the rights to use, copy, modify, merge, publish,
9 // distribute, sublicense, and/or sell copies of the Software, and to
10 // permit persons to whom the Software is furnished to do so, subject to
11 // the following conditions:
12 // 
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
15 // 
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 using System;\r
25 using System.Xml;\r
26 using System.Xml.Serialization;\r
27 \r
28 namespace System.Xml.Schema\r
29 {\r
30         /// <summary>\r
31         /// Summary description for XmlSchemaDocumentation.\r
32         /// </summary>\r
33         public class XmlSchemaDocumentation : XmlSchemaObject\r
34         {\r
35                 private string language;\r
36                 private XmlNode[] markup;\r
37                 private string source;\r
38 \r
39                 public XmlSchemaDocumentation()\r
40                 {\r
41                 }\r
42 \r
43                 [XmlAnyElement]\r
44                 [XmlText]\r
45                 public XmlNode[] Markup \r
46                 {\r
47                         get{ return  markup; }\r
48                         set{ markup = value; }\r
49                 }\r
50                 \r
51                 [System.Xml.Serialization.XmlAttribute("source", DataType="anyURI")]\r
52                 public string Source \r
53                 {\r
54                         get{ return  source; } \r
55                         set{ source = value; }\r
56                 }\r
57 \r
58                 [System.Xml.Serialization.XmlAttribute("xml:lang")]\r
59                 public string Language \r
60                 {\r
61                         get{ return  language; }\r
62                         set{ language = value; }\r
63                 }\r
64 \r
65                 //<documentation\r
66                 //  source = anyURI\r
67                 //  xml:lang = language>\r
68                 //  Content: ({any})*\r
69                 //</documentation>\r
70                 internal static XmlSchemaDocumentation Read(XmlSchemaReader reader, ValidationEventHandler h, out bool skip)\r
71                 {\r
72                         skip = false;\r
73                         XmlSchemaDocumentation doc = new XmlSchemaDocumentation();\r
74 \r
75                         reader.MoveToElement();\r
76                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != "documentation")\r
77                         {\r
78                                 error(h,"Should not happen :1: XmlSchemaDocumentation.Read, name="+reader.Name,null);\r
79                                 reader.Skip();\r
80                                 return null;\r
81                         }\r
82 \r
83                         doc.LineNumber = reader.LineNumber;\r
84                         doc.LinePosition = reader.LinePosition;\r
85                         doc.SourceUri = reader.BaseURI;\r
86 \r
87                         while(reader.MoveToNextAttribute())\r
88                         {\r
89                                 if(reader.Name == "source")\r
90                                 {\r
91                                         doc.source = reader.Value;\r
92                                 }\r
93                                 else if(reader.Name == "xml:lang")\r
94                                 {\r
95                                         doc.language = reader.Value;\r
96                                 }\r
97                                 else\r
98                                 {\r
99                                         error(h,reader.Name + " is not a valid attribute for documentation",null);\r
100                                 }\r
101                         }\r
102 \r
103                         reader.MoveToElement();\r
104                         if(reader.IsEmptyElement) {\r
105                                 doc.Markup = new XmlNode[0];\r
106                                 return doc;\r
107                         }\r
108 \r
109                         //Content {any}*\r
110                         XmlDocument xmldoc = new XmlDocument();\r
111                         xmldoc.AppendChild(xmldoc.ReadNode(reader));\r
112                         XmlNode root = xmldoc.FirstChild;\r
113                         if(root != null && root.ChildNodes != null)\r
114                         {\r
115                                 doc.Markup = new XmlNode[root.ChildNodes.Count];\r
116                                 for(int i=0;i<root.ChildNodes.Count;i++)\r
117                                 {\r
118                                         doc.Markup[i] = root.ChildNodes[i];\r
119                                 }\r
120                         }\r
121                         if(reader.NodeType == XmlNodeType.Element || reader.NodeType == XmlNodeType.EndElement)\r
122                                 skip = true;\r
123 \r
124                         return doc;\r
125                 }\r
126         }\r
127 }\r