xref: /Universal-ctags/optlib/puppetManifest.c (revision b6124a60ca4730ea006b0411f9909cd38f8bd257)
1 /*
2  * Generated by ./misc/optlib2c from optlib/puppetManifest.ctags, Don't edit this manually.
3  */
4 #include "general.h"
5 #include "parse.h"
6 #include "routines.h"
7 #include "field.h"
8 #include "xtag.h"
9 
10 
11 typedef enum {
12 	K_CLASS,
13 	K_DEFINITION,
14 	K_NODE,
15 	K_RESOURCE,
16 	K_VARIABLE,
17 	K_PARAM,
18 	K_VRESOURCE,
19 	K_TYPE,
20 } PuppetManifestKind;
21 
22 
initializePuppetManifestParser(const langType language)23 static void initializePuppetManifestParser (const langType language)
24 {
25 	addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
26 		"{{    % spec:dict<num,kind> TRYMAKETAG tag:int true\n"
27 		"    % spec:dict<num,kind> TRYMAKETAG false\n"
28 		"    /trymaketag {\n"
29 		"        {\n"
30 		"            {\n"
31 		"                1 index _matchstr {\n"
32 		"                    % key value str\n"
33 		"                    3 -1 roll\n"
34 		"                    % value str key\n"
35 		"                    _matchloc\n"
36 		"                    % value str loc\n"
37 		"                    3 -1 roll exch\n"
38 		"                    % str value loc\n"
39 		"                    _tag _commit\n"
40 		"                    stop\n"
41 		"                } {\n"
42 		"                    pop pop\n"
43 		"                } ifelse\n"
44 		"            } forall\n"
45 		"         } stopped\n"
46 		"    } def\n"
47 		"}}");
48 
49 	addLanguageRegexTable (language, "main");
50 	addLanguageRegexTable (language, "separator");
51 	addLanguageRegexTable (language, "any");
52 	addLanguageRegexTable (language, "ignoreWhiteSpace");
53 	addLanguageRegexTable (language, "end");
54 	addLanguageRegexTable (language, "endWithPop");
55 	addLanguageRegexTable (language, "ssliteral");
56 	addLanguageRegexTable (language, "dsliteral");
57 	addLanguageRegexTable (language, "comment");
58 	addLanguageRegexTable (language, "blockStart");
59 	addLanguageRegexTable (language, "blockHead");
60 	addLanguageRegexTable (language, "blockHeadPopAtLast");
61 	addLanguageRegexTable (language, "block");
62 	addLanguageRegexTable (language, "classStart");
63 	addLanguageRegexTable (language, "resourceBlock");
64 	addLanguageRegexTable (language, "skipLiteral");
65 	addLanguageRegexTable (language, "skipBlock");
66 	addLanguageRegexTable (language, "skipArray");
67 	addLanguageRegexTable (language, "skipArgs");
68 	addLanguageRegexTable (language, "skipCollector");
69 	addLanguageRegexTable (language, "signature");
70 	addLanguageRegexTable (language, "skipDefaultValue");
71 	addLanguageRegexTable (language, "var");
72 	addLanguageRegexTable (language, "defineStart");
73 	addLanguageRegexTable (language, "caseStart");
74 	addLanguageRegexTable (language, "ifStart");
75 	addLanguageRegexTable (language, "nodeStart");
76 	addLanguageRegexTable (language, "typeStart");
77 	addLanguageRegexTable (language, "comment_multiline");
78 	addLanguageRegexTable (language, "comment_oneline");
79 	addLanguageRegexTable (language, "resourceName");
80 	addLanguageRegexTable (language, "resourceNameInArray");
81 	addLanguageRegexTable (language, "resourceBody");
82 	addLanguageRegexTable (language, "resourceArray");
83 	addLanguageRegexTable (language, "resourceCollector");
84 	addLanguageRegexTable (language, "varexpr");
85 	addLanguageRegexTable (language, "caseBlock");
86 
87 	addLanguageTagMultiTableRegex (language, "main",
88 	                               "^/\\*",
89 	                               "", "", "{tenter=comment_multiline}", NULL);
90 	addLanguageTagMultiTableRegex (language, "main",
91 	                               "^\\#",
92 	                               "", "", "{tenter=comment_oneline}", NULL);
93 	addLanguageTagMultiTableRegex (language, "main",
94 	                               "^[ \t\n]+",
95 	                               "", "", "", NULL);
96 	addLanguageTagMultiTableRegex (language, "main",
97 	                               "^'",
98 	                               "", "", "{tenter=ssliteral}", NULL);
99 	addLanguageTagMultiTableRegex (language, "main",
100 	                               "^\"",
101 	                               "", "", "{tenter=dsliteral}", NULL);
102 	addLanguageTagMultiTableRegex (language, "main",
103 	                               "^<<?\\|",
104 	                               "", "", "{tenter=skipCollector}", NULL);
105 	addLanguageTagMultiTableRegex (language, "main",
106 	                               "^\\$",
107 	                               "", "", "{tenter=var}", NULL);
108 	addLanguageTagMultiTableRegex (language, "main",
109 	                               "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
110 	                               "", "", "{tenter=resourceBlock}"
111 		"{{\n"
112 		"    \\1 _isstring {\n"
113 		"       /vresource\n"
114 		"    } {\n"
115 		"       /resource\n"
116 		"    } ifelse \\2 true\n"
117 		"    % kind:name type:string true\n"
118 		"}}", NULL);
119 	addLanguageTagMultiTableRegex (language, "main",
120 	                               "^class[ \t\n]+",
121 	                               "", "", "{tenter=classStart}", NULL);
122 	addLanguageTagMultiTableRegex (language, "main",
123 	                               "^define[ \t\n]+",
124 	                               "", "", "{tenter=defineStart}", NULL);
125 	addLanguageTagMultiTableRegex (language, "main",
126 	                               "^case[ \t\n]+",
127 	                               "", "", "{tenter=caseStart}", NULL);
128 	addLanguageTagMultiTableRegex (language, "main",
129 	                               "^(if|elsif|else|unless)[ \t\n]+",
130 	                               "", "", "{tenter=ifStart}", NULL);
131 	addLanguageTagMultiTableRegex (language, "main",
132 	                               "^node[ \t\n]+",
133 	                               "", "", "{tenter=nodeStart}", NULL);
134 	addLanguageTagMultiTableRegex (language, "main",
135 	                               "^type[ \t\n]+",
136 	                               "", "", "{tenter=typeStart}", NULL);
137 	addLanguageTagMultiTableRegex (language, "main",
138 	                               "^\\$",
139 	                               "", "", "{tenter=var}", NULL);
140 	addLanguageTagMultiTableRegex (language, "main",
141 	                               "^\\(",
142 	                               "", "", "{tenter=skipArgs}", NULL);
143 	addLanguageTagMultiTableRegex (language, "main",
144 	                               "^\\{",
145 	                               "", "", "{tenter=skipBlock}", NULL);
146 	addLanguageTagMultiTableRegex (language, "main",
147 	                               "^.",
148 	                               "", "", "{tenter=separator}", NULL);
149 	addLanguageTagMultiTableRegex (language, "separator",
150 	                               "^[a-zA-Z0-9]",
151 	                               "", "", "", NULL);
152 	addLanguageTagMultiTableRegex (language, "separator",
153 	                               "^",
154 	                               "", "", "{tleave}", NULL);
155 	addLanguageTagMultiTableRegex (language, "any",
156 	                               "^.",
157 	                               "", "", "", NULL);
158 	addLanguageTagMultiTableRegex (language, "ignoreWhiteSpace",
159 	                               "^[ \t\n]+",
160 	                               "", "", "", NULL);
161 	addLanguageTagMultiTableRegex (language, "end",
162 	                               "^",
163 	                               "", "", "{tleave}", NULL);
164 	addLanguageTagMultiTableRegex (language, "endWithPop",
165 	                               "^",
166 	                               "", "", "{tleave}{scope=pop}", NULL);
167 	addLanguageTagMultiTableRegex (language, "ssliteral",
168 	                               "^[^']*'",
169 	                               "", "", "{tleave}", NULL);
170 	addLanguageTagMultiTableRegex (language, "ssliteral",
171 	                               "^[^']+",
172 	                               "", "", "", NULL);
173 	addLanguageTagMultiTableRegex (language, "dsliteral",
174 	                               "^[^\"]*\"",
175 	                               "", "", "{tleave}", NULL);
176 	addLanguageTagMultiTableRegex (language, "dsliteral",
177 	                               "^[^\"]+",
178 	                               "", "", "", NULL);
179 	addLanguageTagMultiTableRegex (language, "comment",
180 	                               "^/\\*",
181 	                               "", "", "{tenter=comment_multiline}", NULL);
182 	addLanguageTagMultiTableRegex (language, "comment",
183 	                               "^\\#",
184 	                               "", "", "{tenter=comment_oneline}", NULL);
185 	addLanguageTagMultiTableRegex (language, "blockStart",
186 	                               "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
187 	                               "", "", "{tenter=resourceBlock}"
188 		"{{\n"
189 		"    \\1 _isstring {\n"
190 		"       /vresource\n"
191 		"    } {\n"
192 		"       /resource\n"
193 		"    } ifelse \\2 true\n"
194 		"    % kind:name type:string true\n"
195 		"}}", NULL);
196 	addLanguageTagMultiTableRegex (language, "blockStart",
197 	                               "^class[ \t\n]+",
198 	                               "", "", "{tenter=classStart}", NULL);
199 	addLanguageTagMultiTableRegex (language, "blockStart",
200 	                               "^define[ \t\n]+",
201 	                               "", "", "{tenter=defineStart}", NULL);
202 	addLanguageTagMultiTableRegex (language, "blockStart",
203 	                               "^case[ \t\n]+",
204 	                               "", "", "{tenter=caseStart}", NULL);
205 	addLanguageTagMultiTableRegex (language, "blockStart",
206 	                               "^(if|elsif|else|unless)[ \t\n]+",
207 	                               "", "", "{tenter=ifStart}", NULL);
208 	addLanguageTagMultiTableRegex (language, "blockStart",
209 	                               "^node[ \t\n]+",
210 	                               "", "", "{tenter=nodeStart}", NULL);
211 	addLanguageTagMultiTableRegex (language, "blockStart",
212 	                               "^type[ \t\n]+",
213 	                               "", "", "{tenter=typeStart}", NULL);
214 	addLanguageTagMultiTableRegex (language, "blockStart",
215 	                               "^\\$",
216 	                               "", "", "{tenter=var}", NULL);
217 	addLanguageTagMultiTableRegex (language, "blockHead",
218 	                               "^/\\*",
219 	                               "", "", "{tenter=comment_multiline}", NULL);
220 	addLanguageTagMultiTableRegex (language, "blockHead",
221 	                               "^\\#",
222 	                               "", "", "{tenter=comment_oneline}", NULL);
223 	addLanguageTagMultiTableRegex (language, "blockHead",
224 	                               "^[ \t\n]+",
225 	                               "", "", "", NULL);
226 	addLanguageTagMultiTableRegex (language, "blockHead",
227 	                               "^\\{",
228 	                               "", "", "{tenter=block,end}", NULL);
229 	addLanguageTagMultiTableRegex (language, "blockHead",
230 	                               "^.",
231 	                               "", "", "", NULL);
232 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
233 	                               "^/\\*",
234 	                               "", "", "{tenter=comment_multiline}", NULL);
235 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
236 	                               "^\\#",
237 	                               "", "", "{tenter=comment_oneline}", NULL);
238 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
239 	                               "^\\{",
240 	                               "", "", "{tenter=block,endWithPop}", NULL);
241 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
242 	                               "^[ \t\n]+",
243 	                               "", "", "", NULL);
244 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
245 	                               "^inherits[ \t\n]+(::[a-z][_a-zA-Z0-9:]*|[a-z][_a-zA-Z0-9:]*)[ \t\n]*",
246 	                               "", "", ""
247 		"{{\n"
248 		"    _scopetop {\n"
249 		"        dup :kind /class eq {\n"
250 		"           \\1 inherits:\n"
251 		"        } {\n"
252 		"           pop\n"
253 		"        } ifelse\n"
254 		"    } if\n"
255 		"}}", NULL);
256 	addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
257 	                               "^.",
258 	                               "", "", "", NULL);
259 	addLanguageTagMultiTableRegex (language, "block",
260 	                               "^[ \t\n]+",
261 	                               "", "", "", NULL);
262 	addLanguageTagMultiTableRegex (language, "block",
263 	                               "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
264 	                               "", "", "{tenter=resourceBlock}"
265 		"{{\n"
266 		"    \\1 _isstring {\n"
267 		"       /vresource\n"
268 		"    } {\n"
269 		"       /resource\n"
270 		"    } ifelse \\2 true\n"
271 		"    % kind:name type:string true\n"
272 		"}}", NULL);
273 	addLanguageTagMultiTableRegex (language, "block",
274 	                               "^class[ \t\n]+",
275 	                               "", "", "{tenter=classStart}", NULL);
276 	addLanguageTagMultiTableRegex (language, "block",
277 	                               "^define[ \t\n]+",
278 	                               "", "", "{tenter=defineStart}", NULL);
279 	addLanguageTagMultiTableRegex (language, "block",
280 	                               "^case[ \t\n]+",
281 	                               "", "", "{tenter=caseStart}", NULL);
282 	addLanguageTagMultiTableRegex (language, "block",
283 	                               "^(if|elsif|else|unless)[ \t\n]+",
284 	                               "", "", "{tenter=ifStart}", NULL);
285 	addLanguageTagMultiTableRegex (language, "block",
286 	                               "^node[ \t\n]+",
287 	                               "", "", "{tenter=nodeStart}", NULL);
288 	addLanguageTagMultiTableRegex (language, "block",
289 	                               "^type[ \t\n]+",
290 	                               "", "", "{tenter=typeStart}", NULL);
291 	addLanguageTagMultiTableRegex (language, "block",
292 	                               "^\\$",
293 	                               "", "", "{tenter=var}", NULL);
294 	addLanguageTagMultiTableRegex (language, "block",
295 	                               "^<<?\\|",
296 	                               "", "", "{tenter=skipCollector}", NULL);
297 	addLanguageTagMultiTableRegex (language, "block",
298 	                               "^;?[ \t\n]*\\}",
299 	                               "", "", "{tleave}", NULL);
300 	addLanguageTagMultiTableRegex (language, "block",
301 	                               "^;",
302 	                               "", "", "{tjump=resourceBlock}{scope=pop}"
303 		"{{\n"
304 		"    false\n"
305 		"}}", NULL);
306 	addLanguageTagMultiTableRegex (language, "block",
307 	                               "^:",
308 	                               "", "", "", NULL);
309 	addLanguageTagMultiTableRegex (language, "block",
310 	                               "^/\\*",
311 	                               "", "", "{tenter=comment_multiline}", NULL);
312 	addLanguageTagMultiTableRegex (language, "block",
313 	                               "^\\#",
314 	                               "", "", "{tenter=comment_oneline}", NULL);
315 	addLanguageTagMultiTableRegex (language, "block",
316 	                               "^'",
317 	                               "", "", "{tenter=ssliteral}", NULL);
318 	addLanguageTagMultiTableRegex (language, "block",
319 	                               "^\"",
320 	                               "", "", "{tenter=dsliteral}", NULL);
321 	addLanguageTagMultiTableRegex (language, "block",
322 	                               "^\\{",
323 	                               "", "", "{tenter=block}", NULL);
324 	addLanguageTagMultiTableRegex (language, "block",
325 	                               "^.",
326 	                               "", "", "{tenter=separator}", NULL);
327 	addLanguageTagMultiTableRegex (language, "classStart",
328 	                               "^/\\*",
329 	                               "", "", "{tenter=comment_multiline}", NULL);
330 	addLanguageTagMultiTableRegex (language, "classStart",
331 	                               "^\\#",
332 	                               "", "", "{tenter=comment_oneline}", NULL);
333 	addLanguageTagMultiTableRegex (language, "classStart",
334 	                               "^(::[a-z][_a-zA-Z0-9:]*|[a-z][_a-zA-Z0-9:]*)[ \t\n]*(\\(|\\{|inherits[ \t\n]+(::[a-z][_a-zA-Z0-9:]*|[a-z][_a-zA-Z0-9:]*))[ \t\n]*",
335 	                               "\\1", "c", "{scope=push}"
336 		"{{\n"
337 		"    \\3 _isstring {\n"
338 		"        . exch inherits:\n"
339 		"        /blockHead /endWithPop _tentercont\n"
340 		"    } {\n"
341 		"        \\2 0 get ?( eq {\n"
342 		"            % for gathering signature\n"
343 		"            mark ?(\n"
344 		"            % {tenter=signature,blockHeadPopAtLast}\n"
345 		"            /signature /blockHeadPopAtLast _tentercont\n"
346 		"        } {\n"
347 		"            2 /start _matchloc _advanceto\n"
348 		"            /blockHead /endWithPop _tentercont\n"
349 		"        } ifelse\n"
350 		"    } ifelse\n"
351 		"}}", NULL);
352 	addLanguageTagMultiTableRegex (language, "resourceBlock",
353 	                               "^[ \t\n]+",
354 	                               "", "", "", NULL);
355 	addLanguageTagMultiTableRegex (language, "resourceBlock",
356 	                               "^\\}",
357 	                               "", "", "{tleave}"
358 		"{{\n"
359 		"    { pop pop } if\n"
360 		"}}", NULL);
361 	addLanguageTagMultiTableRegex (language, "resourceBlock",
362 	                               "^'",
363 	                               "", "", "{tenter=resourceName}{_advanceTo=0start}", NULL);
364 	addLanguageTagMultiTableRegex (language, "resourceBlock",
365 	                               "^\"",
366 	                               "", "", "{tenter=resourceName}{_advanceTo=0start}", NULL);
367 	addLanguageTagMultiTableRegex (language, "resourceBlock",
368 	                               "^\\[",
369 	                               "", "", "{tenter=resourceArray}", NULL);
370 	addLanguageTagMultiTableRegex (language, "resourceBlock",
371 	                               "^\\{",
372 	                               "", "", "{tenter=block}", NULL);
373 	addLanguageTagMultiTableRegex (language, "resourceBlock",
374 	                               "^/\\*",
375 	                               "", "", "{tenter=comment_multiline}", NULL);
376 	addLanguageTagMultiTableRegex (language, "resourceBlock",
377 	                               "^\\#",
378 	                               "", "", "{tenter=comment_oneline}", NULL);
379 	addLanguageTagMultiTableRegex (language, "resourceBlock",
380 	                               "^.",
381 	                               "", "", "{tenter=resourceBody}{scope=push}{placeholder}", NULL);
382 	addLanguageTagMultiTableRegex (language, "skipLiteral",
383 	                               "^'",
384 	                               "", "", "{tenter=ssliteral}", NULL);
385 	addLanguageTagMultiTableRegex (language, "skipLiteral",
386 	                               "^\"",
387 	                               "", "", "{tenter=dsliteral}", NULL);
388 	addLanguageTagMultiTableRegex (language, "skipBlock",
389 	                               "^/\\*",
390 	                               "", "", "{tenter=comment_multiline}", NULL);
391 	addLanguageTagMultiTableRegex (language, "skipBlock",
392 	                               "^\\#",
393 	                               "", "", "{tenter=comment_oneline}", NULL);
394 	addLanguageTagMultiTableRegex (language, "skipBlock",
395 	                               "^'",
396 	                               "", "", "{tenter=ssliteral}", NULL);
397 	addLanguageTagMultiTableRegex (language, "skipBlock",
398 	                               "^\"",
399 	                               "", "", "{tenter=dsliteral}", NULL);
400 	addLanguageTagMultiTableRegex (language, "skipBlock",
401 	                               "^\\{",
402 	                               "", "", "{tenter=skipBlock}", NULL);
403 	addLanguageTagMultiTableRegex (language, "skipBlock",
404 	                               "^\\}",
405 	                               "", "", "{tleave}", NULL);
406 	addLanguageTagMultiTableRegex (language, "skipBlock",
407 	                               "^.",
408 	                               "", "", "", NULL);
409 	addLanguageTagMultiTableRegex (language, "skipArray",
410 	                               "^/\\*",
411 	                               "", "", "{tenter=comment_multiline}", NULL);
412 	addLanguageTagMultiTableRegex (language, "skipArray",
413 	                               "^\\#",
414 	                               "", "", "{tenter=comment_oneline}", NULL);
415 	addLanguageTagMultiTableRegex (language, "skipArray",
416 	                               "^'",
417 	                               "", "", "{tenter=ssliteral}", NULL);
418 	addLanguageTagMultiTableRegex (language, "skipArray",
419 	                               "^\"",
420 	                               "", "", "{tenter=dsliteral}", NULL);
421 	addLanguageTagMultiTableRegex (language, "skipArray",
422 	                               "^\\[",
423 	                               "", "", "{tenter=skipArray}", NULL);
424 	addLanguageTagMultiTableRegex (language, "skipArray",
425 	                               "^\\]",
426 	                               "", "", "{tleave}", NULL);
427 	addLanguageTagMultiTableRegex (language, "skipArray",
428 	                               "^.",
429 	                               "", "", "", NULL);
430 	addLanguageTagMultiTableRegex (language, "skipArgs",
431 	                               "^/\\*",
432 	                               "", "", "{tenter=comment_multiline}", NULL);
433 	addLanguageTagMultiTableRegex (language, "skipArgs",
434 	                               "^\\#",
435 	                               "", "", "{tenter=comment_oneline}", NULL);
436 	addLanguageTagMultiTableRegex (language, "skipArgs",
437 	                               "^'",
438 	                               "", "", "{tenter=ssliteral}", NULL);
439 	addLanguageTagMultiTableRegex (language, "skipArgs",
440 	                               "^\"",
441 	                               "", "", "{tenter=dsliteral}", NULL);
442 	addLanguageTagMultiTableRegex (language, "skipArgs",
443 	                               "^\\(",
444 	                               "", "", "{tenter=skipArgs}", NULL);
445 	addLanguageTagMultiTableRegex (language, "skipArgs",
446 	                               "^\\)",
447 	                               "", "", "{tleave}", NULL);
448 	addLanguageTagMultiTableRegex (language, "skipArgs",
449 	                               "^.",
450 	                               "", "", "", NULL);
451 	addLanguageTagMultiTableRegex (language, "skipCollector",
452 	                               "^/\\*",
453 	                               "", "", "{tenter=comment_multiline}", NULL);
454 	addLanguageTagMultiTableRegex (language, "skipCollector",
455 	                               "^\\#",
456 	                               "", "", "{tenter=comment_oneline}", NULL);
457 	addLanguageTagMultiTableRegex (language, "skipCollector",
458 	                               "^'",
459 	                               "", "", "{tenter=ssliteral}", NULL);
460 	addLanguageTagMultiTableRegex (language, "skipCollector",
461 	                               "^\"",
462 	                               "", "", "{tenter=dsliteral}", NULL);
463 	addLanguageTagMultiTableRegex (language, "skipCollector",
464 	                               "^<<?\\|",
465 	                               "", "", "{tenter=skipCollector}", NULL);
466 	addLanguageTagMultiTableRegex (language, "skipCollector",
467 	                               "^\\|>>?",
468 	                               "", "", "{tleave}", NULL);
469 	addLanguageTagMultiTableRegex (language, "skipCollector",
470 	                               "^.",
471 	                               "", "", "", NULL);
472 	addLanguageTagMultiTableRegex (language, "signature",
473 	                               "^/\\*",
474 	                               "", "", "{tenter=comment_multiline}", NULL);
475 	addLanguageTagMultiTableRegex (language, "signature",
476 	                               "^\\#",
477 	                               "", "", "{tenter=comment_oneline}", NULL);
478 	addLanguageTagMultiTableRegex (language, "signature",
479 	                               "^'",
480 	                               "", "", "{tenter=ssliteral}", NULL);
481 	addLanguageTagMultiTableRegex (language, "signature",
482 	                               "^\"",
483 	                               "", "", "{tenter=dsliteral}", NULL);
484 	addLanguageTagMultiTableRegex (language, "signature",
485 	                               "^[ \t\n]+",
486 	                               "", "", "", NULL);
487 	addLanguageTagMultiTableRegex (language, "signature",
488 	                               "^\\)",
489 	                               "", "", "{tleave}"
490 		"{{\n"
491 		"    %\n"
492 		"    % fill signature\n"
493 		"    %\n"
494 		"    dup ?, eq { pop } if\n"
495 		"    ?) _buildstring _scopetop {\n"
496 		"        exch signature:\n"
497 		"    } {\n"
498 		"        % something wrong\n"
499 		"        pop\n"
500 		"    } ifelse\n"
501 		"}}", NULL);
502 	addLanguageTagMultiTableRegex (language, "signature",
503 	                               "^\\$([a-zA-Z][_a-zA-Z0-9:]*)[ \t]*([=,])[ \t]*",
504 	                               "\\1", "p", "{scope=ref}"
505 		"{{\n"
506 		"    % push the name of parameter for filling the signature field of definition\n"
507 		"    \\2 0 get ?= eq {\n"
508 		"       /skipDefaultValue _tenter\n"
509 		"    } if\n"
510 		"    ?$ \\1 ?,\n"
511 		"}}", NULL);
512 	addLanguageTagMultiTableRegex (language, "signature",
513 	                               "^.",
514 	                               "", "", "", NULL);
515 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
516 	                               "^/\\*",
517 	                               "", "", "{tenter=comment_multiline}", NULL);
518 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
519 	                               "^\\#",
520 	                               "", "", "{tenter=comment_oneline}", NULL);
521 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
522 	                               "^'",
523 	                               "", "", "{tenter=ssliteral}", NULL);
524 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
525 	                               "^\"",
526 	                               "", "", "{tenter=dsliteral}", NULL);
527 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
528 	                               "^\\[",
529 	                               "", "", "{tenter=skipArray}", NULL);
530 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
531 	                               "^\\{",
532 	                               "", "", "{tenter=skipBlock}", NULL);
533 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
534 	                               "^\\(",
535 	                               "", "", "{tenter=skipArgs}", NULL);
536 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
537 	                               "^,",
538 	                               "", "", "{tleave}", NULL);
539 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
540 	                               "^\\)",
541 	                               "", "", "{tleave}{_advanceTo=0start}", NULL);
542 	addLanguageTagMultiTableRegex (language, "skipDefaultValue",
543 	                               "^.",
544 	                               "", "", "", NULL);
545 	addLanguageTagMultiTableRegex (language, "var",
546 	                               "^(::[a-zA-Z0-9_:]+|[a-zA-Z_][a-zA-Z0-9_:]*)[ \t\n]*=",
547 	                               "\\1", "v", "{tenter=varexpr,end}"
548 		"{{\n"
549 		"    \\1 0 get ?: eq not {\n"
550 		"       . _scoperef\n"
551 		"    } if\n"
552 		"}}", NULL);
553 	addLanguageTagMultiTableRegex (language, "defineStart",
554 	                               "^/\\*",
555 	                               "", "", "{tenter=comment_multiline}", NULL);
556 	addLanguageTagMultiTableRegex (language, "defineStart",
557 	                               "^\\#",
558 	                               "", "", "{tenter=comment_oneline}", NULL);
559 	addLanguageTagMultiTableRegex (language, "defineStart",
560 	                               "^([a-z][_a-zA-Z0-9:]*)[ \n\t]*([({])",
561 	                               "\\1", "d", "{scope=push}"
562 		"{{\n"
563 		"    \\2 0 get ?( eq {\n"
564 		"       % for gathering signature\n"
565 		"       mark ?(\n"
566 		"       % {tenter=signature,blockHeadPopAtLast}\n"
567 		"       /signature /blockHeadPopAtLast _tentercont\n"
568 		"    } {\n"
569 		"       /block /endWithPop _tentercont\n"
570 		"    } ifelse\n"
571 		"}}", NULL);
572 	addLanguageTagMultiTableRegex (language, "caseStart",
573 	                               "^/\\*",
574 	                               "", "", "{tenter=comment_multiline}", NULL);
575 	addLanguageTagMultiTableRegex (language, "caseStart",
576 	                               "^\\#",
577 	                               "", "", "{tenter=comment_oneline}", NULL);
578 	addLanguageTagMultiTableRegex (language, "caseStart",
579 	                               "^[ \t\n]+",
580 	                               "", "", "", NULL);
581 	addLanguageTagMultiTableRegex (language, "caseStart",
582 	                               "^\\{",
583 	                               "", "", "{tenter=caseBlock}", NULL);
584 	addLanguageTagMultiTableRegex (language, "caseStart",
585 	                               "^}",
586 	                               "", "", "{tleave}", NULL);
587 	addLanguageTagMultiTableRegex (language, "caseStart",
588 	                               "^.",
589 	                               "", "", "", NULL);
590 	addLanguageTagMultiTableRegex (language, "ifStart",
591 	                               "^/\\*",
592 	                               "", "", "{tenter=comment_multiline}", NULL);
593 	addLanguageTagMultiTableRegex (language, "ifStart",
594 	                               "^\\#",
595 	                               "", "", "{tenter=comment_oneline}", NULL);
596 	addLanguageTagMultiTableRegex (language, "ifStart",
597 	                               "^[ \t\n]+",
598 	                               "", "", "", NULL);
599 	addLanguageTagMultiTableRegex (language, "ifStart",
600 	                               "^'",
601 	                               "", "", "{tenter=ssliteral}", NULL);
602 	addLanguageTagMultiTableRegex (language, "ifStart",
603 	                               "^\"",
604 	                               "", "", "{tenter=dsliteral}", NULL);
605 	addLanguageTagMultiTableRegex (language, "ifStart",
606 	                               "^\\{",
607 	                               "", "", "{tenter=block,end}", NULL);
608 	addLanguageTagMultiTableRegex (language, "ifStart",
609 	                               "^.",
610 	                               "", "", "", NULL);
611 	addLanguageTagMultiTableRegex (language, "nodeStart",
612 	                               "^/\\*",
613 	                               "", "", "{tenter=comment_multiline}", NULL);
614 	addLanguageTagMultiTableRegex (language, "nodeStart",
615 	                               "^\\#",
616 	                               "", "", "{tenter=comment_oneline}", NULL);
617 	addLanguageTagMultiTableRegex (language, "nodeStart",
618 	                               "^[ \t\n]+",
619 	                               "", "", "", NULL);
620 	addLanguageTagMultiTableRegex (language, "nodeStart",
621 	                               "^'([^']+)'",
622 	                               "\\1", "n", "", NULL);
623 	addLanguageTagMultiTableRegex (language, "nodeStart",
624 	                               "^\"([^\"]+)\"",
625 	                               "\\1", "n", "", NULL);
626 	addLanguageTagMultiTableRegex (language, "nodeStart",
627 	                               "^\\{",
628 	                               "", "", "{tenter=block,end}", NULL);
629 	addLanguageTagMultiTableRegex (language, "nodeStart",
630 	                               "^.",
631 	                               "", "", "", NULL);
632 	addLanguageTagMultiTableRegex (language, "typeStart",
633 	                               "^/\\*",
634 	                               "", "", "{tenter=comment_multiline}", NULL);
635 	addLanguageTagMultiTableRegex (language, "typeStart",
636 	                               "^\\#",
637 	                               "", "", "{tenter=comment_oneline}", NULL);
638 	addLanguageTagMultiTableRegex (language, "typeStart",
639 	                               "^[ \t\n]+",
640 	                               "", "", "", NULL);
641 	addLanguageTagMultiTableRegex (language, "typeStart",
642 	                               "^([a-zA-Z][a-zA-Z0-9]*::[a-zA-Z][a-zA-Z0-9]+)[ \t\n]*=[ \t\n]*",
643 	                               "\\1", "t", "{tenter=varexpr,end}", NULL);
644 	addLanguageTagMultiTableRegex (language, "typeStart",
645 	                               "^.",
646 	                               "", "", "", NULL);
647 	addLanguageTagMultiTableRegex (language, "comment_multiline",
648 	                               "^\\*/",
649 	                               "", "", "{tleave}", NULL);
650 	addLanguageTagMultiTableRegex (language, "comment_multiline",
651 	                               "^.",
652 	                               "", "", "", NULL);
653 	addLanguageTagMultiTableRegex (language, "comment_oneline",
654 	                               "^\n",
655 	                               "", "", "{tleave}", NULL);
656 	addLanguageTagMultiTableRegex (language, "comment_oneline",
657 	                               "^.",
658 	                               "", "", "", NULL);
659 	addLanguageTagMultiTableRegex (language, "resourceName",
660 	                               "^'([^']+)'|\"([^\"]+)\"",
661 	                               "", "", "{tenter=resourceBody,end}"
662 		"{{\n"
663 		"    dup {\n"
664 		"        1 index (typename) exch [ 3 1 roll ]\n"
665 		"        % kind:name type:string true [ (typename) type:string ]\n"
666 		"        <<\n"
667 		"        4 index\n"
668 		"        % kind:name type:string true [ (typename) type:string ] << kind:name\n"
669 		"        1 exch dup 2 exch\n"
670 		"        >>\n"
671 		"        % kind:name type:string true [ (typename) type:string ] << 1 kind:name 2 kind:name >>\n"
672 		"        trymaketag\n"
673 		"        % kind:name type:string true [ (typename) type:string ] tag:int true %\n"
674 		"        % kind:name type:string true [ (typename) type:string ] false\n"
675 		"        {\n"
676 		"            dup _scopepush\n"
677 		"            exch typeref:\n"
678 		"        } {\n"
679 		"            pop\n"
680 		"        } ifelse\n"
681 		"    } {\n"
682 		"        << 1 /resource 2 /resource >> trymaketag {\n"
683 		"           _scopepush\n"
684 		"        } if\n"
685 		"    } ifelse\n"
686 		"}}", NULL);
687 	addLanguageTagMultiTableRegex (language, "resourceName",
688 	                               "^",
689 	                               "", "", "{tquit}", NULL);
690 	addLanguageTagMultiTableRegex (language, "resourceNameInArray",
691 	                               "^'([^']+)'|\"([^\"]+)\"",
692 	                               "", "", "{tleave}"
693 		"{{\n"
694 		"    dup {\n"
695 		"        % do the same as resourceName\n"
696 		"        1 index (typename) exch [ 3 1 roll ]\n"
697 		"        << 4 index 1 exch dup 2 exch >> trymaketag\n"
698 		"        {\n"
699 		"            dup _scoperef\n"
700 		"            exch typeref:\n"
701 		"        } {\n"
702 		"            pop\n"
703 		"        } ifelse\n"
704 		"\n"
705 		"    } {\n"
706 		"        << 1 /resource 2 /resource >> trymaketag {\n"
707 		"           _scoperef\n"
708 		"        } if\n"
709 		"    } ifelse\n"
710 		"}}", NULL);
711 	addLanguageTagMultiTableRegex (language, "resourceNameInArray",
712 	                               "^",
713 	                               "", "", "{tquit}", NULL);
714 	addLanguageTagMultiTableRegex (language, "resourceBody",
715 	                               "^[^/#{'\";}<]+",
716 	                               "", "", "", NULL);
717 	addLanguageTagMultiTableRegex (language, "resourceBody",
718 	                               "^'",
719 	                               "", "", "{tenter=ssliteral}", NULL);
720 	addLanguageTagMultiTableRegex (language, "resourceBody",
721 	                               "^\"",
722 	                               "", "", "{tenter=dsliteral}", NULL);
723 	addLanguageTagMultiTableRegex (language, "resourceBody",
724 	                               "^\\}",
725 	                               "", "", "{tleave}{_advanceTo=0start}{scope=pop}", NULL);
726 	addLanguageTagMultiTableRegex (language, "resourceBody",
727 	                               "^\\{",
728 	                               "", "", "{tenter=skipBlock}", NULL);
729 	addLanguageTagMultiTableRegex (language, "resourceBody",
730 	                               "^;",
731 	                               "", "", "{tleave}{scope=pop}", NULL);
732 	addLanguageTagMultiTableRegex (language, "resourceBody",
733 	                               "^<<?\\|",
734 	                               "", "", "{tenter=skipCollector}", NULL);
735 	addLanguageTagMultiTableRegex (language, "resourceBody",
736 	                               "^/\\*",
737 	                               "", "", "{tenter=comment_multiline}", NULL);
738 	addLanguageTagMultiTableRegex (language, "resourceBody",
739 	                               "^\\#",
740 	                               "", "", "{tenter=comment_oneline}", NULL);
741 	addLanguageTagMultiTableRegex (language, "resourceBody",
742 	                               "^.",
743 	                               "", "", "", NULL);
744 	addLanguageTagMultiTableRegex (language, "resourceArray",
745 	                               "^/\\*",
746 	                               "", "", "{tenter=comment_multiline}", NULL);
747 	addLanguageTagMultiTableRegex (language, "resourceArray",
748 	                               "^\\#",
749 	                               "", "", "{tenter=comment_oneline}", NULL);
750 	addLanguageTagMultiTableRegex (language, "resourceArray",
751 	                               "^[ \t\n]+",
752 	                               "", "", "", NULL);
753 	addLanguageTagMultiTableRegex (language, "resourceArray",
754 	                               "^['\"]",
755 	                               "", "", "{tenter=resourceNameInArray}{_advanceTo=0start}", NULL);
756 	addLanguageTagMultiTableRegex (language, "resourceArray",
757 	                               "^\\]",
758 	                               "", "", "{tleave}", NULL);
759 	addLanguageTagMultiTableRegex (language, "resourceArray",
760 	                               "^.",
761 	                               "", "", "", NULL);
762 	addLanguageTagMultiTableRegex (language, "varexpr",
763 	                               "^/\\*",
764 	                               "", "", "{tenter=comment_multiline}", NULL);
765 	addLanguageTagMultiTableRegex (language, "varexpr",
766 	                               "^\\#",
767 	                               "", "", "{tenter=comment_oneline}", NULL);
768 	addLanguageTagMultiTableRegex (language, "varexpr",
769 	                               "^'",
770 	                               "", "", "{tenter=ssliteral,end}", NULL);
771 	addLanguageTagMultiTableRegex (language, "varexpr",
772 	                               "^\"",
773 	                               "", "", "{tenter=dsliteral,end}", NULL);
774 	addLanguageTagMultiTableRegex (language, "varexpr",
775 	                               "^\\[",
776 	                               "", "", "{tenter=skipArray,end}", NULL);
777 	addLanguageTagMultiTableRegex (language, "varexpr",
778 	                               "^\\{",
779 	                               "", "", "{tenter=skipBlock,end}", NULL);
780 	addLanguageTagMultiTableRegex (language, "varexpr",
781 	                               "^\\(",
782 	                               "", "", "{tenter=skipArgs,end}", NULL);
783 	addLanguageTagMultiTableRegex (language, "varexpr",
784 	                               "^\\$[a-zA-Z:][0-9a-zA-Z:]*",
785 	                               "", "", "", NULL);
786 	addLanguageTagMultiTableRegex (language, "varexpr",
787 	                               "^[0-9]+(\\.[0-9]+(e([+-][0-9]+)))?",
788 	                               "", "", "", NULL);
789 	addLanguageTagMultiTableRegex (language, "varexpr",
790 	                               "^[a-zA-Z0-9:][0-9a-zA-Z:]*",
791 	                               "", "", "", NULL);
792 	addLanguageTagMultiTableRegex (language, "varexpr",
793 	                               "^[ \t]",
794 	                               "", "", "", NULL);
795 	addLanguageTagMultiTableRegex (language, "varexpr",
796 	                               "^\n",
797 	                               "", "", "{tleave}", NULL);
798 	addLanguageTagMultiTableRegex (language, "varexpr",
799 	                               "^.",
800 	                               "", "", "", NULL);
801 	addLanguageTagMultiTableRegex (language, "caseBlock",
802 	                               "^/\\*",
803 	                               "", "", "{tenter=comment_multiline}", NULL);
804 	addLanguageTagMultiTableRegex (language, "caseBlock",
805 	                               "^\\#",
806 	                               "", "", "{tenter=comment_oneline}", NULL);
807 	addLanguageTagMultiTableRegex (language, "caseBlock",
808 	                               "^[ \t\n]+",
809 	                               "", "", "", NULL);
810 	addLanguageTagMultiTableRegex (language, "caseBlock",
811 	                               "^'",
812 	                               "", "", "{tenter=ssliteral}", NULL);
813 	addLanguageTagMultiTableRegex (language, "caseBlock",
814 	                               "^\"",
815 	                               "", "", "{tenter=dsliteral}", NULL);
816 	addLanguageTagMultiTableRegex (language, "caseBlock",
817 	                               "^:",
818 	                               "", "", "{tenter=blockHead}", NULL);
819 	addLanguageTagMultiTableRegex (language, "caseBlock",
820 	                               "^}",
821 	                               "", "", "{tleave}{_advanceTo=0start}", NULL);
822 	addLanguageTagMultiTableRegex (language, "caseBlock",
823 	                               "^.",
824 	                               "", "", "", NULL);
825 }
826 
PuppetManifestParser(void)827 extern parserDefinition* PuppetManifestParser (void)
828 {
829 	static const char *const extensions [] = {
830 		"pp",
831 		NULL
832 	};
833 
834 	static const char *const aliases [] = {
835 		NULL
836 	};
837 
838 	static const char *const patterns [] = {
839 		NULL
840 	};
841 
842 	static scopeSeparator PuppetManifestClassSeparators [] = {
843 		{ KIND_GHOST_INDEX, "::" },
844 	};
845 
846 	static kindDefinition PuppetManifestKindTable [] = {
847 		{
848 		  true, 'c', "class", "classes",
849 		  ATTACH_SEPARATORS(PuppetManifestClassSeparators),
850 		},
851 		{
852 		  true, 'd', "definition", "definitions",
853 		},
854 		{
855 		  true, 'n', "node", "nodes",
856 		},
857 		{
858 		  true, 'r', "resource", "resources",
859 		},
860 		{
861 		  true, 'v', "variable", "variables",
862 		},
863 		{
864 		  true, 'p', "param", "parameters",
865 		},
866 		{
867 		  true, 'V', "vresource", "virtual resources",
868 		},
869 		{
870 		  true, 't', "type", "type aliases",
871 		},
872 	};
873 
874 	parserDefinition* const def = parserNew ("PuppetManifest");
875 
876 	def->enabled       = true;
877 	def->extensions    = extensions;
878 	def->patterns      = patterns;
879 	def->aliases       = aliases;
880 	def->method        = METHOD_NOT_CRAFTED|METHOD_REGEX;
881 	def->useCork       = CORK_QUEUE;
882 	def->kindTable     = PuppetManifestKindTable;
883 	def->kindCount     = ARRAY_SIZE(PuppetManifestKindTable);
884 	def->requestAutomaticFQTag = true;
885 	def->defaultScopeSeparator = "::";
886 	def->initialize    = initializePuppetManifestParser;
887 
888 	return def;
889 }
890