You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			228 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="SchemaElementDecl.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright> 
 | |
| // <owner current="true" primary="true">Microsoft</owner>                                                               
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Xml.Schema {
 | |
| 
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.Diagnostics;
 | |
|     using System.Collections.Generic;
 | |
| 
 | |
|     internal sealed class SchemaElementDecl : SchemaDeclBase, IDtdAttributeListInfo {
 | |
|         Dictionary<XmlQualifiedName, SchemaAttDef> attdefs = new Dictionary<XmlQualifiedName, SchemaAttDef>();
 | |
|         List<IDtdDefaultAttributeInfo> defaultAttdefs;
 | |
|         bool isIdDeclared;
 | |
|         bool hasNonCDataAttribute = false;
 | |
| 
 | |
| #if !SILVERLIGHT
 | |
|         bool isAbstract = false;
 | |
|         bool isNillable = false;
 | |
|         bool hasRequiredAttribute = false;
 | |
|         bool isNotationDeclared;
 | |
|         Dictionary<XmlQualifiedName, XmlQualifiedName> prohibitedAttributes = new Dictionary<XmlQualifiedName, XmlQualifiedName>(); 
 | |
|         ContentValidator contentValidator;
 | |
|         XmlSchemaAnyAttribute anyAttribute;
 | |
|         XmlSchemaDerivationMethod block;
 | |
|         CompiledIdentityConstraint[] constraints;
 | |
|         XmlSchemaElement schemaElement;
 | |
| 
 | |
|         internal static readonly SchemaElementDecl Empty = new SchemaElementDecl();
 | |
| #endif
 | |
| 
 | |
|         //
 | |
| // Constructor
 | |
| //
 | |
| #if !SILVERLIGHT
 | |
|         internal SchemaElementDecl() {
 | |
|         }
 | |
|         
 | |
|         internal SchemaElementDecl(XmlSchemaDatatype dtype) {
 | |
|             Datatype = dtype;
 | |
|             contentValidator = ContentValidator.TextOnly;
 | |
|         }
 | |
| #endif
 | |
| 
 | |
|         internal SchemaElementDecl(XmlQualifiedName name, String prefix) 
 | |
|         : base(name, prefix) {
 | |
|         }
 | |
| 
 | |
| //
 | |
| // Static methods
 | |
| //
 | |
| #if !SILVERLIGHT
 | |
|         internal static SchemaElementDecl CreateAnyTypeElementDecl() {
 | |
|             SchemaElementDecl anyTypeElementDecl = new SchemaElementDecl();
 | |
|             anyTypeElementDecl.Datatype = DatatypeImplementation.AnySimpleType.Datatype;
 | |
|             return anyTypeElementDecl;
 | |
|         }
 | |
| #endif
 | |
|         
 | |
| //
 | |
| // IDtdAttributeListInfo interface
 | |
| //
 | |
| #region IDtdAttributeListInfo Members
 | |
| 
 | |
|         string IDtdAttributeListInfo.Prefix {
 | |
|             get { return ((SchemaElementDecl)this).Prefix; }
 | |
|         }
 | |
| 
 | |
|         string IDtdAttributeListInfo.LocalName {
 | |
|             get { return ((SchemaElementDecl)this).Name.Name; }
 | |
|         }
 | |
| 
 | |
|         bool IDtdAttributeListInfo.HasNonCDataAttributes {
 | |
|             get { return hasNonCDataAttribute; }
 | |
|         }
 | |
| 
 | |
|         IDtdAttributeInfo IDtdAttributeListInfo.LookupAttribute(string prefix, string localName) {
 | |
|             XmlQualifiedName qname = new XmlQualifiedName(localName, prefix);
 | |
|             SchemaAttDef attDef;
 | |
|             if (attdefs.TryGetValue(qname, out attDef)) {
 | |
|                 return attDef;
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         IEnumerable<IDtdDefaultAttributeInfo> IDtdAttributeListInfo.LookupDefaultAttributes() {
 | |
|             return defaultAttdefs;
 | |
|         }
 | |
| 
 | |
|         IDtdAttributeInfo IDtdAttributeListInfo.LookupIdAttribute() {
 | |
|             foreach (SchemaAttDef attDef in attdefs.Values) {
 | |
|                 if (attDef.TokenizedType == XmlTokenizedType.ID) {
 | |
|                     return (IDtdAttributeInfo)attDef;
 | |
|                 }
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| #endregion
 | |
| 
 | |
| //
 | |
| // SchemaElementDecl properties
 | |
| //
 | |
|         internal bool IsIdDeclared {
 | |
|             get { return isIdDeclared;}
 | |
|             set { isIdDeclared = value;}
 | |
|         }
 | |
| 
 | |
|         internal bool HasNonCDataAttribute {
 | |
|             get { return hasNonCDataAttribute; }
 | |
|             set { hasNonCDataAttribute = value; }
 | |
|         }
 | |
| 
 | |
| #if !SILVERLIGHT
 | |
|         internal SchemaElementDecl Clone() {
 | |
|             return (SchemaElementDecl) MemberwiseClone();
 | |
|         }
 | |
| 
 | |
|         internal bool IsAbstract {
 | |
|             get { return isAbstract;}
 | |
|             set { isAbstract = value;}
 | |
|         }
 | |
| 
 | |
|         internal bool IsNillable {
 | |
|             get { return isNillable;}
 | |
|             set { isNillable = value;}
 | |
|         }
 | |
| 
 | |
|         internal XmlSchemaDerivationMethod Block {
 | |
|              get { return block; }
 | |
|              set { block = value; }
 | |
|         }
 | |
| 
 | |
|         internal bool IsNotationDeclared {
 | |
|             get { return isNotationDeclared; }
 | |
|             set { isNotationDeclared = value; }
 | |
|         }
 | |
| 
 | |
|         internal bool HasDefaultAttribute {
 | |
|             get { return defaultAttdefs != null; }
 | |
|         }
 | |
| 
 | |
|         internal bool HasRequiredAttribute {
 | |
|             get { return hasRequiredAttribute; }
 | |
|             set { hasRequiredAttribute = value; }
 | |
|         }
 | |
| 
 | |
|         internal ContentValidator ContentValidator {
 | |
|             get { return contentValidator;}
 | |
|             set { contentValidator = value;}
 | |
|         }
 | |
| 
 | |
|         internal XmlSchemaAnyAttribute AnyAttribute {
 | |
|             get { return anyAttribute; }
 | |
|             set { anyAttribute = value; }
 | |
|         }
 | |
| 
 | |
|         internal CompiledIdentityConstraint[] Constraints {
 | |
|             get { return constraints; }
 | |
|             set { constraints = value; }
 | |
|         }
 | |
|         
 | |
|         internal XmlSchemaElement SchemaElement {
 | |
|             get { return schemaElement;}
 | |
|             set { schemaElement = value;}
 | |
|         }
 | |
| #endif
 | |
|         // add a new SchemaAttDef to the SchemaElementDecl
 | |
|         internal void AddAttDef(SchemaAttDef attdef) {
 | |
|             attdefs.Add(attdef.Name, attdef);
 | |
| #if !SILVERLIGHT
 | |
|             if (attdef.Presence == SchemaDeclBase.Use.Required || attdef.Presence == SchemaDeclBase.Use.RequiredFixed) {
 | |
|                 hasRequiredAttribute = true;
 | |
|             }
 | |
| #endif
 | |
|             if (attdef.Presence == SchemaDeclBase.Use.Default || attdef.Presence == SchemaDeclBase.Use.Fixed) { //Not adding RequiredFixed here
 | |
|                 if (defaultAttdefs == null) {
 | |
|                     defaultAttdefs = new List<IDtdDefaultAttributeInfo>();
 | |
|                 }
 | |
|                 defaultAttdefs.Add(attdef);
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         /*
 | |
|          * Retrieves the attribute definition of the named attribute.
 | |
|          * @param name  The name of the attribute.
 | |
|          * @return  an attribute definition object; returns null if it is not found.
 | |
|          */
 | |
|         internal SchemaAttDef GetAttDef(XmlQualifiedName qname) {
 | |
|             SchemaAttDef attDef;
 | |
|             if (attdefs.TryGetValue(qname, out attDef)) {
 | |
|                 return attDef;
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         internal IList<IDtdDefaultAttributeInfo> DefaultAttDefs {
 | |
|             get { return defaultAttdefs; }
 | |
|         }
 | |
| 
 | |
| #if !SILVERLIGHT
 | |
|         internal Dictionary<XmlQualifiedName, SchemaAttDef> AttDefs {
 | |
|             get { return attdefs; }
 | |
|         }
 | |
| 
 | |
|         internal Dictionary<XmlQualifiedName, XmlQualifiedName> ProhibitedAttributes {
 | |
|             get { return prohibitedAttributes; }
 | |
|         }
 | |
| 
 | |
|         internal void CheckAttributes(Hashtable presence, bool standalone) {
 | |
|             foreach(SchemaAttDef attdef in attdefs.Values) {
 | |
|                 if (presence[attdef.Name] == null) {
 | |
|                     if (attdef.Presence == SchemaDeclBase.Use.Required) {
 | |
|                         throw new XmlSchemaException(Res.Sch_MissRequiredAttribute, attdef.Name.ToString());
 | |
|                     }
 | |
|                     else if (standalone && attdef.IsDeclaredInExternal && (attdef.Presence == SchemaDeclBase.Use.Default || attdef.Presence == SchemaDeclBase.Use.Fixed)) {
 | |
|                         throw new XmlSchemaException(Res.Sch_StandAlone, string.Empty);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| #endif
 | |
|     }
 | |
| }
 |