using DOM.DSL.Contracts; namespace DOM.DSL.Tokens { /// /// Abstract token /// public abstract class TToken : TCloneable { public abstract TToken Clone(); /// /// Copying token with set NextToken to null, to break cycle /// /// 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; } }