1<lexer>
  2  <config>
  3    <name>Hexdump</name>
  4    <alias>hexdump</alias>
  5  </config>
  6  <rules>
  7    <state name="offset">
  8      <rule pattern="^([0-9A-Ha-h]+)(:)">
  9        <bygroups>
 10          <token type="NameLabel"/>
 11          <token type="Punctuation"/>
 12        </bygroups>
 13        <push state="offset-mode"/>
 14      </rule>
 15      <rule pattern="^[0-9A-Ha-h]+">
 16        <token type="NameLabel"/>
 17      </rule>
 18    </state>
 19    <state name="offset-mode">
 20      <rule pattern="\s">
 21        <token type="Text"/>
 22        <pop depth="1"/>
 23      </rule>
 24      <rule pattern="[0-9A-Ha-h]+">
 25        <token type="NameLabel"/>
 26      </rule>
 27      <rule pattern=":">
 28        <token type="Punctuation"/>
 29      </rule>
 30    </state>
 31    <state name="piped-strings">
 32      <rule pattern="\n">
 33        <token type="Text"/>
 34      </rule>
 35      <rule>
 36        <include state="offset"/>
 37      </rule>
 38      <rule pattern="[0-9A-Ha-h]{2}">
 39        <token type="LiteralNumberHex"/>
 40      </rule>
 41      <rule pattern="(\s{2,3})(\|)(.{1,16})(\|)$">
 42        <bygroups>
 43          <token type="Text"/>
 44          <token type="Punctuation"/>
 45          <token type="LiteralString"/>
 46          <token type="Punctuation"/>
 47        </bygroups>
 48      </rule>
 49      <rule pattern="\s">
 50        <token type="Text"/>
 51      </rule>
 52      <rule pattern="^\*">
 53        <token type="Punctuation"/>
 54      </rule>
 55    </state>
 56    <state name="bracket-strings">
 57      <rule pattern="\n">
 58        <token type="Text"/>
 59      </rule>
 60      <rule>
 61        <include state="offset"/>
 62      </rule>
 63      <rule pattern="[0-9A-Ha-h]{2}">
 64        <token type="LiteralNumberHex"/>
 65      </rule>
 66      <rule pattern="(\s{2,3})(\>)(.{1,16})(\<)$">
 67        <bygroups>
 68          <token type="Text"/>
 69          <token type="Punctuation"/>
 70          <token type="LiteralString"/>
 71          <token type="Punctuation"/>
 72        </bygroups>
 73      </rule>
 74      <rule pattern="\s">
 75        <token type="Text"/>
 76      </rule>
 77      <rule pattern="^\*">
 78        <token type="Punctuation"/>
 79      </rule>
 80    </state>
 81    <state name="nonpiped-strings">
 82      <rule pattern="\n">
 83        <token type="Text"/>
 84      </rule>
 85      <rule>
 86        <include state="offset"/>
 87      </rule>
 88      <rule pattern="([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})">
 89        <bygroups>
 90          <token type="LiteralNumberHex"/>
 91          <token type="Punctuation"/>
 92          <token type="LiteralNumberHex"/>
 93        </bygroups>
 94      </rule>
 95      <rule pattern="[0-9A-Ha-h]{2}">
 96        <token type="LiteralNumberHex"/>
 97      </rule>
 98      <rule pattern="(\s{19,})(.{1,20}?)$">
 99        <bygroups>
100          <token type="Text"/>
101          <token type="LiteralString"/>
102        </bygroups>
103      </rule>
104      <rule pattern="(\s{2,3})(.{1,20})$">
105        <bygroups>
106          <token type="Text"/>
107          <token type="LiteralString"/>
108        </bygroups>
109      </rule>
110      <rule pattern="\s">
111        <token type="Text"/>
112      </rule>
113      <rule pattern="^\*">
114        <token type="Punctuation"/>
115      </rule>
116    </state>
117    <state name="root">
118      <rule pattern="\n">
119        <token type="Text"/>
120      </rule>
121      <rule>
122        <include state="offset"/>
123      </rule>
124      <rule pattern="([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})">
125        <bygroups>
126          <token type="LiteralNumberHex"/>
127          <token type="Punctuation"/>
128          <token type="LiteralNumberHex"/>
129        </bygroups>
130      </rule>
131      <rule pattern="[0-9A-Ha-h]{2}">
132        <token type="LiteralNumberHex"/>
133      </rule>
134      <rule pattern="(\s{2,3})(\>)(.{16})(\<)$">
135        <bygroups>
136          <token type="Text"/>
137          <token type="Punctuation"/>
138          <token type="LiteralString"/>
139          <token type="Punctuation"/>
140        </bygroups>
141        <push state="bracket-strings"/>
142      </rule>
143      <rule pattern="(\s{2,3})(\|)(.{16})(\|)$">
144        <bygroups>
145          <token type="Text"/>
146          <token type="Punctuation"/>
147          <token type="LiteralString"/>
148          <token type="Punctuation"/>
149        </bygroups>
150        <push state="piped-strings"/>
151      </rule>
152      <rule pattern="(\s{2,3})(\>)(.{1,15})(\<)$">
153        <bygroups>
154          <token type="Text"/>
155          <token type="Punctuation"/>
156          <token type="LiteralString"/>
157          <token type="Punctuation"/>
158        </bygroups>
159      </rule>
160      <rule pattern="(\s{2,3})(\|)(.{1,15})(\|)$">
161        <bygroups>
162          <token type="Text"/>
163          <token type="Punctuation"/>
164          <token type="LiteralString"/>
165          <token type="Punctuation"/>
166        </bygroups>
167      </rule>
168      <rule pattern="(\s{2,3})(.{1,15})$">
169        <bygroups>
170          <token type="Text"/>
171          <token type="LiteralString"/>
172        </bygroups>
173      </rule>
174      <rule pattern="(\s{2,3})(.{16}|.{20})$">
175        <bygroups>
176          <token type="Text"/>
177          <token type="LiteralString"/>
178        </bygroups>
179        <push state="nonpiped-strings"/>
180      </rule>
181      <rule pattern="\s">
182        <token type="Text"/>
183      </rule>
184      <rule pattern="^\*">
185        <token type="Punctuation"/>
186      </rule>
187    </state>
188  </rules>
189</lexer>