1<lexer>
  2  <config>
  3    <name>Turtle</name>
  4    <alias>turtle</alias>
  5    <filename>*.ttl</filename>
  6    <mime_type>text/turtle</mime_type>
  7    <mime_type>application/x-turtle</mime_type>
  8    <case_insensitive>true</case_insensitive>
  9    <not_multiline>true</not_multiline>
 10  </config>
 11  <rules>
 12    <state name="triple-double-quoted-string">
 13      <rule pattern=""""">
 14        <token type="LiteralString"/>
 15        <push state="end-of-string"/>
 16      </rule>
 17      <rule pattern="[^\\]+">
 18        <token type="LiteralString"/>
 19      </rule>
 20      <rule pattern="\\">
 21        <token type="LiteralString"/>
 22        <push state="string-escape"/>
 23      </rule>
 24    </state>
 25    <state name="single-double-quoted-string">
 26      <rule pattern=""">
 27        <token type="LiteralString"/>
 28        <push state="end-of-string"/>
 29      </rule>
 30      <rule pattern="[^"\\\n]+">
 31        <token type="LiteralString"/>
 32      </rule>
 33      <rule pattern="\\">
 34        <token type="LiteralString"/>
 35        <push state="string-escape"/>
 36      </rule>
 37    </state>
 38    <state name="triple-single-quoted-string">
 39      <rule pattern="'''">
 40        <token type="LiteralString"/>
 41        <push state="end-of-string"/>
 42      </rule>
 43      <rule pattern="[^\\]+">
 44        <token type="LiteralString"/>
 45      </rule>
 46      <rule pattern="\\">
 47        <token type="LiteralString"/>
 48        <push state="string-escape"/>
 49      </rule>
 50    </state>
 51    <state name="single-single-quoted-string">
 52      <rule pattern="'">
 53        <token type="LiteralString"/>
 54        <push state="end-of-string"/>
 55      </rule>
 56      <rule pattern="[^'\\\n]+">
 57        <token type="LiteralString"/>
 58      </rule>
 59      <rule pattern="\\">
 60        <token type="LiteralString"/>
 61        <push state="string-escape"/>
 62      </rule>
 63    </state>
 64    <state name="string-escape">
 65      <rule pattern=".">
 66        <token type="LiteralString"/>
 67        <pop depth="1"/>
 68      </rule>
 69    </state>
 70    <state name="end-of-string">
 71      <rule pattern="(@)([a-z]+(:?-[a-z0-9]+)*)">
 72        <bygroups>
 73          <token type="Operator"/>
 74          <token type="GenericEmph"/>
 75          <token type="GenericEmph"/>
 76        </bygroups>
 77        <pop depth="2"/>
 78      </rule>
 79      <rule pattern="(\^\^)(<[^<>"{}|^`\\\x00-\x20]*>)">
 80        <bygroups>
 81          <token type="Operator"/>
 82          <token type="GenericEmph"/>
 83        </bygroups>
 84        <pop depth="2"/>
 85      </rule>
 86      <rule pattern="(\^\^)((?:[a-z][\w-]*)?\:)([a-z][\w-]*)">
 87        <bygroups>
 88          <token type="Operator"/>
 89          <token type="GenericEmph"/>
 90          <token type="GenericEmph"/>
 91        </bygroups>
 92        <pop depth="2"/>
 93      </rule>
 94      <rule>
 95        <pop depth="2"/>
 96      </rule>
 97    </state>
 98    <state name="root">
 99      <rule pattern="\s+">
100        <token type="TextWhitespace"/>
101      </rule>
102      <rule pattern="(@base|BASE)(\s+)(<[^<>"{}|^`\\\x00-\x20]*>)(\s*)(\.?)">
103        <bygroups>
104          <token type="Keyword"/>
105          <token type="TextWhitespace"/>
106          <token type="NameVariable"/>
107          <token type="TextWhitespace"/>
108          <token type="Punctuation"/>
109        </bygroups>
110      </rule>
111      <rule pattern="(@prefix|PREFIX)(\s+)((?:[a-z][\w-]*)?\:)(\s+)(<[^<>"{}|^`\\\x00-\x20]*>)(\s*)(\.?)">
112        <bygroups>
113          <token type="Keyword"/>
114          <token type="TextWhitespace"/>
115          <token type="NameNamespace"/>
116          <token type="TextWhitespace"/>
117          <token type="NameVariable"/>
118          <token type="TextWhitespace"/>
119          <token type="Punctuation"/>
120        </bygroups>
121      </rule>
122      <rule pattern="(?<=\s)a(?=\s)">
123        <token type="KeywordType"/>
124      </rule>
125      <rule pattern="(<[^<>"{}|^`\\\x00-\x20]*>)">
126        <token type="NameVariable"/>
127      </rule>
128      <rule pattern="((?:[a-z][\w-]*)?\:)([a-z][\w-]*)">
129        <bygroups>
130          <token type="NameNamespace"/>
131          <token type="NameTag"/>
132        </bygroups>
133      </rule>
134      <rule pattern="#[^\n]+">
135        <token type="Comment"/>
136      </rule>
137      <rule pattern="\b(true|false)\b">
138        <token type="Literal"/>
139      </rule>
140      <rule pattern="[+\-]?\d*\.\d+">
141        <token type="LiteralNumberFloat"/>
142      </rule>
143      <rule pattern="[+\-]?\d*(:?\.\d+)?E[+\-]?\d+">
144        <token type="LiteralNumberFloat"/>
145      </rule>
146      <rule pattern="[+\-]?\d+">
147        <token type="LiteralNumberInteger"/>
148      </rule>
149      <rule pattern="[\[\](){}.;,:^]">
150        <token type="Punctuation"/>
151      </rule>
152      <rule pattern=""""">
153        <token type="LiteralString"/>
154        <push state="triple-double-quoted-string"/>
155      </rule>
156      <rule pattern=""">
157        <token type="LiteralString"/>
158        <push state="single-double-quoted-string"/>
159      </rule>
160      <rule pattern="'''">
161        <token type="LiteralString"/>
162        <push state="triple-single-quoted-string"/>
163      </rule>
164      <rule pattern="'">
165        <token type="LiteralString"/>
166        <push state="single-single-quoted-string"/>
167      </rule>
168    </state>
169  </rules>
170</lexer>