namespace Inspectron.Epson.Templates.Language; public enum TokenType { // Text content Text, // Styled text: #style1,style2# text # StyleStart, // #style1,style2# StyleEnd, // trailing # // Bindings: {path} or {path:format} Binding, // Separators DashSeparator, // --- EqualsSeparator, // === StarSeparator, // *** TildeSeparator, // ~~~ // Directives If, // @if condition ElseIf, // @elseif condition Else, // @else End, // @end Foreach, // @foreach item in collection Row, // @row EndRow, // @endrow Column, // |width| or |width,align| // Structural NewLine, EndOfFile } public record struct SourcePosition(int Line, int Column) { public override string ToString() => $"({Line}:{Column})"; } public record Token(TokenType Type, string Value, SourcePosition Position) { public static Token Eof(int line) => new(TokenType.EndOfFile, string.Empty, new SourcePosition(line, 0)); }