1<lexer>
 2  <config>
 3    <name>Groff</name>
 4    <alias>groff</alias>
 5    <alias>nroff</alias>
 6    <alias>man</alias>
 7    <filename>*.[1-9]</filename>
 8    <filename>*.1p</filename>
 9    <filename>*.3pm</filename>
10    <filename>*.man</filename>
11    <mime_type>application/x-troff</mime_type>
12    <mime_type>text/troff</mime_type>
13  </config>
14  <rules>
15    <state name="request">
16      <rule pattern="\n">
17        <token type="Text"/>
18        <pop depth="1"/>
19      </rule>
20      <rule>
21        <include state="escapes"/>
22      </rule>
23      <rule pattern=""[^\n"]+"">
24        <token type="LiteralStringDouble"/>
25      </rule>
26      <rule pattern="\d+">
27        <token type="LiteralNumber"/>
28      </rule>
29      <rule pattern="\S+">
30        <token type="LiteralString"/>
31      </rule>
32      <rule pattern="\s+">
33        <token type="Text"/>
34      </rule>
35    </state>
36    <state name="root">
37      <rule pattern="(\.)(\w+)">
38        <bygroups>
39          <token type="Text"/>
40          <token type="Keyword"/>
41        </bygroups>
42        <push state="request"/>
43      </rule>
44      <rule pattern="\.">
45        <token type="Punctuation"/>
46        <push state="request"/>
47      </rule>
48      <rule pattern="[^\\\n]+">
49        <token type="Text"/>
50        <push state="textline"/>
51      </rule>
52      <rule>
53        <push state="textline"/>
54      </rule>
55    </state>
56    <state name="textline">
57      <rule>
58        <include state="escapes"/>
59      </rule>
60      <rule pattern="[^\\\n]+">
61        <token type="Text"/>
62      </rule>
63      <rule pattern="\n">
64        <token type="Text"/>
65        <pop depth="1"/>
66      </rule>
67    </state>
68    <state name="escapes">
69      <rule pattern="\\"[^\n]*">
70        <token type="Comment"/>
71      </rule>
72      <rule pattern="\\[fn]\w">
73        <token type="LiteralStringEscape"/>
74      </rule>
75      <rule pattern="\\\(.{2}">
76        <token type="LiteralStringEscape"/>
77      </rule>
78      <rule pattern="\\.\[.*\]">
79        <token type="LiteralStringEscape"/>
80      </rule>
81      <rule pattern="\\.">
82        <token type="LiteralStringEscape"/>
83      </rule>
84      <rule pattern="\\\n">
85        <token type="Text"/>
86        <push state="request"/>
87      </rule>
88    </state>
89  </rules>
90</lexer>