|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using System.Text; | 
|  | using OfficeOpenXml.FormulaParsing.ExcelUtilities; | 
|  |  | 
|  | namespace OfficeOpenXml.FormulaParsing | 
|  | { | 
|  | /// <summary> | 
|  | /// Represents a parsing of a single input or workbook addrses. | 
|  | /// </summary> | 
|  | public class ParsingScope : IDisposable | 
|  | { | 
|  | private readonly ParsingScopes _parsingScopes; | 
|  |  | 
|  | public ParsingScope(ParsingScopes parsingScopes, RangeAddress address) | 
|  | : this(parsingScopes, null, address) | 
|  | { | 
|  | } | 
|  |  | 
|  | public ParsingScope(ParsingScopes parsingScopes, ParsingScope parent, RangeAddress address) | 
|  | { | 
|  | _parsingScopes = parsingScopes; | 
|  | Parent = parent; | 
|  | Address = address; | 
|  | ScopeId = Guid.NewGuid(); | 
|  | } | 
|  |  | 
|  | /// <summary> | 
|  | /// Id of the scope. | 
|  | /// </summary> | 
|  | public Guid ScopeId { get; private set; } | 
|  |  | 
|  | /// <summary> | 
|  | /// The calling scope. | 
|  | /// </summary> | 
|  | public ParsingScope Parent { get; private set; } | 
|  |  | 
|  | /// <summary> | 
|  | /// The address of the cell currently beeing parsed. | 
|  | /// </summary> | 
|  | public RangeAddress Address { get; private set; } | 
|  |  | 
|  | /// <summary> | 
|  | /// True if the current scope is a Subtotal function beeing executed. | 
|  | /// </summary> | 
|  | public bool IsSubtotal { get; set; } | 
|  |  | 
|  | public void Dispose() | 
|  | { | 
|  | _parsingScopes.KillScope(this); | 
|  | } | 
|  | } | 
|  | } |