1<lexer>
  2  <config>
  3    <name>scdoc</name>
  4    <alias>scdoc</alias>
  5    <filename>*.scd</filename>
  6    <filename>*.scdoc</filename>
  7  </config>
  8  <rules>
  9    <state name="root">
 10      <rule pattern="(?m)^; .*$">
 11        <token type="Comment"/>
 12      </rule>
 13      <rule pattern="(?m)^([A-Z][A-Z0-9_-]*)(\()([0-9]+)(\))(.*)$">
 14        <bygroups>
 15          <token type="NameFunction"/>
 16          <token type="Punctuation"/>
 17          <token type="LiteralNumber"/>
 18          <token type="Punctuation"/>
 19          <token type="Text"/>
 20        </bygroups>
 21      </rule>
 22      <rule pattern="(?m)^(##)( +)(.+)$">
 23        <bygroups>
 24          <token type="GenericSubheading"/>
 25          <token type="Text"/>
 26          <token type="Text"/>
 27        </bygroups>
 28      </rule>
 29      <rule pattern="(?m)^(#)( +)(.+)$">
 30        <bygroups>
 31          <token type="GenericHeading"/>
 32          <token type="Text"/>
 33          <token type="GenericStrong"/>
 34        </bygroups>
 35      </rule>
 36      <rule pattern="(?m)^```$">
 37        <token type="LiteralStringBacktick"/>
 38        <push state="literal_block"/>
 39      </rule>
 40      <rule pattern="(?m)^(\s*)(- )(.*)$">
 41        <bygroups>
 42          <token type="Text"/>
 43          <token type="Keyword"/>
 44          <usingself state="inline"/>
 45        </bygroups>
 46      </rule>
 47      <rule pattern="(?m)^(\s*)(\. )(.*)$">
 48        <bygroups>
 49          <token type="Text"/>
 50          <token type="Keyword"/>
 51          <usingself state="inline"/>
 52        </bygroups>
 53      </rule>
 54      <rule pattern="(?m)^\t[^ \t].*$">
 55        <token type="LiteralStringBacktick"/>
 56      </rule>
 57      <rule pattern="(?m)^\t+$">
 58        <token type="LiteralStringBacktick"/>
 59      </rule>
 60      <rule pattern="(?m)^(\s*)([|:\[\]].*)$">
 61        <bygroups>
 62          <token type="Text"/>
 63          <token type="Punctuation"/>
 64        </bygroups>
 65      </rule>
 66      <rule pattern="(?m)^(.*)(\+\+)$">
 67        <bygroups>
 68          <usingself state="inline"/>
 69          <token type="Operator"/>
 70        </bygroups>
 71      </rule>
 72      <rule>
 73        <include state="inline"/>
 74      </rule>
 75    </state>
 76    <state name="literal_block">
 77      <rule pattern="(?m)^```$">
 78        <token type="LiteralStringBacktick"/>
 79        <pop depth="1"/>
 80      </rule>
 81      <rule pattern=".*\n?">
 82        <token type="LiteralStringBacktick"/>
 83      </rule>
 84    </state>
 85    <state name="inline">
 86      <rule pattern="\\.">
 87        <token type="LiteralStringEscape"/>
 88      </rule>
 89      <rule pattern="(\*)([^*\n]+)(\*)">
 90        <bygroups>
 91          <token type="Punctuation"/>
 92          <token type="GenericStrong"/>
 93          <token type="Punctuation"/>
 94        </bygroups>
 95      </rule>
 96      <rule pattern="(_)([^_\n]+?)(_)((?=\W|\n|$))">
 97        <bygroups>
 98          <token type="Punctuation"/>
 99          <token type="GenericUnderline"/>
100          <token type="Punctuation"/>
101          <token type="Text"/>
102        </bygroups>
103      </rule>
104      <rule pattern="[^*_\\\n]+">
105        <token type="Text"/>
106      </rule>
107      <rule pattern="\n">
108        <token type="Text"/>
109      </rule>
110      <rule pattern=".">
111        <token type="Text"/>
112      </rule>
113    </state>
114  </rules>
115</lexer>