1 //------------------------------------------------------------------------------
2 // <copyright file="SchemaEntity.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
7 
8 namespace System.Xml.Schema {
9 
10     using System;
11     using System.Diagnostics;
12 
13     internal sealed class SchemaEntity : IDtdEntityInfo {
14         private XmlQualifiedName qname;      // Name of entity
15         private String url;                  // Url for external entity (system id)
16         private String pubid;                // Pubid for external entity
17         private String text;                 // Text for internal entity
18         private XmlQualifiedName  ndata = XmlQualifiedName.Empty; // NDATA identifier
19         private int    lineNumber;           // line number
20         private int    linePosition;         // character postion
21         private bool   isParameter;          // parameter entity flag
22         private bool   isExternal;           // external entity flag
23         private bool parsingInProgress;      // whether entity is being parsed (DtdParser infinite recursion check)
24         private bool isDeclaredInExternal; // declared in external markup or not
25         private string baseURI;
26         private string declaredURI;
27 
28 //
29 // Constructor
30 //
SchemaEntity(XmlQualifiedName qname, bool isParameter)31         internal SchemaEntity(XmlQualifiedName qname, bool isParameter) {
32             this.qname = qname;
33             this.isParameter = isParameter;
34         }
35 
36 //
37 // IDtdEntityInfo interface
38 //
39 #region IDtdEntityInfo Members
40 
41         string IDtdEntityInfo.Name {
42             get { return this.Name.Name; }
43         }
44 
45         bool IDtdEntityInfo.IsExternal {
46             get { return ((SchemaEntity)this).IsExternal;}
47         }
48 
49         bool IDtdEntityInfo.IsDeclaredInExternal {
50             get { return this.DeclaredInExternal; }
51         }
52 
53         bool IDtdEntityInfo.IsUnparsedEntity {
54             get { return !this.NData.IsEmpty; }
55         }
56 
57         bool IDtdEntityInfo.IsParameterEntity {
58             get { return isParameter; }
59         }
60 
61         string IDtdEntityInfo.BaseUriString {
62             get { return this.BaseURI; }
63         }
64 
65         string IDtdEntityInfo.DeclaredUriString {
66             get { return this.DeclaredURI; }
67         }
68 
69         string IDtdEntityInfo.SystemId {
70             get { return this.Url; }
71         }
72 
73         string IDtdEntityInfo.PublicId {
74             get { return this.Pubid; }
75         }
76 
77         string IDtdEntityInfo.Text {
78             get { return ((SchemaEntity)this).Text; }
79         }
80 
81         int IDtdEntityInfo.LineNumber {
82             get { return this.Line; }
83         }
84 
85         int IDtdEntityInfo.LinePosition {
86             get { return this.Pos; }
87         }
88 
89 #endregion
90 
91 //
92 // Internal methods and properties
93 //
94 #if !SILVERLIGHT
IsPredefinedEntity(String n)95         internal static bool IsPredefinedEntity(String n) {
96             return(n == "lt" ||
97                    n == "gt" ||
98                    n == "amp" ||
99                    n == "apos" ||
100                    n == "quot");
101         }
102 #endif
103 
104         internal XmlQualifiedName Name {
105             get { return qname; }
106         }
107 
108         internal String Url {
109             get { return url;}
110             set { url = value; isExternal = true;}
111         }
112 
113         internal String Pubid {
114             get { return pubid;}
115             set { pubid = value;}
116         }
117 
118         internal bool IsExternal {
119             get { return isExternal; }
120             set { isExternal = value; }
121         }
122 
123         internal bool DeclaredInExternal {
124             get { return isDeclaredInExternal; }
125             set { isDeclaredInExternal = value; }
126         }
127 
128         internal XmlQualifiedName NData {
129             get { return ndata;}
130             set { ndata = value;}
131         }
132 
133         internal String Text {
134             get { return text;}
135             set { text = value; isExternal = false;}
136         }
137 
138         internal int Line {
139             get { return lineNumber;}
140             set { lineNumber = value;}
141         }
142 
143         internal int Pos {
144             get { return linePosition;}
145             set { linePosition = value;}
146         }
147 
148         internal String BaseURI {
149             get { return (baseURI == null) ? String.Empty : baseURI; }
150             set { baseURI = value; }
151         }
152 
153         internal bool ParsingInProgress {
154             get { return parsingInProgress; }
155             set { parsingInProgress = value; }
156         }
157 
158         internal String DeclaredURI {
159             get { return (declaredURI == null) ? String.Empty : declaredURI; }
160             set { declaredURI = value; }
161         }
162     };
163 
164 }
165