File: System\Xml\Schema\SchemaEntity.cs
Web Access
Project: src\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj (System.Private.Xml)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Diagnostics;
 
namespace System.Xml.Schema
{
    internal sealed class SchemaEntity : IDtdEntityInfo
    {
        private readonly XmlQualifiedName _qname;      // Name of entity
        private string? _url;                  // Url for external entity (system id)
        private string? _pubid;                // Pubid for external entity
        private string? _text;                 // Text for internal entity
        private XmlQualifiedName _ndata = XmlQualifiedName.Empty; // NDATA identifier
        private int _lineNumber;           // line number
        private int _linePosition;         // character position
        private readonly bool _isParameter;          // parameter entity flag
        private bool _isExternal;           // external entity flag
        private bool _parsingInProgress;      // whether entity is being parsed (DtdParser infinite recursion check)
        private bool _isDeclaredInExternal; // declared in external markup or not
        private string? _baseURI;
        private string? _declaredURI;
 
        //
        // Constructor
        //
        internal SchemaEntity(XmlQualifiedName qname, bool isParameter)
        {
            _qname = qname;
            _isParameter = isParameter;
        }
 
        //
        // IDtdEntityInfo interface
        //
        #region IDtdEntityInfo Members
 
        string IDtdEntityInfo.Name
        {
            get { return this.Name.Name; }
        }
 
        bool IDtdEntityInfo.IsExternal
        {
            get { return ((SchemaEntity)this).IsExternal; }
        }
 
        bool IDtdEntityInfo.IsDeclaredInExternal
        {
            get { return this.DeclaredInExternal; }
        }
 
        bool IDtdEntityInfo.IsUnparsedEntity
        {
            get { return !this.NData.IsEmpty; }
        }
 
        bool IDtdEntityInfo.IsParameterEntity
        {
            get { return _isParameter; }
        }
 
        string IDtdEntityInfo.BaseUriString
        {
            get { return this.BaseURI; }
        }
 
        string IDtdEntityInfo.DeclaredUriString
        {
            get { return this.DeclaredURI; }
        }
 
        string? IDtdEntityInfo.SystemId
        {
            get { return this.Url; }
        }
 
        string? IDtdEntityInfo.PublicId
        {
            get { return this.Pubid; }
        }
 
        string? IDtdEntityInfo.Text
        {
            get { return ((SchemaEntity)this).Text; }
        }
 
        int IDtdEntityInfo.LineNumber
        {
            get { return this.Line; }
        }
 
        int IDtdEntityInfo.LinePosition
        {
            get { return this.Pos; }
        }
 
        #endregion
 
        //
        // Internal methods and properties
        //
        internal static bool IsPredefinedEntity(string n)
        {
            return (n == "lt" ||
                   n == "gt" ||
                   n == "amp" ||
                   n == "apos" ||
                   n == "quot");
        }
 
        internal XmlQualifiedName Name
        {
            get { return _qname; }
        }
 
        internal string? Url
        {
            get { return _url; }
            set { _url = value; _isExternal = true; }
        }
 
        internal string? Pubid
        {
            get { return _pubid; }
            set { _pubid = value; }
        }
 
        internal bool IsExternal
        {
            get { return _isExternal; }
            set { _isExternal = value; }
        }
 
        internal bool DeclaredInExternal
        {
            get { return _isDeclaredInExternal; }
            set { _isDeclaredInExternal = value; }
        }
 
        internal XmlQualifiedName NData
        {
            get { return _ndata; }
            set { _ndata = value; }
        }
 
        internal string? Text
        {
            get { return _text; }
            set { _text = value; _isExternal = false; }
        }
 
        internal int Line
        {
            get { return _lineNumber; }
            set { _lineNumber = value; }
        }
 
        internal int Pos
        {
            get { return _linePosition; }
            set { _linePosition = value; }
        }
 
        internal string BaseURI
        {
            get { return _baseURI ?? string.Empty; }
            set { _baseURI = value; }
        }
 
        internal bool ParsingInProgress
        {
            get { return _parsingInProgress; }
            set { _parsingInProgress = value; }
        }
 
        internal string DeclaredURI
        {
            get { return _declaredURI ?? string.Empty; }
            set { _declaredURI = value; }
        }
    };
}