1
2<lexer>
3 <config>
4 <name>Typst</name>
5 <alias>typst</alias>
6 <filename>*.typ</filename>
7 <mime_type>text/x-typst</mime_type>
8 </config>
9 <rules>
10 <state name="root">
11 <rule><include state="markup"/></rule>
12 </state>
13 <state name="into_code">
14 <rule pattern="(\#let|\#set|\#show)\b"><token type="KeywordDeclaration"/><push state="inline_code"/></rule>
15 <rule pattern="(\#import|\#include)\b"><token type="KeywordNamespace"/><push state="inline_code"/></rule>
16 <rule pattern="(\#if|\#for|\#while|\#export)\b"><token type="KeywordReserved"/><push state="inline_code"/></rule>
17 <rule pattern="#\{"><token type="Punctuation"/><push state="code"/></rule>
18 <rule pattern="#\("><token type="Punctuation"/><push state="code"/></rule>
19 <rule pattern="(#[a-zA-Z_][a-zA-Z0-9_-]*)(\[)"><bygroups><token type="NameFunction"/><token type="Punctuation"/></bygroups><push state="markup"/></rule>
20 <rule pattern="(#[a-zA-Z_][a-zA-Z0-9_-]*)(\()"><bygroups><token type="NameFunction"/><token type="Punctuation"/></bygroups><push state="code"/></rule>
21 <rule pattern="(\#true|\#false|\#none|\#auto)\b"><token type="KeywordConstant"/></rule>
22 <rule pattern="#[a-zA-Z_][a-zA-Z0-9_]*"><token type="NameVariable"/></rule>
23 <rule pattern="#0x[0-9a-fA-F]+"><token type="LiteralNumberHex"/></rule>
24 <rule pattern="#0b[01]+"><token type="LiteralNumberBin"/></rule>
25 <rule pattern="#0o[0-7]+"><token type="LiteralNumberOct"/></rule>
26 <rule pattern="#[0-9]+[\.e][0-9]+"><token type="LiteralNumberFloat"/></rule>
27 <rule pattern="#[0-9]+"><token type="LiteralNumberInteger"/></rule>
28 </state>
29 <state name="markup">
30 <rule><include state="comment"/></rule>
31 <rule pattern="^\s*=+.*$"><token type="GenericHeading"/></rule>
32 <rule pattern="[*][^*]*[*]"><token type="GenericStrong"/></rule>
33 <rule pattern="_[^_]*_"><token type="GenericEmph"/></rule>
34 <rule pattern="\$"><token type="Punctuation"/><push state="math"/></rule>
35 <rule pattern="`[^`]*`"><token type="LiteralStringBacktick"/></rule>
36 <rule pattern="^(\s*)(-)(\s+)"><bygroups><token type="TextWhitespace"/><token type="Punctuation"/><token type="TextWhitespace"/></bygroups></rule>
37 <rule pattern="^(\s*)(\+)(\s+)"><bygroups><token type="TextWhitespace"/><token type="Punctuation"/><token type="TextWhitespace"/></bygroups></rule>
38 <rule pattern="^(\s*)([0-9]+\.)"><bygroups><token type="TextWhitespace"/><token type="Punctuation"/></bygroups></rule>
39 <rule pattern="^(\s*)(/)(\s+)([^:]+)(:)"><bygroups><token type="TextWhitespace"/><token type="Punctuation"/><token type="TextWhitespace"/><token type="NameVariable"/><token type="Punctuation"/></bygroups></rule>
40 <rule pattern="<[a-zA-Z_][a-zA-Z0-9_-]*>"><token type="NameLabel"/></rule>
41 <rule pattern="@[a-zA-Z_][a-zA-Z0-9_-]*"><token type="NameLabel"/></rule>
42 <rule pattern="\\#"><token type="Text"/></rule>
43 <rule><include state="into_code"/></rule>
44 <rule pattern="```(?:.|\n)*?```"><token type="LiteralStringBacktick"/></rule>
45 <rule pattern="https?://[0-9a-zA-Z~/%#&=\',;.+?]*"><token type="GenericEmph"/></rule>
46 <rule pattern="(\-\-\-|\\|\~|\-\-|\.\.\.)\B"><token type="Punctuation"/></rule>
47 <rule pattern="\\\["><token type="Punctuation"/></rule>
48 <rule pattern="\\\]"><token type="Punctuation"/></rule>
49 <rule pattern="\["><token type="Punctuation"/><push/></rule>
50 <rule pattern="\]"><token type="Punctuation"/><pop depth="1"/></rule>
51 <rule pattern="[ \t]+\n?|\n"><token type="TextWhitespace"/></rule>
52 <rule pattern="((?![*_$`<@\\#\] ]|https?://).)+"><token type="Text"/></rule>
53 </state>
54 <state name="math">
55 <rule><include state="comment"/></rule>
56 <rule pattern="(\\_|\\\^|\\\&)"><token type="Text"/></rule>
57 <rule pattern="(_|\^|\&|;)"><token type="Punctuation"/></rule>
58 <rule pattern="(\+|/|=|\[\||\|\]|\|\||\*|:=|::=|\.\.\.|'|\-|=:|!=|>>|>=|>>>|<<|<=|<<<|\->|\|\->|=>|\|=>|==>|\-\->|\~\~>|\~>|>\->|\->>|<\-|<==|<\-\-|<\~\~|<\~|<\-<|<<\-|<\->|<=>|<==>|<\-\->|>|<|\~|:|\|)"><token type="Operator"/></rule>
59 <rule pattern="\\"><token type="Punctuation"/></rule>
60 <rule pattern="\\\$"><token type="Punctuation"/></rule>
61 <rule pattern="\$"><token type="Punctuation"/><pop depth="1"/></rule>
62 <rule><include state="into_code"/></rule>
63 <rule pattern="([a-zA-Z][a-zA-Z0-9-]*)(\s*)(\()"><bygroups><token type="NameFunction"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups></rule>
64 <rule pattern="([a-zA-Z][a-zA-Z0-9-]*)(:)"><bygroups><token type="NameVariable"/><token type="Punctuation"/></bygroups></rule>
65 <rule pattern="([a-zA-Z][a-zA-Z0-9-]*)"><token type="NameVariable"/></rule>
66 <rule pattern="[0-9]+(\.[0-9]+)?"><token type="LiteralNumber"/></rule>
67 <rule pattern="\.{1,3}|\(|\)|,|\{|\}"><token type="Punctuation"/></rule>
68 <rule pattern=""[^"]*""><token type="LiteralStringDouble"/></rule>
69 <rule pattern="[ \t\n]+"><token type="TextWhitespace"/></rule>
70 </state>
71 <state name="comment">
72 <rule pattern="//.*$"><token type="CommentSingle"/></rule>
73 <rule pattern="/[*](.|\n)*?[*]/"><token type="CommentMultiline"/></rule>
74 </state>
75 <state name="code">
76 <rule><include state="comment"/></rule>
77 <rule pattern="\["><token type="Punctuation"/><push state="markup"/></rule>
78 <rule pattern="\(|\{"><token type="Punctuation"/><push state="code"/></rule>
79 <rule pattern="\)|\}"><token type="Punctuation"/><pop depth="1"/></rule>
80 <rule pattern=""[^"]*""><token type="LiteralStringDouble"/></rule>
81 <rule pattern=",|\.{1,2}"><token type="Punctuation"/></rule>
82 <rule pattern="="><token type="Operator"/></rule>
83 <rule pattern="(and|or|not)\b"><token type="OperatorWord"/></rule>
84 <rule pattern="=>|<=|==|!=|>|<|-=|\+=|\*=|/=|\+|-|\\|\*"><token type="Operator"/></rule>
85 <rule pattern="([a-zA-Z_][a-zA-Z0-9_-]*)(:)"><bygroups><token type="NameVariable"/><token type="Punctuation"/></bygroups></rule>
86 <rule pattern="([a-zA-Z_][a-zA-Z0-9_-]*)(\()"><bygroups><token type="NameFunction"/><token type="Punctuation"/></bygroups><push state="code"/></rule>
87 <rule pattern="(as|break|export|continue|else|for|if|in|return|while)\b"><token type="KeywordReserved"/></rule>
88 <rule pattern="(import|include)\b"><token type="KeywordNamespace"/></rule>
89 <rule pattern="(auto|none|true|false)\b"><token type="KeywordConstant"/></rule>
90 <rule pattern="([0-9.]+)(mm|pt|cm|in|em|fr|%)"><bygroups><token type="LiteralNumber"/><token type="KeywordReserved"/></bygroups></rule>
91 <rule pattern="0x[0-9a-fA-F]+"><token type="LiteralNumberHex"/></rule>
92 <rule pattern="0b[01]+"><token type="LiteralNumberBin"/></rule>
93 <rule pattern="0o[0-7]+"><token type="LiteralNumberOct"/></rule>
94 <rule pattern="[0-9]+[\.e][0-9]+"><token type="LiteralNumberFloat"/></rule>
95 <rule pattern="[0-9]+"><token type="LiteralNumberInteger"/></rule>
96 <rule pattern="(let|set|show)\b"><token type="KeywordDeclaration"/></rule>
97 <rule pattern="([a-zA-Z_][a-zA-Z0-9_-]*)"><token type="NameVariable"/></rule>
98 <rule pattern="[ \t\n]+"><token type="TextWhitespace"/></rule>
99 <rule pattern=":"><token type="Punctuation"/></rule>
100 </state>
101 <state name="inline_code">
102 <rule pattern=";\b"><token type="Punctuation"/><pop depth="1"/></rule>
103 <rule pattern="\n"><token type="TextWhitespace"/><pop depth="1"/></rule>
104 <rule><include state="code"/></rule>
105 </state>
106 </rules>
107</lexer>
108