File: System\Configuration\ConfigXmlReader.cs
Web Access
Project: src\src\libraries\System.Configuration.ConfigurationManager\src\System.Configuration.ConfigurationManager.csproj (System.Configuration.ConfigurationManager)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Configuration.Internal;
using System.Diagnostics;
using System.IO;
using System.Xml;
 
namespace System.Configuration
{
    internal sealed class ConfigXmlReader : XmlTextReader, IConfigErrorInfo
    {
        private readonly string _filename;
 
        // Used in a decrypted configuration section to locate
        // the line where the ecnrypted section begins.
        private readonly bool _lineNumberIsConstant;
        private readonly int _lineOffset;
 
        internal ConfigXmlReader(string rawXml, string filename, int lineOffset) :
            this(rawXml, filename, lineOffset, false)
        { }
 
        internal ConfigXmlReader(string rawXml, string filename, int lineOffset, bool lineNumberIsConstant) :
            base(new StringReader(rawXml))
        {
            RawXml = rawXml;
            _filename = filename;
            _lineOffset = lineOffset;
            _lineNumberIsConstant = lineNumberIsConstant;
 
            Debug.Assert(!_lineNumberIsConstant || (_lineOffset > 0),
                "!_lineNumberIsConstant || _lineOffset > 0");
        }
 
        internal string RawXml { get; }
 
        int IConfigErrorInfo.LineNumber
        {
            get
            {
                if (_lineNumberIsConstant) return _lineOffset;
                if (_lineOffset > 0) return LineNumber + (_lineOffset - 1);
                return LineNumber;
            }
        }
 
        string IConfigErrorInfo.Filename => _filename;
 
        internal ConfigXmlReader Clone()
        {
            return new ConfigXmlReader(RawXml, _filename, _lineOffset, _lineNumberIsConstant);
        }
    }
}