| using OfficeOpenXml.FormulaParsing.ExcelUtilities; | 
 | using OfficeOpenXml.FormulaParsing.Logging; | 
 |  | 
 | namespace OfficeOpenXml.FormulaParsing; | 
 |  | 
 | /// <summary> | 
 | /// Parsing context | 
 | /// </summary> | 
 | public class ParsingContext : IParsingLifetimeEventHandler { | 
 |   private ParsingContext() {} | 
 |  | 
 |   /// <summary> | 
 |   /// The <see cref="FormulaParser"/> of the current context. | 
 |   /// </summary> | 
 |   public FormulaParser Parser { get; set; } | 
 |  | 
 |   /// <summary> | 
 |   /// The <see cref="ExcelDataProvider"/> is an abstraction on top of | 
 |   /// Excel, in this case EPPlus. | 
 |   /// </summary> | 
 |   public ExcelDataProvider ExcelDataProvider { get; set; } | 
 |  | 
 |   /// <summary> | 
 |   /// Utility for handling addresses | 
 |   /// </summary> | 
 |   public RangeAddressFactory RangeAddressFactory { get; set; } | 
 |  | 
 |   /// <summary> | 
 |   /// <see cref="INameValueProvider"/> of the current context | 
 |   /// </summary> | 
 |   public INameValueProvider NameValueProvider { get; set; } | 
 |  | 
 |   /// <summary> | 
 |   /// Configuration | 
 |   /// </summary> | 
 |   public ParsingConfiguration Configuration { get; set; } | 
 |  | 
 |   /// <summary> | 
 |   /// Scopes, a scope represents the parsing of a cell or a value. | 
 |   /// </summary> | 
 |   public ParsingScopes Scopes { get; private set; } | 
 |  | 
 |   /// <summary> | 
 |   /// Returns true if a <see cref="IFormulaParserLogger"/> is attached to the parser. | 
 |   /// </summary> | 
 |   public bool Debug => Configuration.Logger != null; | 
 |  | 
 |   /// <summary> | 
 |   /// Factory method. | 
 |   /// </summary> | 
 |   /// <returns></returns> | 
 |   public static ParsingContext Create() { | 
 |     var context = new ParsingContext(); | 
 |     context.Configuration = ParsingConfiguration.Create(); | 
 |     context.Scopes = new(context); | 
 |     return context; | 
 |   } | 
 |  | 
 |   void IParsingLifetimeEventHandler.ParsingCompleted() {} | 
 | } |