2003-10-25 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaWhiteSpaceFacet.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Xml;\r
5 \r
6 namespace System.Xml.Schema\r
7 {\r
8         /// <summary>\r
9         /// Summary description for XmlSchemaWhiteSpaceFacet.\r
10         /// </summary>\r
11         public class XmlSchemaWhiteSpaceFacet : XmlSchemaFacet\r
12         {\r
13                 private static string xmlname = "whiteSpace";\r
14 \r
15                 public XmlSchemaWhiteSpaceFacet()\r
16                 {\r
17                 }\r
18                 //      <whiteSpace\r
19                 //      fixed = boolean : false\r
20                 //      id = ID\r
21                 //      value = (collapse | preserve | replace)\r
22                 //      {any attributes with non-schema namespace . . .}>\r
23                 //      Content: (annotation?)\r
24                 //      </whiteSpace>\r
25                 internal static XmlSchemaWhiteSpaceFacet Read(XmlSchemaReader reader, ValidationEventHandler h)\r
26                 {\r
27                         XmlSchemaWhiteSpaceFacet ws = new XmlSchemaWhiteSpaceFacet();\r
28                         reader.MoveToElement();\r
29 \r
30                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
31                         {\r
32                                 error(h,"Should not happen :1: XmlSchemaWhiteSpaceFacet.Read, name="+reader.Name,null);\r
33                                 reader.Skip();\r
34                                 return null;\r
35                         }\r
36 \r
37                         ws.LineNumber = reader.LineNumber;\r
38                         ws.LinePosition = reader.LinePosition;\r
39                         ws.SourceUri = reader.BaseURI;\r
40 \r
41                         while(reader.MoveToNextAttribute())\r
42                         {\r
43                                 if(reader.Name == "id")\r
44                                 {\r
45                                         ws.Id = reader.Value;\r
46                                 }\r
47                                 else if(reader.Name == "fixed")\r
48                                 {\r
49                                         Exception innerex;\r
50                                         ws.IsFixed = XmlSchemaUtil.ReadBoolAttribute(reader,out innerex);\r
51                                         if(innerex != null)\r
52                                                 error(h, reader.Value + " is not a valid value for fixed attribute",innerex);\r
53                                 }\r
54                                 else if(reader.Name == "value")\r
55                                 {\r
56                                         ws.Value = reader.Value;\r
57                                 }\r
58                                 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
59                                 {\r
60                                         error(h,reader.Name + " is not a valid attribute for "+xmlname,null);\r
61                                 }\r
62                                 else\r
63                                 {\r
64                                         XmlSchemaUtil.ReadUnhandledAttribute(reader,ws);\r
65                                 }\r
66                         }\r
67                         \r
68                         reader.MoveToElement();\r
69                         if(reader.IsEmptyElement)\r
70                                 return ws;\r
71 \r
72                         //  Content: (annotation?)\r
73                         int level = 1;\r
74                         while(reader.ReadNextElement())\r
75                         {\r
76                                 if(reader.NodeType == XmlNodeType.EndElement)\r
77                                 {\r
78                                         if(reader.LocalName != xmlname)\r
79                                                 error(h,"Should not happen :2: XmlSchemaWhiteSpaceFacet.Read, name="+reader.Name,null);\r
80                                         break;\r
81                                 }\r
82                                 if(level <= 1 && reader.LocalName == "annotation")\r
83                                 {\r
84                                         level = 2;      //Only one annotation\r
85                                         XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
86                                         if(annotation != null)\r
87                                                 ws.Annotation = annotation;\r
88                                         continue;\r
89                                 }\r
90                                 reader.RaiseInvalidElementError();\r
91                         }                       \r
92                         return ws;\r
93                 }\r
94 \r
95 \r
96         }\r
97 }\r