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