using DOM.DSL.Contracts; namespace DOM.DSL.Tokens { /// /// Абстрактная единица шаблона /// public abstract class TToken : TCloneable { public abstract TToken Clone(); /// /// Копия с установкой NextToken в null, для предотвращения циклических расчетов /// /// public abstract TToken CloneLocal(); public TElementToken AsElementToken() => this as TElementToken; public TFunctionToken AsFunctionToken() => this as TFunctionToken; public TTextToken AsTextToken() => this as TTextToken; public TBlockToken AsBlockToken() => this as TBlockToken; public TPropertyToken AsPropertyToken() => this as TPropertyToken; public TSystemToken AsSystemToken() => this as TSystemToken; } }