X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.XML%2FSystem.Xml.Schema%2FXmlSchemaMaxLengthFacet.cs;h=f68134a57521307a2e060ad5164f256bdc861147;hb=018c4be8c5ef6e23ccd9bf798513a6178631e1ea;hp=efd129310811d925bd4979169a35f9e35bcd785c;hpb=aa2c54ee1f8ef48d0ba3d02bd82bb15841d2abe4;p=mono.git diff --git a/mcs/class/System.XML/System.Xml.Schema/XmlSchemaMaxLengthFacet.cs b/mcs/class/System.XML/System.Xml.Schema/XmlSchemaMaxLengthFacet.cs index efd12931081..f68134a5752 100755 --- a/mcs/class/System.XML/System.Xml.Schema/XmlSchemaMaxLengthFacet.cs +++ b/mcs/class/System.XML/System.Xml.Schema/XmlSchemaMaxLengthFacet.cs @@ -1,6 +1,28 @@ // Author: Dwivedi, Ajay kumar // Adwiv@Yahoo.com + +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// using System; +using System.Xml; namespace System.Xml.Schema { @@ -9,8 +31,93 @@ namespace System.Xml.Schema /// public class XmlSchemaMaxLengthFacet : XmlSchemaNumericFacet { + const string xmlname = "maxLength"; + public XmlSchemaMaxLengthFacet() { } + + internal override Facet ThisFacet { + get { return Facet.maxLength;} + } + + + // + // Content: (annotation?) + // + internal static XmlSchemaMaxLengthFacet Read(XmlSchemaReader reader, ValidationEventHandler h) + { + XmlSchemaMaxLengthFacet length = new XmlSchemaMaxLengthFacet(); + reader.MoveToElement(); + + if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname) + { + error(h,"Should not happen :1: XmlSchemaMaxLengthFacet.Read, name="+reader.Name,null); + reader.Skip(); + return null; + } + + length.LineNumber = reader.LineNumber; + length.LinePosition = reader.LinePosition; + length.SourceUri = reader.BaseURI; + + while(reader.MoveToNextAttribute()) + { + if(reader.Name == "id") + { + length.Id = reader.Value; + } + else if(reader.Name == "fixed") + { + Exception innerex; + length.IsFixed = XmlSchemaUtil.ReadBoolAttribute(reader,out innerex); + if(innerex != null) + error(h, reader.Value + " is not a valid value for fixed attribute",innerex); + } + else if(reader.Name == "value") + { + length.Value = reader.Value; + } + else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace) + { + error(h,reader.Name + " is not a valid attribute for group",null); + } + else + { + XmlSchemaUtil.ReadUnhandledAttribute(reader,length); + } + } + + reader.MoveToElement(); + if(reader.IsEmptyElement) + return length; + + // Content: (annotation?) + int level = 1; + while(reader.ReadNextElement()) + { + if(reader.NodeType == XmlNodeType.EndElement) + { + if(reader.LocalName != xmlname) + error(h,"Should not happen :2: XmlSchemaMaxLengthFacet.Read, name="+reader.Name,null); + break; + } + if(level <= 1 && reader.LocalName == "annotation") + { + level = 2; //Only one annotation + XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h); + if(annotation != null) + length.Annotation = annotation; + continue; + } + reader.RaiseInvalidElementError(); + } + return length; + } + } }