typst.xml

  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="&lt;[a-zA-Z_][a-zA-Z0-9_-]*&gt;"><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~/%#&amp;=\&#x27;,;.+?]*"><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="((?![*_$`&lt;@\\#\] ]|https?://).)+"><token type="Text"/></rule>
 53    </state>
 54    <state name="math">
 55      <rule><include state="comment"/></rule>
 56      <rule pattern="(\\_|\\\^|\\\&amp;)"><token type="Text"/></rule>
 57      <rule pattern="(_|\^|\&amp;|;)"><token type="Punctuation"/></rule>
 58      <rule pattern="(\+|/|=|\[\||\|\]|\|\||\*|:=|::=|\.\.\.|&#x27;|\-|=:|!=|&gt;&gt;|&gt;=|&gt;&gt;&gt;|&lt;&lt;|&lt;=|&lt;&lt;&lt;|\-&gt;|\|\-&gt;|=&gt;|\|=&gt;|==&gt;|\-\-&gt;|\~\~&gt;|\~&gt;|&gt;\-&gt;|\-&gt;&gt;|&lt;\-|&lt;==|&lt;\-\-|&lt;\~\~|&lt;\~|&lt;\-&lt;|&lt;&lt;\-|&lt;\-&gt;|&lt;=&gt;|&lt;==&gt;|&lt;\-\-&gt;|&gt;|&lt;|\~|:|\|)"><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="&quot;[^&quot;]*&quot;"><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="&quot;[^&quot;]*&quot;"><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="=&gt;|&lt;=|==|!=|&gt;|&lt;|-=|\+=|\*=|/=|\+|-|\\|\*"><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