Add MIT license to System.XML.DLL
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaAppInfo.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 XmlSchemaAppInfo.\r
32         /// </summary>\r
33         public class XmlSchemaAppInfo : XmlSchemaObject\r
34         {\r
35                 private XmlNode[] markup;\r
36                 private string source;\r
37 \r
38                 public XmlSchemaAppInfo()\r
39                 {\r
40                 }\r
41 \r
42                 [System.Xml.Serialization.XmlAttribute("source")]\r
43                 public string Source \r
44                 {\r
45                         get{ return  source; } \r
46                         set{ source = value; }\r
47                 }\r
48 \r
49                 [XmlAnyElement]\r
50                 [XmlText]\r
51                 public XmlNode[] Markup \r
52                 {\r
53                         get{ return  markup; }\r
54                         set{ markup = value; }\r
55                 }\r
56 \r
57                 //<appinfo\r
58                 //  source = anyURI>\r
59                 //  Content: ({any})*\r
60                 //</appinfo>\r
61                 internal static XmlSchemaAppInfo Read(XmlSchemaReader reader, ValidationEventHandler h, out bool skip)\r
62                 {\r
63                         skip = false;\r
64                         XmlSchemaAppInfo appinfo = new XmlSchemaAppInfo();\r
65                         reader.MoveToElement();\r
66 \r
67                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != "appinfo")\r
68                         {\r
69                                 error(h,"Should not happen :1: XmlSchemaAppInfo.Read, name="+reader.Name,null);\r
70                                 reader.SkipToEnd();\r
71                                 return null;\r
72                         }\r
73 \r
74                         appinfo.LineNumber = reader.LineNumber;\r
75                         appinfo.LinePosition = reader.LinePosition;\r
76                         appinfo.SourceUri = reader.BaseURI;\r
77 \r
78                         while(reader.MoveToNextAttribute())\r
79                         {\r
80                                 if(reader.Name == "source")\r
81                                 {\r
82                                         appinfo.source = reader.Value;\r
83                                 }\r
84                                 else\r
85                                 {\r
86                                         error(h,reader.Name + " is not a valid attribute for appinfo",null);\r
87                                 }\r
88                         }\r
89 \r
90                         reader.MoveToElement();\r
91                         if(reader.IsEmptyElement)\r
92                                 return appinfo;\r
93 \r
94                         //Content {any}*\r
95                         //FIXME: This is a pure Quick Hack; There must be a another method;\r
96                         XmlDocument xmldoc = new XmlDocument();\r
97                         xmldoc.AppendChild(xmldoc.ReadNode(reader));\r
98                         XmlNode root = xmldoc.FirstChild;\r
99                         if(root != null && root.ChildNodes != null)\r
100                         {\r
101                                 appinfo.Markup = new XmlNode[root.ChildNodes.Count];\r
102                                 for(int i=0;i<root.ChildNodes.Count;i++)\r
103                                 {\r
104                                         appinfo.Markup[i] = root.ChildNodes[i];\r
105                                 }\r
106                         }\r
107                         if(reader.NodeType == XmlNodeType.Element || reader.NodeType == XmlNodeType.EndElement)\r
108                                 skip = true;\r
109                         return appinfo;\r
110                 }\r
111         }\r
112 }\r