1<lexer>
2 <config>
3 <name>Protocol Buffer Text Format</name>
4 <alias>txtpb</alias>
5 <filename>*.txtpb</filename>
6 <filename>*.textproto</filename>
7 <filename>*.textpb</filename>
8 <filename>*.pbtxt</filename>
9 <mime_type>application/x-protobuf-text</mime_type>
10 <case_insensitive>false</case_insensitive>
11 <dot_all>false</dot_all>
12 <ensure_nl>true</ensure_nl>
13 </config>
14 <rules>
15 <state name="double-quote">
16 <rule pattern="\\[abfnrtv\\\?'"]">
17 <token type="LiteralStringEscape"/>
18 </rule>
19 <rule pattern="\\[0-7]{1,3}">
20 <token type="LiteralStringEscape"/>
21 </rule>
22 <rule pattern="\\x[0-9a-fA-F]{1,2}">
23 <token type="LiteralStringEscape"/>
24 </rule>
25 <rule pattern="\\u[0-9a-fA-F]{4}">
26 <token type="LiteralStringEscape"/>
27 </rule>
28 <rule pattern="\\U000[0-9a-fA-F]{5}">
29 <token type="LiteralStringEscape"/>
30 </rule>
31 <rule pattern="\\U0010[0-9a-fA-F]{4}">
32 <token type="LiteralStringEscape"/>
33 </rule>
34 <rule pattern="[^"\\]+">
35 <token type="LiteralStringDouble"/>
36 </rule>
37 <rule pattern=""">
38 <token type="LiteralStringDouble"/>
39 <pop depth="1"/>
40 </rule>
41 </state>
42
43 <state name="single-quote">
44 <rule pattern="\\[abfnrtv\\\?'"]">
45 <token type="LiteralStringEscape"/>
46 </rule>
47 <rule pattern="\\[0-7]{1,3}">
48 <token type="LiteralStringEscape"/>
49 </rule>
50 <rule pattern="\\x[0-9a-fA-F]{1,2}">
51 <token type="LiteralStringEscape"/>
52 </rule>
53 <rule pattern="\\u[0-9a-fA-F]{4}">
54 <token type="LiteralStringEscape"/>
55 </rule>
56 <rule pattern="\\U000[0-9a-fA-F]{5}">
57 <token type="LiteralStringEscape"/>
58 </rule>
59 <rule pattern="\\U0010[0-9a-fA-F]{4}">
60 <token type="LiteralStringEscape"/>
61 </rule>
62 <rule pattern="[^'\\]+">
63 <token type="LiteralStringSingle"/>
64 </rule>
65 <rule pattern="'">
66 <token type="LiteralStringSingle"/>
67 <pop depth="1"/>
68 </rule>
69 </state>
70
71 <state name="root">
72 <!-- Comments -->
73 <rule pattern="#.*\n">
74 <token type="CommentSingle"/>
75 </rule>
76
77 <!-- Whitespace -->
78 <rule pattern="[ \n\t\v\f\r]+">
79 <token type="Text"/>
80 </rule>
81
82 <!-- Operators -->
83 <rule pattern="-">
84 <token type="Operator" />
85 </rule>
86
87 <!-- Special float literals -->
88 <rule pattern="(?i)(?:inf|infinity)\b">
89 <token type="LiteralNumberFloat"/>
90 </rule>
91 <rule pattern="(?i)nan\b">
92 <token type="LiteralNumberFloat"/>
93 </rule>
94
95 <!-- Float literals with suffix (must come before decimal integers) -->
96 <rule pattern="(?:0|[1-9][0-9]*)[fF]">
97 <token type="LiteralNumberFloat"/>
98 </rule>
99
100 <!-- Float literals -->
101 <rule pattern="\.[0-9]+(?:[eE][+-]?[0-9]+)?[fF]?">
102 <token type="LiteralNumberFloat"/>
103 </rule>
104 <rule pattern="(?:0|[1-9][0-9]*)\.[0-9]*(?:[eE][+-]?[0-9]+)?[fF]?">
105 <token type="LiteralNumberFloat"/>
106 </rule>
107 <rule pattern="(?:0|[1-9][0-9]*)[eE][+-]?[0-9]+[fF]?">
108 <token type="LiteralNumberFloat"/>
109 </rule>
110
111 <!-- Hexadecimal integers -->
112 <rule pattern="0[xX][0-9a-fA-F]+">
113 <token type="LiteralNumberHex"/>
114 </rule>
115
116 <!-- Octal integers -->
117 <rule pattern="0[0-7]+">
118 <token type="LiteralNumberOct"/>
119 </rule>
120
121 <!-- Decimal integers -->
122 <rule pattern="(?:0|[1-9][0-9]*)">
123 <token type="LiteralNumberInteger"/>
124 </rule>
125
126 <!-- Boolean keywords -->
127 <rule pattern="\b(?:[Tt]rue|[Ff]alse|t|f)\b">
128 <token type="KeywordConstant"/>
129 </rule>
130
131 <!-- Strings -->
132 <rule pattern=""">
133 <token type="LiteralStringDouble"/>
134 <push state="double-quote"/>
135 </rule>
136 <rule pattern="'">
137 <token type="LiteralStringSingle"/>
138 <push state="single-quote"/>
139 </rule>
140
141 <!-- Qualified names (with dots) for field paths and type URLs -->
142 <rule pattern="[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)+">
143 <token type="NameNamespace"/>
144 </rule>
145
146 <!-- Field names and identifiers (including enum values) -->
147 <rule pattern="[a-zA-Z_][a-zA-Z0-9_]*">
148 <token type="Name"/>
149 </rule>
150
151 <!-- URL paths in type URLs for Any expansion -->
152 <rule pattern="/[a-zA-Z_][a-zA-Z0-9_/.]*">
153 <token type="NameNamespace"/>
154 </rule>
155
156 <!-- Punctuation -->
157 <rule pattern="[:;,<>\[\]{}]">
158 <token type="Punctuation"/>
159 </rule>
160 </state>
161 </rules>
162</lexer>