Merge pull request #319 from pragmatrix/master
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaDocumentation.cs
1 // Author: Dwivedi, Ajay kumar
2 //            Adwiv@Yahoo.com
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;
25 using System.Xml;
26 using System.Xml.Serialization;
27
28 namespace System.Xml.Schema
29 {
30         /// <summary>
31         /// Summary description for XmlSchemaDocumentation.
32         /// </summary>
33         public class XmlSchemaDocumentation : XmlSchemaObject
34         {
35                 private string language;
36                 private XmlNode[] markup;
37                 private string source;
38
39                 public XmlSchemaDocumentation()
40                 {
41                 }
42
43                 [XmlAnyElement]
44                 [XmlText]
45                 public XmlNode[] Markup 
46                 {
47                         get{ return  markup; }
48                         set{ markup = value; }
49                 }
50                 
51                 [System.Xml.Serialization.XmlAttribute("source", DataType="anyURI")]
52                 public string Source 
53                 {
54                         get{ return  source; } 
55                         set{ source = value; }
56                 }
57
58                 [System.Xml.Serialization.XmlAttribute("xml:lang")]
59                 public string Language 
60                 {
61                         get{ return  language; }
62                         set{ language = value; }
63                 }
64
65                 //<documentation
66                 //  source = anyURI
67                 //  xml:lang = language>
68                 //  Content: ({any})*
69                 //</documentation>
70                 internal static XmlSchemaDocumentation Read(XmlSchemaReader reader, ValidationEventHandler h, out bool skip)
71                 {
72                         skip = false;
73                         XmlSchemaDocumentation doc = new XmlSchemaDocumentation();
74
75                         reader.MoveToElement();
76                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != "documentation")
77                         {
78                                 error(h,"Should not happen :1: XmlSchemaDocumentation.Read, name="+reader.Name,null);
79                                 reader.Skip();
80                                 return null;
81                         }
82
83                         doc.LineNumber = reader.LineNumber;
84                         doc.LinePosition = reader.LinePosition;
85                         doc.SourceUri = reader.BaseURI;
86
87                         while(reader.MoveToNextAttribute())
88                         {
89                                 if(reader.Name == "source")
90                                 {
91                                         doc.source = reader.Value;
92                                 }
93                                 else if(reader.Name == "xml:lang")
94                                 {
95                                         doc.language = reader.Value;
96                                 }
97                                 else
98                                 {
99                                         error(h,reader.Name + " is not a valid attribute for documentation",null);
100                                 }
101                         }
102
103                         reader.MoveToElement();
104                         if(reader.IsEmptyElement) {
105                                 doc.Markup = new XmlNode[0];
106                                 return doc;
107                         }
108
109                         //Content {any}*
110                         XmlDocument xmldoc = new XmlDocument();
111                         xmldoc.AppendChild(xmldoc.ReadNode(reader));
112                         XmlNode root = xmldoc.FirstChild;
113                         if(root != null && root.ChildNodes != null)
114                         {
115                                 doc.Markup = new XmlNode[root.ChildNodes.Count];
116                                 for(int i=0;i<root.ChildNodes.Count;i++)
117                                 {
118                                         doc.Markup[i] = root.ChildNodes[i];
119                                 }
120                         }
121                         if(reader.NodeType == XmlNodeType.Element || reader.NodeType == XmlNodeType.EndElement)
122                                 skip = true;
123
124                         return doc;
125                 }
126         }
127 }