2004-05-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaPatternFacet.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 XmlSchemaPatternFacet.\r
10         /// </summary>\r
11         public class XmlSchemaPatternFacet : XmlSchemaFacet\r
12         {\r
13                 const string xmlname = "pattern";\r
14 \r
15                 public XmlSchemaPatternFacet()\r
16                 {\r
17                 }\r
18                         \r
19                 internal override Facet ThisFacet { \r
20                         get { return Facet.pattern;}\r
21                 }\r
22         \r
23                 //<pattern\r
24                 //  id = ID\r
25                 //  value = anySimpleType\r
26                 //  {any attributes with non-schema namespace . . .}>\r
27                 //  Content: (annotation?)\r
28                 //</pattern>\r
29                 internal static XmlSchemaPatternFacet Read(XmlSchemaReader reader, ValidationEventHandler h)\r
30                 {\r
31                         XmlSchemaPatternFacet pattern = new XmlSchemaPatternFacet();\r
32                         reader.MoveToElement();\r
33 \r
34                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
35                         {\r
36                                 error(h,"Should not happen :1: XmlSchemaPatternFacet.Read, name="+reader.Name,null);\r
37                                 reader.Skip();\r
38                                 return null;\r
39                         }\r
40 \r
41                         pattern.LineNumber = reader.LineNumber;\r
42                         pattern.LinePosition = reader.LinePosition;\r
43                         pattern.SourceUri = reader.BaseURI;\r
44 \r
45                         while(reader.MoveToNextAttribute())\r
46                         {\r
47                                 if(reader.Name == "id")\r
48                                 {\r
49                                         pattern.Id = reader.Value;\r
50                                 }\r
51                                 else if(reader.Name == "value")\r
52                                 {\r
53                                         pattern.Value = reader.Value;\r
54                                 }\r
55                                 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
56                                 {\r
57                                         error(h,reader.Name + " is not a valid attribute for "+xmlname,null);\r
58                                 }\r
59                                 else\r
60                                 {\r
61                                         XmlSchemaUtil.ReadUnhandledAttribute(reader,pattern);\r
62                                 }\r
63                         }\r
64                         \r
65                         reader.MoveToElement();\r
66                         if(reader.IsEmptyElement)\r
67                                 return pattern;\r
68 \r
69                         //  Content: (annotation?)\r
70                         int level = 1;\r
71                         while(reader.ReadNextElement())\r
72                         {\r
73                                 if(reader.NodeType == XmlNodeType.EndElement)\r
74                                 {\r
75                                         if(reader.LocalName != xmlname)\r
76                                                 error(h,"Should not happen :2: XmlSchemaPatternFacet.Read, name="+reader.Name,null);\r
77                                         break;\r
78                                 }\r
79                                 if(level <= 1 && reader.LocalName == "annotation")\r
80                                 {\r
81                                         level = 2;      //Only one annotation\r
82                                         XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
83                                         if(annotation != null)\r
84                                                 pattern.Annotation = annotation;\r
85                                         continue;\r
86                                 }\r
87                                 reader.RaiseInvalidElementError();\r
88                         }                       \r
89                         return pattern;\r
90                 }\r
91         }\r
92 }\r