13409f3d5SMasatake YAMATO /*
23409f3d5SMasatake YAMATO * Generated by ./misc/optlib2c from optlib/puppetManifest.ctags, Don't edit this manually.
33409f3d5SMasatake YAMATO */
43409f3d5SMasatake YAMATO #include "general.h"
53409f3d5SMasatake YAMATO #include "parse.h"
63409f3d5SMasatake YAMATO #include "routines.h"
70d502ef0SMasatake YAMATO #include "field.h"
80d502ef0SMasatake YAMATO #include "xtag.h"
93409f3d5SMasatake YAMATO
103409f3d5SMasatake YAMATO
11f570d51fSMasatake YAMATO typedef enum {
12f570d51fSMasatake YAMATO K_CLASS,
13f570d51fSMasatake YAMATO K_DEFINITION,
14f570d51fSMasatake YAMATO K_NODE,
15f570d51fSMasatake YAMATO K_RESOURCE,
16f570d51fSMasatake YAMATO K_VARIABLE,
170ee6ddc8SMasatake YAMATO K_PARAM,
18bd464c18SMasatake YAMATO K_VRESOURCE,
19b6f7c9a4SMasatake YAMATO K_TYPE,
20f570d51fSMasatake YAMATO } PuppetManifestKind;
21f570d51fSMasatake YAMATO
22f570d51fSMasatake YAMATO
initializePuppetManifestParser(const langType language)23fd51425fSMasatake YAMATO static void initializePuppetManifestParser (const langType language)
243409f3d5SMasatake YAMATO {
25*b6124a60SMasatake YAMATO addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
26bd464c18SMasatake YAMATO "{{ % spec:dict<num,kind> TRYMAKETAG tag:int true\n"
27bd464c18SMasatake YAMATO " % spec:dict<num,kind> TRYMAKETAG false\n"
28bd464c18SMasatake YAMATO " /trymaketag {\n"
29bd464c18SMasatake YAMATO " {\n"
30bd464c18SMasatake YAMATO " {\n"
31bd464c18SMasatake YAMATO " 1 index _matchstr {\n"
32bd464c18SMasatake YAMATO " % key value str\n"
33bd464c18SMasatake YAMATO " 3 -1 roll\n"
34bd464c18SMasatake YAMATO " % value str key\n"
35bd464c18SMasatake YAMATO " _matchloc\n"
36bd464c18SMasatake YAMATO " % value str loc\n"
37bd464c18SMasatake YAMATO " 3 -1 roll exch\n"
38bd464c18SMasatake YAMATO " % str value loc\n"
39bd464c18SMasatake YAMATO " _tag _commit\n"
40bd464c18SMasatake YAMATO " stop\n"
41bd464c18SMasatake YAMATO " } {\n"
42bd464c18SMasatake YAMATO " pop pop\n"
43bd464c18SMasatake YAMATO " } ifelse\n"
44bd464c18SMasatake YAMATO " } forall\n"
45bd464c18SMasatake YAMATO " } stopped\n"
46bd464c18SMasatake YAMATO " } def\n"
47bd464c18SMasatake YAMATO "}}");
483409f3d5SMasatake YAMATO
493409f3d5SMasatake YAMATO addLanguageRegexTable (language, "main");
503409f3d5SMasatake YAMATO addLanguageRegexTable (language, "separator");
513409f3d5SMasatake YAMATO addLanguageRegexTable (language, "any");
523409f3d5SMasatake YAMATO addLanguageRegexTable (language, "ignoreWhiteSpace");
533409f3d5SMasatake YAMATO addLanguageRegexTable (language, "end");
543409f3d5SMasatake YAMATO addLanguageRegexTable (language, "endWithPop");
553409f3d5SMasatake YAMATO addLanguageRegexTable (language, "ssliteral");
563409f3d5SMasatake YAMATO addLanguageRegexTable (language, "dsliteral");
573409f3d5SMasatake YAMATO addLanguageRegexTable (language, "comment");
583409f3d5SMasatake YAMATO addLanguageRegexTable (language, "blockStart");
593409f3d5SMasatake YAMATO addLanguageRegexTable (language, "blockHead");
603409f3d5SMasatake YAMATO addLanguageRegexTable (language, "blockHeadPopAtLast");
613409f3d5SMasatake YAMATO addLanguageRegexTable (language, "block");
623409f3d5SMasatake YAMATO addLanguageRegexTable (language, "classStart");
633409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceBlock");
643409f3d5SMasatake YAMATO addLanguageRegexTable (language, "skipLiteral");
653409f3d5SMasatake YAMATO addLanguageRegexTable (language, "skipBlock");
663409f3d5SMasatake YAMATO addLanguageRegexTable (language, "skipArray");
673409f3d5SMasatake YAMATO addLanguageRegexTable (language, "skipArgs");
683409f3d5SMasatake YAMATO addLanguageRegexTable (language, "skipCollector");
690ee6ddc8SMasatake YAMATO addLanguageRegexTable (language, "signature");
700ee6ddc8SMasatake YAMATO addLanguageRegexTable (language, "skipDefaultValue");
713409f3d5SMasatake YAMATO addLanguageRegexTable (language, "var");
723409f3d5SMasatake YAMATO addLanguageRegexTable (language, "defineStart");
733409f3d5SMasatake YAMATO addLanguageRegexTable (language, "caseStart");
743409f3d5SMasatake YAMATO addLanguageRegexTable (language, "ifStart");
753409f3d5SMasatake YAMATO addLanguageRegexTable (language, "nodeStart");
76b6f7c9a4SMasatake YAMATO addLanguageRegexTable (language, "typeStart");
773409f3d5SMasatake YAMATO addLanguageRegexTable (language, "comment_multiline");
783409f3d5SMasatake YAMATO addLanguageRegexTable (language, "comment_oneline");
793409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceName");
803409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceNameInArray");
813409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceBody");
823409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceArray");
833409f3d5SMasatake YAMATO addLanguageRegexTable (language, "resourceCollector");
843409f3d5SMasatake YAMATO addLanguageRegexTable (language, "varexpr");
853409f3d5SMasatake YAMATO addLanguageRegexTable (language, "caseBlock");
863409f3d5SMasatake YAMATO
873409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
883409f3d5SMasatake YAMATO "^/\\*",
893409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
903409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
913409f3d5SMasatake YAMATO "^\\#",
923409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
933409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
9478fe1fd3SMasatake YAMATO "^[ \t\n]+",
953409f3d5SMasatake YAMATO "", "", "", NULL);
963409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
973409f3d5SMasatake YAMATO "^'",
983409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
993409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1003409f3d5SMasatake YAMATO "^\"",
1013409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
1023409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1033409f3d5SMasatake YAMATO "^<<?\\|",
1043409f3d5SMasatake YAMATO "", "", "{tenter=skipCollector}", NULL);
1053409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1063409f3d5SMasatake YAMATO "^\\$",
1073409f3d5SMasatake YAMATO "", "", "{tenter=var}", NULL);
1083409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
10973467b38SMasatake YAMATO "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
11073467b38SMasatake YAMATO "", "", "{tenter=resourceBlock}"
11173467b38SMasatake YAMATO "{{\n"
1125c1bbad2SMasatake YAMATO " \\1 _isstring {\n"
113bd464c18SMasatake YAMATO " /vresource\n"
1145c1bbad2SMasatake YAMATO " } {\n"
1155c1bbad2SMasatake YAMATO " /resource\n"
11673467b38SMasatake YAMATO " } ifelse \\2 true\n"
117bd464c18SMasatake YAMATO " % kind:name type:string true\n"
11873467b38SMasatake YAMATO "}}", NULL);
1193409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1203409f3d5SMasatake YAMATO "^class[ \t\n]+",
1213409f3d5SMasatake YAMATO "", "", "{tenter=classStart}", NULL);
1223409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1233409f3d5SMasatake YAMATO "^define[ \t\n]+",
1243409f3d5SMasatake YAMATO "", "", "{tenter=defineStart}", NULL);
1253409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1263409f3d5SMasatake YAMATO "^case[ \t\n]+",
1273409f3d5SMasatake YAMATO "", "", "{tenter=caseStart}", NULL);
1283409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1293409f3d5SMasatake YAMATO "^(if|elsif|else|unless)[ \t\n]+",
1303409f3d5SMasatake YAMATO "", "", "{tenter=ifStart}", NULL);
1313409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1323409f3d5SMasatake YAMATO "^node[ \t\n]+",
1333409f3d5SMasatake YAMATO "", "", "{tenter=nodeStart}", NULL);
1343409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
135b6f7c9a4SMasatake YAMATO "^type[ \t\n]+",
136b6f7c9a4SMasatake YAMATO "", "", "{tenter=typeStart}", NULL);
137b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
138eca6f84cSMasatake YAMATO "^\\$",
139eca6f84cSMasatake YAMATO "", "", "{tenter=var}", NULL);
140eca6f84cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1413409f3d5SMasatake YAMATO "^\\(",
1423409f3d5SMasatake YAMATO "", "", "{tenter=skipArgs}", NULL);
1433409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1443409f3d5SMasatake YAMATO "^\\{",
1453409f3d5SMasatake YAMATO "", "", "{tenter=skipBlock}", NULL);
1463409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "main",
1473409f3d5SMasatake YAMATO "^.",
1483409f3d5SMasatake YAMATO "", "", "{tenter=separator}", NULL);
1493409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "separator",
1503409f3d5SMasatake YAMATO "^[a-zA-Z0-9]",
1513409f3d5SMasatake YAMATO "", "", "", NULL);
1523409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "separator",
1533409f3d5SMasatake YAMATO "^",
1543409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
1553409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "any",
1563409f3d5SMasatake YAMATO "^.",
1573409f3d5SMasatake YAMATO "", "", "", NULL);
1583409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ignoreWhiteSpace",
15978fe1fd3SMasatake YAMATO "^[ \t\n]+",
1603409f3d5SMasatake YAMATO "", "", "", NULL);
1613409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "end",
1623409f3d5SMasatake YAMATO "^",
1633409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
1643409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "endWithPop",
1653409f3d5SMasatake YAMATO "^",
1663409f3d5SMasatake YAMATO "", "", "{tleave}{scope=pop}", NULL);
1673409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ssliteral",
168e7210e24SMasatake YAMATO "^[^']*'",
169e7210e24SMasatake YAMATO "", "", "{tleave}", NULL);
170e7210e24SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ssliteral",
17178fe1fd3SMasatake YAMATO "^[^']+",
172ae1a08feSMasatake YAMATO "", "", "", NULL);
173e7210e24SMasatake YAMATO addLanguageTagMultiTableRegex (language, "dsliteral",
174e7210e24SMasatake YAMATO "^[^\"]*\"",
1753409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
176ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "dsliteral",
17778fe1fd3SMasatake YAMATO "^[^\"]+",
1783409f3d5SMasatake YAMATO "", "", "", NULL);
1793409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment",
1803409f3d5SMasatake YAMATO "^/\\*",
1813409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
1823409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment",
1833409f3d5SMasatake YAMATO "^\\#",
1843409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
1853409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
18673467b38SMasatake YAMATO "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
18773467b38SMasatake YAMATO "", "", "{tenter=resourceBlock}"
18873467b38SMasatake YAMATO "{{\n"
1895c1bbad2SMasatake YAMATO " \\1 _isstring {\n"
190bd464c18SMasatake YAMATO " /vresource\n"
1915c1bbad2SMasatake YAMATO " } {\n"
1925c1bbad2SMasatake YAMATO " /resource\n"
19373467b38SMasatake YAMATO " } ifelse \\2 true\n"
194bd464c18SMasatake YAMATO " % kind:name type:string true\n"
19573467b38SMasatake YAMATO "}}", NULL);
1963409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
1973409f3d5SMasatake YAMATO "^class[ \t\n]+",
1983409f3d5SMasatake YAMATO "", "", "{tenter=classStart}", NULL);
1993409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
2003409f3d5SMasatake YAMATO "^define[ \t\n]+",
2013409f3d5SMasatake YAMATO "", "", "{tenter=defineStart}", NULL);
2023409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
2033409f3d5SMasatake YAMATO "^case[ \t\n]+",
2043409f3d5SMasatake YAMATO "", "", "{tenter=caseStart}", NULL);
2053409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
2063409f3d5SMasatake YAMATO "^(if|elsif|else|unless)[ \t\n]+",
2073409f3d5SMasatake YAMATO "", "", "{tenter=ifStart}", NULL);
2083409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
2093409f3d5SMasatake YAMATO "^node[ \t\n]+",
2103409f3d5SMasatake YAMATO "", "", "{tenter=nodeStart}", NULL);
211eca6f84cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
212b6f7c9a4SMasatake YAMATO "^type[ \t\n]+",
213b6f7c9a4SMasatake YAMATO "", "", "{tenter=typeStart}", NULL);
214b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockStart",
215eca6f84cSMasatake YAMATO "^\\$",
216eca6f84cSMasatake YAMATO "", "", "{tenter=var}", NULL);
2173409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHead",
2183409f3d5SMasatake YAMATO "^/\\*",
2193409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
2203409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHead",
2213409f3d5SMasatake YAMATO "^\\#",
2223409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
2233409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHead",
2240e5a358cSMasatake YAMATO "^[ \t\n]+",
2250e5a358cSMasatake YAMATO "", "", "", NULL);
2260e5a358cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHead",
2273409f3d5SMasatake YAMATO "^\\{",
2283409f3d5SMasatake YAMATO "", "", "{tenter=block,end}", NULL);
2293409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHead",
2303409f3d5SMasatake YAMATO "^.",
2313409f3d5SMasatake YAMATO "", "", "", NULL);
2323409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2333409f3d5SMasatake YAMATO "^/\\*",
2343409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
2353409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2363409f3d5SMasatake YAMATO "^\\#",
2373409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
2383409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2393409f3d5SMasatake YAMATO "^\\{",
2403409f3d5SMasatake YAMATO "", "", "{tenter=block,endWithPop}", NULL);
2413409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2426c3c5407SMasatake YAMATO "^[ \t\n]+",
2436c3c5407SMasatake YAMATO "", "", "", NULL);
2446c3c5407SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2456c3c5407SMasatake YAMATO "^inherits[ \t\n]+(::[a-z][_a-zA-Z0-9:]*|[a-z][_a-zA-Z0-9:]*)[ \t\n]*",
2466c3c5407SMasatake YAMATO "", "", ""
2476c3c5407SMasatake YAMATO "{{\n"
2486c3c5407SMasatake YAMATO " _scopetop {\n"
2496c3c5407SMasatake YAMATO " dup :kind /class eq {\n"
2506c3c5407SMasatake YAMATO " \\1 inherits:\n"
2516c3c5407SMasatake YAMATO " } {\n"
2526c3c5407SMasatake YAMATO " pop\n"
2536c3c5407SMasatake YAMATO " } ifelse\n"
2546c3c5407SMasatake YAMATO " } if\n"
2556c3c5407SMasatake YAMATO "}}", NULL);
2566c3c5407SMasatake YAMATO addLanguageTagMultiTableRegex (language, "blockHeadPopAtLast",
2573409f3d5SMasatake YAMATO "^.",
2583409f3d5SMasatake YAMATO "", "", "", NULL);
2593409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
26078fe1fd3SMasatake YAMATO "^[ \t\n]+",
2613409f3d5SMasatake YAMATO "", "", "", NULL);
2623409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
26373467b38SMasatake YAMATO "^(@)?(::[a-zA-Z0-9:_]+|[a-zA-Z][a-zA-Z0-9:_]*)[ \t\n]*\\{",
26473467b38SMasatake YAMATO "", "", "{tenter=resourceBlock}"
26573467b38SMasatake YAMATO "{{\n"
2665c1bbad2SMasatake YAMATO " \\1 _isstring {\n"
267bd464c18SMasatake YAMATO " /vresource\n"
2685c1bbad2SMasatake YAMATO " } {\n"
2695c1bbad2SMasatake YAMATO " /resource\n"
27073467b38SMasatake YAMATO " } ifelse \\2 true\n"
271bd464c18SMasatake YAMATO " % kind:name type:string true\n"
27273467b38SMasatake YAMATO "}}", NULL);
2733409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2743409f3d5SMasatake YAMATO "^class[ \t\n]+",
2753409f3d5SMasatake YAMATO "", "", "{tenter=classStart}", NULL);
2763409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2773409f3d5SMasatake YAMATO "^define[ \t\n]+",
2783409f3d5SMasatake YAMATO "", "", "{tenter=defineStart}", NULL);
2793409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2803409f3d5SMasatake YAMATO "^case[ \t\n]+",
2813409f3d5SMasatake YAMATO "", "", "{tenter=caseStart}", NULL);
2823409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2833409f3d5SMasatake YAMATO "^(if|elsif|else|unless)[ \t\n]+",
2843409f3d5SMasatake YAMATO "", "", "{tenter=ifStart}", NULL);
2853409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2863409f3d5SMasatake YAMATO "^node[ \t\n]+",
2873409f3d5SMasatake YAMATO "", "", "{tenter=nodeStart}", NULL);
2883409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
289b6f7c9a4SMasatake YAMATO "^type[ \t\n]+",
290b6f7c9a4SMasatake YAMATO "", "", "{tenter=typeStart}", NULL);
291b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
292eca6f84cSMasatake YAMATO "^\\$",
293eca6f84cSMasatake YAMATO "", "", "{tenter=var}", NULL);
294eca6f84cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
295ae1a08feSMasatake YAMATO "^<<?\\|",
296ae1a08feSMasatake YAMATO "", "", "{tenter=skipCollector}", NULL);
297ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
2983409f3d5SMasatake YAMATO "^;?[ \t\n]*\\}",
2993409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
3003409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
3013409f3d5SMasatake YAMATO "^;",
30273467b38SMasatake YAMATO "", "", "{tjump=resourceBlock}{scope=pop}"
30373467b38SMasatake YAMATO "{{\n"
30473467b38SMasatake YAMATO " false\n"
30573467b38SMasatake YAMATO "}}", NULL);
3063409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
3073409f3d5SMasatake YAMATO "^:",
3083409f3d5SMasatake YAMATO "", "", "", NULL);
3093409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
310ae1a08feSMasatake YAMATO "^/\\*",
311ae1a08feSMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
312ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
313ae1a08feSMasatake YAMATO "^\\#",
314ae1a08feSMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
315ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
316ae1a08feSMasatake YAMATO "^'",
317ae1a08feSMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
318ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
319ae1a08feSMasatake YAMATO "^\"",
320ae1a08feSMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
321ae1a08feSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
3220e5a358cSMasatake YAMATO "^\\{",
3230e5a358cSMasatake YAMATO "", "", "{tenter=block}", NULL);
3240e5a358cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "block",
3253409f3d5SMasatake YAMATO "^.",
3263409f3d5SMasatake YAMATO "", "", "{tenter=separator}", NULL);
3273409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "classStart",
3283409f3d5SMasatake YAMATO "^/\\*",
3293409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
3303409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "classStart",
3313409f3d5SMasatake YAMATO "^\\#",
3323409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
3333409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "classStart",
3346c3c5407SMasatake YAMATO "^(::[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]*",
3356c3c5407SMasatake YAMATO "\\1", "c", "{scope=push}"
3365c1bbad2SMasatake YAMATO "{{\n"
3375c1bbad2SMasatake YAMATO " \\3 _isstring {\n"
3385c1bbad2SMasatake YAMATO " . exch inherits:\n"
3396c3c5407SMasatake YAMATO " /blockHead /endWithPop _tentercont\n"
3406c3c5407SMasatake YAMATO " } {\n"
3416c3c5407SMasatake YAMATO " \\2 0 get ?( eq {\n"
3426c3c5407SMasatake YAMATO " % for gathering signature\n"
3436c3c5407SMasatake YAMATO " mark ?(\n"
3446c3c5407SMasatake YAMATO " % {tenter=signature,blockHeadPopAtLast}\n"
3456c3c5407SMasatake YAMATO " /signature /blockHeadPopAtLast _tentercont\n"
3466c3c5407SMasatake YAMATO " } {\n"
3476c3c5407SMasatake YAMATO " 2 /start _matchloc _advanceto\n"
3486c3c5407SMasatake YAMATO " /blockHead /endWithPop _tentercont\n"
3496c3c5407SMasatake YAMATO " } ifelse\n"
3506c3c5407SMasatake YAMATO " } ifelse\n"
3515c1bbad2SMasatake YAMATO "}}", NULL);
3523409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
35378fe1fd3SMasatake YAMATO "^[ \t\n]+",
3543409f3d5SMasatake YAMATO "", "", "", NULL);
3553409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3561e22d3bcSMasatake YAMATO "^\\}",
35773467b38SMasatake YAMATO "", "", "{tleave}"
35873467b38SMasatake YAMATO "{{\n"
35973467b38SMasatake YAMATO " { pop pop } if\n"
36073467b38SMasatake YAMATO "}}", NULL);
3611e22d3bcSMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3623409f3d5SMasatake YAMATO "^'",
3633409f3d5SMasatake YAMATO "", "", "{tenter=resourceName}{_advanceTo=0start}", NULL);
3643409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3653409f3d5SMasatake YAMATO "^\"",
3663409f3d5SMasatake YAMATO "", "", "{tenter=resourceName}{_advanceTo=0start}", NULL);
3673409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3683409f3d5SMasatake YAMATO "^\\[",
3693409f3d5SMasatake YAMATO "", "", "{tenter=resourceArray}", NULL);
3703409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3710e5a358cSMasatake YAMATO "^\\{",
3720e5a358cSMasatake YAMATO "", "", "{tenter=block}", NULL);
3730e5a358cSMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3741e22d3bcSMasatake YAMATO "^/\\*",
3751e22d3bcSMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
3761e22d3bcSMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3771e22d3bcSMasatake YAMATO "^\\#",
3781e22d3bcSMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
3793409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBlock",
3803409f3d5SMasatake YAMATO "^.",
3813409f3d5SMasatake YAMATO "", "", "{tenter=resourceBody}{scope=push}{placeholder}", NULL);
3823409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipLiteral",
3833409f3d5SMasatake YAMATO "^'",
3843409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
3853409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipLiteral",
3863409f3d5SMasatake YAMATO "^\"",
3873409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
3883409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
3893409f3d5SMasatake YAMATO "^/\\*",
3903409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
3913409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
3923409f3d5SMasatake YAMATO "^\\#",
3933409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
3943409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
3953409f3d5SMasatake YAMATO "^'",
3963409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
3973409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
3983409f3d5SMasatake YAMATO "^\"",
3993409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
4003409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
4013409f3d5SMasatake YAMATO "^\\{",
4023409f3d5SMasatake YAMATO "", "", "{tenter=skipBlock}", NULL);
4033409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
4043409f3d5SMasatake YAMATO "^\\}",
4053409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
4063409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipBlock",
4073409f3d5SMasatake YAMATO "^.",
4083409f3d5SMasatake YAMATO "", "", "", NULL);
4093409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4103409f3d5SMasatake YAMATO "^/\\*",
4113409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
4123409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4133409f3d5SMasatake YAMATO "^\\#",
4143409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
4153409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4163409f3d5SMasatake YAMATO "^'",
4173409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
4183409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4193409f3d5SMasatake YAMATO "^\"",
4203409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
4213409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4223409f3d5SMasatake YAMATO "^\\[",
4233409f3d5SMasatake YAMATO "", "", "{tenter=skipArray}", NULL);
4243409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4253409f3d5SMasatake YAMATO "^\\]",
4263409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
4273409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArray",
4283409f3d5SMasatake YAMATO "^.",
4293409f3d5SMasatake YAMATO "", "", "", NULL);
4303409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4313409f3d5SMasatake YAMATO "^/\\*",
4323409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
4333409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4343409f3d5SMasatake YAMATO "^\\#",
4353409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
4363409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4373409f3d5SMasatake YAMATO "^'",
4383409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
4393409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4403409f3d5SMasatake YAMATO "^\"",
4413409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
4423409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4433409f3d5SMasatake YAMATO "^\\(",
4443409f3d5SMasatake YAMATO "", "", "{tenter=skipArgs}", NULL);
4453409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4463409f3d5SMasatake YAMATO "^\\)",
4473409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
4483409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipArgs",
4493409f3d5SMasatake YAMATO "^.",
4503409f3d5SMasatake YAMATO "", "", "", NULL);
4513409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4523409f3d5SMasatake YAMATO "^/\\*",
4533409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
4543409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4553409f3d5SMasatake YAMATO "^\\#",
4563409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
4573409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4583409f3d5SMasatake YAMATO "^'",
4593409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
4603409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4613409f3d5SMasatake YAMATO "^\"",
4623409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
4633409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4643409f3d5SMasatake YAMATO "^<<?\\|",
4653409f3d5SMasatake YAMATO "", "", "{tenter=skipCollector}", NULL);
4663409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4673409f3d5SMasatake YAMATO "^\\|>>?",
4683409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
4693409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipCollector",
4703409f3d5SMasatake YAMATO "^.",
4713409f3d5SMasatake YAMATO "", "", "", NULL);
4720ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4730ee6ddc8SMasatake YAMATO "^/\\*",
4740ee6ddc8SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
4750ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4760ee6ddc8SMasatake YAMATO "^\\#",
4770ee6ddc8SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
4780ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4790ee6ddc8SMasatake YAMATO "^'",
4800ee6ddc8SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
4810ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4820ee6ddc8SMasatake YAMATO "^\"",
4830ee6ddc8SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
4840ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4850ee6ddc8SMasatake YAMATO "^[ \t\n]+",
4860ee6ddc8SMasatake YAMATO "", "", "", NULL);
4870ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
4880ee6ddc8SMasatake YAMATO "^\\)",
4890ee6ddc8SMasatake YAMATO "", "", "{tleave}"
4900ee6ddc8SMasatake YAMATO "{{\n"
4910ee6ddc8SMasatake YAMATO " %\n"
4920ee6ddc8SMasatake YAMATO " % fill signature\n"
4930ee6ddc8SMasatake YAMATO " %\n"
4940ee6ddc8SMasatake YAMATO " dup ?, eq { pop } if\n"
4950ee6ddc8SMasatake YAMATO " ?) _buildstring _scopetop {\n"
4960ee6ddc8SMasatake YAMATO " exch signature:\n"
4970ee6ddc8SMasatake YAMATO " } {\n"
4980ee6ddc8SMasatake YAMATO " % something wrong\n"
4990ee6ddc8SMasatake YAMATO " pop\n"
5000ee6ddc8SMasatake YAMATO " } ifelse\n"
5010ee6ddc8SMasatake YAMATO "}}", NULL);
5020ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
5030ee6ddc8SMasatake YAMATO "^\\$([a-zA-Z][_a-zA-Z0-9:]*)[ \t]*([=,])[ \t]*",
5040ee6ddc8SMasatake YAMATO "\\1", "p", "{scope=ref}"
5050ee6ddc8SMasatake YAMATO "{{\n"
5060ee6ddc8SMasatake YAMATO " % push the name of parameter for filling the signature field of definition\n"
5070ee6ddc8SMasatake YAMATO " \\2 0 get ?= eq {\n"
5080ee6ddc8SMasatake YAMATO " /skipDefaultValue _tenter\n"
5090ee6ddc8SMasatake YAMATO " } if\n"
5100ee6ddc8SMasatake YAMATO " ?$ \\1 ?,\n"
5110ee6ddc8SMasatake YAMATO "}}", NULL);
5120ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "signature",
5130ee6ddc8SMasatake YAMATO "^.",
5140ee6ddc8SMasatake YAMATO "", "", "", NULL);
5150ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5160ee6ddc8SMasatake YAMATO "^/\\*",
5170ee6ddc8SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
5180ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5190ee6ddc8SMasatake YAMATO "^\\#",
5200ee6ddc8SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
5210ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5220ee6ddc8SMasatake YAMATO "^'",
5230ee6ddc8SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
5240ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5250ee6ddc8SMasatake YAMATO "^\"",
5260ee6ddc8SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
5270ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5280ee6ddc8SMasatake YAMATO "^\\[",
5290ee6ddc8SMasatake YAMATO "", "", "{tenter=skipArray}", NULL);
5300ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5310ee6ddc8SMasatake YAMATO "^\\{",
5320ee6ddc8SMasatake YAMATO "", "", "{tenter=skipBlock}", NULL);
5330ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5340ee6ddc8SMasatake YAMATO "^\\(",
5350ee6ddc8SMasatake YAMATO "", "", "{tenter=skipArgs}", NULL);
5360ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5370ee6ddc8SMasatake YAMATO "^,",
5380ee6ddc8SMasatake YAMATO "", "", "{tleave}", NULL);
5390ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5400ee6ddc8SMasatake YAMATO "^\\)",
5410ee6ddc8SMasatake YAMATO "", "", "{tleave}{_advanceTo=0start}", NULL);
5420ee6ddc8SMasatake YAMATO addLanguageTagMultiTableRegex (language, "skipDefaultValue",
5430ee6ddc8SMasatake YAMATO "^.",
5440ee6ddc8SMasatake YAMATO "", "", "", NULL);
5453409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "var",
54620a1fd27SMasatake YAMATO "^(::[a-zA-Z0-9_:]+|[a-zA-Z_][a-zA-Z0-9_:]*)[ \t\n]*=",
54720a1fd27SMasatake YAMATO "\\1", "v", "{tenter=varexpr,end}"
54820a1fd27SMasatake YAMATO "{{\n"
54920a1fd27SMasatake YAMATO " \\1 0 get ?: eq not {\n"
55020a1fd27SMasatake YAMATO " . _scoperef\n"
55120a1fd27SMasatake YAMATO " } if\n"
55220a1fd27SMasatake YAMATO "}}", NULL);
5533409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "defineStart",
5543409f3d5SMasatake YAMATO "^/\\*",
5553409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
5563409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "defineStart",
5573409f3d5SMasatake YAMATO "^\\#",
5583409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
5593409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "defineStart",
56020a1fd27SMasatake YAMATO "^([a-z][_a-zA-Z0-9:]*)[ \n\t]*([({])",
56120a1fd27SMasatake YAMATO "\\1", "d", "{scope=push}"
5620ee6ddc8SMasatake YAMATO "{{\n"
56320a1fd27SMasatake YAMATO " \\2 0 get ?( eq {\n"
5640ee6ddc8SMasatake YAMATO " % for gathering signature\n"
5650ee6ddc8SMasatake YAMATO " mark ?(\n"
56620a1fd27SMasatake YAMATO " % {tenter=signature,blockHeadPopAtLast}\n"
56720a1fd27SMasatake YAMATO " /signature /blockHeadPopAtLast _tentercont\n"
56820a1fd27SMasatake YAMATO " } {\n"
56920a1fd27SMasatake YAMATO " /block /endWithPop _tentercont\n"
57020a1fd27SMasatake YAMATO " } ifelse\n"
5710ee6ddc8SMasatake YAMATO "}}", NULL);
5723409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
5733409f3d5SMasatake YAMATO "^/\\*",
5743409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
5753409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
5763409f3d5SMasatake YAMATO "^\\#",
5773409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
5783409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
57978fe1fd3SMasatake YAMATO "^[ \t\n]+",
5803409f3d5SMasatake YAMATO "", "", "", NULL);
5813409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
5823409f3d5SMasatake YAMATO "^\\{",
5833409f3d5SMasatake YAMATO "", "", "{tenter=caseBlock}", NULL);
5843409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
5853409f3d5SMasatake YAMATO "^}",
5863409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
5873409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseStart",
5883409f3d5SMasatake YAMATO "^.",
5893409f3d5SMasatake YAMATO "", "", "", NULL);
5903409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
5913409f3d5SMasatake YAMATO "^/\\*",
5923409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
5933409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
5943409f3d5SMasatake YAMATO "^\\#",
5953409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
5963409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
59778fe1fd3SMasatake YAMATO "^[ \t\n]+",
5983409f3d5SMasatake YAMATO "", "", "", NULL);
5993409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
6003409f3d5SMasatake YAMATO "^'",
6013409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
6023409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
6033409f3d5SMasatake YAMATO "^\"",
6043409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
6053409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
6063409f3d5SMasatake YAMATO "^\\{",
6073409f3d5SMasatake YAMATO "", "", "{tenter=block,end}", NULL);
6083409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "ifStart",
6093409f3d5SMasatake YAMATO "^.",
6103409f3d5SMasatake YAMATO "", "", "", NULL);
6113409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6123409f3d5SMasatake YAMATO "^/\\*",
6133409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
6143409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6153409f3d5SMasatake YAMATO "^\\#",
6163409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
6173409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
61878fe1fd3SMasatake YAMATO "^[ \t\n]+",
6193409f3d5SMasatake YAMATO "", "", "", NULL);
6203409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6213409f3d5SMasatake YAMATO "^'([^']+)'",
6223409f3d5SMasatake YAMATO "\\1", "n", "", NULL);
6233409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6243409f3d5SMasatake YAMATO "^\"([^\"]+)\"",
6253409f3d5SMasatake YAMATO "\\1", "n", "", NULL);
6263409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6273409f3d5SMasatake YAMATO "^\\{",
6283409f3d5SMasatake YAMATO "", "", "{tenter=block,end}", NULL);
6293409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "nodeStart",
6303409f3d5SMasatake YAMATO "^.",
6313409f3d5SMasatake YAMATO "", "", "", NULL);
632b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "typeStart",
633b6f7c9a4SMasatake YAMATO "^/\\*",
634b6f7c9a4SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
635b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "typeStart",
636b6f7c9a4SMasatake YAMATO "^\\#",
637b6f7c9a4SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
638b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "typeStart",
639b6f7c9a4SMasatake YAMATO "^[ \t\n]+",
640b6f7c9a4SMasatake YAMATO "", "", "", NULL);
641b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "typeStart",
642b6f7c9a4SMasatake YAMATO "^([a-zA-Z][a-zA-Z0-9]*::[a-zA-Z][a-zA-Z0-9]+)[ \t\n]*=[ \t\n]*",
643b6f7c9a4SMasatake YAMATO "\\1", "t", "{tenter=varexpr,end}", NULL);
644b6f7c9a4SMasatake YAMATO addLanguageTagMultiTableRegex (language, "typeStart",
645b6f7c9a4SMasatake YAMATO "^.",
646b6f7c9a4SMasatake YAMATO "", "", "", NULL);
6473409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment_multiline",
6483409f3d5SMasatake YAMATO "^\\*/",
6493409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
6503409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment_multiline",
6513409f3d5SMasatake YAMATO "^.",
6523409f3d5SMasatake YAMATO "", "", "", NULL);
6533409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment_oneline",
6543409f3d5SMasatake YAMATO "^\n",
6553409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
6563409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment_oneline",
6573409f3d5SMasatake YAMATO "^.",
6583409f3d5SMasatake YAMATO "", "", "", NULL);
6593409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceName",
660bd464c18SMasatake YAMATO "^'([^']+)'|\"([^\"]+)\"",
661bd464c18SMasatake YAMATO "", "", "{tenter=resourceBody,end}"
66273467b38SMasatake YAMATO "{{\n"
66373467b38SMasatake YAMATO " dup {\n"
664bd464c18SMasatake YAMATO " 1 index (typename) exch [ 3 1 roll ]\n"
665ee8dc419SMasatake YAMATO " % kind:name type:string true [ (typename) type:string ]\n"
666bd464c18SMasatake YAMATO " <<\n"
667bd464c18SMasatake YAMATO " 4 index\n"
668ee8dc419SMasatake YAMATO " % kind:name type:string true [ (typename) type:string ] << kind:name\n"
669bd464c18SMasatake YAMATO " 1 exch dup 2 exch\n"
670bd464c18SMasatake YAMATO " >>\n"
671ee8dc419SMasatake YAMATO " % kind:name type:string true [ (typename) type:string ] << 1 kind:name 2 kind:name >>\n"
672bd464c18SMasatake YAMATO " trymaketag\n"
673ee8dc419SMasatake YAMATO " % kind:name type:string true [ (typename) type:string ] tag:int true %\n"
674ee8dc419SMasatake YAMATO " % kind:name type:string true [ (typename) type:string ] false\n"
675bd464c18SMasatake YAMATO " {\n"
676bd464c18SMasatake YAMATO " dup _scopepush\n"
677bd464c18SMasatake YAMATO " exch typeref:\n"
678bd464c18SMasatake YAMATO " } {\n"
679bd464c18SMasatake YAMATO " pop\n"
680bd464c18SMasatake YAMATO " } ifelse\n"
681bd464c18SMasatake YAMATO " } {\n"
682bd464c18SMasatake YAMATO " << 1 /resource 2 /resource >> trymaketag {\n"
683bd464c18SMasatake YAMATO " _scopepush\n"
68473467b38SMasatake YAMATO " } if\n"
685bd464c18SMasatake YAMATO " } ifelse\n"
68673467b38SMasatake YAMATO "}}", NULL);
6873409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceName",
6883409f3d5SMasatake YAMATO "^",
6893409f3d5SMasatake YAMATO "", "", "{tquit}", NULL);
6903409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceNameInArray",
691ee8dc419SMasatake YAMATO "^'([^']+)'|\"([^\"]+)\"",
692ee8dc419SMasatake YAMATO "", "", "{tleave}"
693ee8dc419SMasatake YAMATO "{{\n"
694ee8dc419SMasatake YAMATO " dup {\n"
695ee8dc419SMasatake YAMATO " % do the same as resourceName\n"
696ee8dc419SMasatake YAMATO " 1 index (typename) exch [ 3 1 roll ]\n"
697ee8dc419SMasatake YAMATO " << 4 index 1 exch dup 2 exch >> trymaketag\n"
698ee8dc419SMasatake YAMATO " {\n"
699ee8dc419SMasatake YAMATO " dup _scoperef\n"
700ee8dc419SMasatake YAMATO " exch typeref:\n"
701ee8dc419SMasatake YAMATO " } {\n"
702ee8dc419SMasatake YAMATO " pop\n"
703ee8dc419SMasatake YAMATO " } ifelse\n"
704ee8dc419SMasatake YAMATO "\n"
705ee8dc419SMasatake YAMATO " } {\n"
706ee8dc419SMasatake YAMATO " << 1 /resource 2 /resource >> trymaketag {\n"
707ee8dc419SMasatake YAMATO " _scoperef\n"
708ee8dc419SMasatake YAMATO " } if\n"
709ee8dc419SMasatake YAMATO " } ifelse\n"
710ee8dc419SMasatake YAMATO "}}", NULL);
7113409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceNameInArray",
7123409f3d5SMasatake YAMATO "^",
7133409f3d5SMasatake YAMATO "", "", "{tquit}", NULL);
7143409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
71578fe1fd3SMasatake YAMATO "^[^/#{'\";}<]+",
7163409f3d5SMasatake YAMATO "", "", "", NULL);
7173409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7183409f3d5SMasatake YAMATO "^'",
7193409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
7203409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7213409f3d5SMasatake YAMATO "^\"",
7223409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
7233409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7243409f3d5SMasatake YAMATO "^\\}",
7253409f3d5SMasatake YAMATO "", "", "{tleave}{_advanceTo=0start}{scope=pop}", NULL);
7263409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7276ba08990SMasatake YAMATO "^\\{",
7286ba08990SMasatake YAMATO "", "", "{tenter=skipBlock}", NULL);
7296ba08990SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7306ba08990SMasatake YAMATO "^;",
7316ba08990SMasatake YAMATO "", "", "{tleave}{scope=pop}", NULL);
7326ba08990SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7333409f3d5SMasatake YAMATO "^<<?\\|",
7343409f3d5SMasatake YAMATO "", "", "{tenter=skipCollector}", NULL);
7353409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7366ba08990SMasatake YAMATO "^/\\*",
7376ba08990SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
7386ba08990SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7396ba08990SMasatake YAMATO "^\\#",
7406ba08990SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
7416ba08990SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceBody",
7423409f3d5SMasatake YAMATO "^.",
7433409f3d5SMasatake YAMATO "", "", "", NULL);
7443409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
7453409f3d5SMasatake YAMATO "^/\\*",
7463409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
7473409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
7483409f3d5SMasatake YAMATO "^\\#",
7493409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
7503409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
75178fe1fd3SMasatake YAMATO "^[ \t\n]+",
7523409f3d5SMasatake YAMATO "", "", "", NULL);
7533409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
754ee8dc419SMasatake YAMATO "^['\"]",
7553409f3d5SMasatake YAMATO "", "", "{tenter=resourceNameInArray}{_advanceTo=0start}", NULL);
7563409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
7573409f3d5SMasatake YAMATO "^\\]",
7583409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
7593409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "resourceArray",
7603409f3d5SMasatake YAMATO "^.",
7613409f3d5SMasatake YAMATO "", "", "", NULL);
7623409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7633409f3d5SMasatake YAMATO "^/\\*",
7643409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
7653409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7663409f3d5SMasatake YAMATO "^\\#",
7673409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
7683409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7693409f3d5SMasatake YAMATO "^'",
7703409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral,end}", NULL);
7713409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7723409f3d5SMasatake YAMATO "^\"",
7733409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral,end}", NULL);
7743409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7753409f3d5SMasatake YAMATO "^\\[",
7763409f3d5SMasatake YAMATO "", "", "{tenter=skipArray,end}", NULL);
7773409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7783409f3d5SMasatake YAMATO "^\\{",
7793409f3d5SMasatake YAMATO "", "", "{tenter=skipBlock,end}", NULL);
7803409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7813409f3d5SMasatake YAMATO "^\\(",
7823409f3d5SMasatake YAMATO "", "", "{tenter=skipArgs,end}", NULL);
7833409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
784303b676eSMasatake YAMATO "^\\$[a-zA-Z:][0-9a-zA-Z:]*",
7853409f3d5SMasatake YAMATO "", "", "", NULL);
7863409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7873409f3d5SMasatake YAMATO "^[0-9]+(\\.[0-9]+(e([+-][0-9]+)))?",
7883409f3d5SMasatake YAMATO "", "", "", NULL);
7893409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7903409f3d5SMasatake YAMATO "^[a-zA-Z0-9:][0-9a-zA-Z:]*",
7913409f3d5SMasatake YAMATO "", "", "", NULL);
7923409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7933409f3d5SMasatake YAMATO "^[ \t]",
7943409f3d5SMasatake YAMATO "", "", "", NULL);
7953409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7963409f3d5SMasatake YAMATO "^\n",
7973409f3d5SMasatake YAMATO "", "", "{tleave}", NULL);
7983409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "varexpr",
7993409f3d5SMasatake YAMATO "^.",
8003409f3d5SMasatake YAMATO "", "", "", NULL);
8013409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8023409f3d5SMasatake YAMATO "^/\\*",
8033409f3d5SMasatake YAMATO "", "", "{tenter=comment_multiline}", NULL);
8043409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8053409f3d5SMasatake YAMATO "^\\#",
8063409f3d5SMasatake YAMATO "", "", "{tenter=comment_oneline}", NULL);
8073409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
80878fe1fd3SMasatake YAMATO "^[ \t\n]+",
8093409f3d5SMasatake YAMATO "", "", "", NULL);
8103409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8113409f3d5SMasatake YAMATO "^'",
8123409f3d5SMasatake YAMATO "", "", "{tenter=ssliteral}", NULL);
8133409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8143409f3d5SMasatake YAMATO "^\"",
8153409f3d5SMasatake YAMATO "", "", "{tenter=dsliteral}", NULL);
8163409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8173409f3d5SMasatake YAMATO "^:",
8180e5a358cSMasatake YAMATO "", "", "{tenter=blockHead}", NULL);
8193409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8203409f3d5SMasatake YAMATO "^}",
8213409f3d5SMasatake YAMATO "", "", "{tleave}{_advanceTo=0start}", NULL);
8223409f3d5SMasatake YAMATO addLanguageTagMultiTableRegex (language, "caseBlock",
8233409f3d5SMasatake YAMATO "^.",
8243409f3d5SMasatake YAMATO "", "", "", NULL);
8253409f3d5SMasatake YAMATO }
8263409f3d5SMasatake YAMATO
PuppetManifestParser(void)8273409f3d5SMasatake YAMATO extern parserDefinition* PuppetManifestParser (void)
8283409f3d5SMasatake YAMATO {
8293409f3d5SMasatake YAMATO static const char *const extensions [] = {
8303409f3d5SMasatake YAMATO "pp",
8313409f3d5SMasatake YAMATO NULL
8323409f3d5SMasatake YAMATO };
8333409f3d5SMasatake YAMATO
8343409f3d5SMasatake YAMATO static const char *const aliases [] = {
8353409f3d5SMasatake YAMATO NULL
8363409f3d5SMasatake YAMATO };
8373409f3d5SMasatake YAMATO
8383409f3d5SMasatake YAMATO static const char *const patterns [] = {
8393409f3d5SMasatake YAMATO NULL
8403409f3d5SMasatake YAMATO };
8413409f3d5SMasatake YAMATO
842f570d51fSMasatake YAMATO static scopeSeparator PuppetManifestClassSeparators [] = {
843f570d51fSMasatake YAMATO { KIND_GHOST_INDEX, "::" },
844f570d51fSMasatake YAMATO };
845f570d51fSMasatake YAMATO
8463409f3d5SMasatake YAMATO static kindDefinition PuppetManifestKindTable [] = {
8472625d890SMasatake YAMATO {
8482625d890SMasatake YAMATO true, 'c', "class", "classes",
849f570d51fSMasatake YAMATO ATTACH_SEPARATORS(PuppetManifestClassSeparators),
8502625d890SMasatake YAMATO },
8512625d890SMasatake YAMATO {
8522625d890SMasatake YAMATO true, 'd', "definition", "definitions",
8532625d890SMasatake YAMATO },
8542625d890SMasatake YAMATO {
8552625d890SMasatake YAMATO true, 'n', "node", "nodes",
8562625d890SMasatake YAMATO },
8572625d890SMasatake YAMATO {
8582625d890SMasatake YAMATO true, 'r', "resource", "resources",
8592625d890SMasatake YAMATO },
8602625d890SMasatake YAMATO {
8612625d890SMasatake YAMATO true, 'v', "variable", "variables",
8622625d890SMasatake YAMATO },
8630ee6ddc8SMasatake YAMATO {
8640ee6ddc8SMasatake YAMATO true, 'p', "param", "parameters",
8650ee6ddc8SMasatake YAMATO },
866bd464c18SMasatake YAMATO {
867bd464c18SMasatake YAMATO true, 'V', "vresource", "virtual resources",
868bd464c18SMasatake YAMATO },
869b6f7c9a4SMasatake YAMATO {
870b6f7c9a4SMasatake YAMATO true, 't', "type", "type aliases",
871b6f7c9a4SMasatake YAMATO },
8723409f3d5SMasatake YAMATO };
8733409f3d5SMasatake YAMATO
8746b1ec470SMasatake YAMATO parserDefinition* const def = parserNew ("PuppetManifest");
8753409f3d5SMasatake YAMATO
8763409f3d5SMasatake YAMATO def->enabled = true;
8773409f3d5SMasatake YAMATO def->extensions = extensions;
8783409f3d5SMasatake YAMATO def->patterns = patterns;
8793409f3d5SMasatake YAMATO def->aliases = aliases;
8803409f3d5SMasatake YAMATO def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
8816b1a862eSMasatake YAMATO def->useCork = CORK_QUEUE;
8823409f3d5SMasatake YAMATO def->kindTable = PuppetManifestKindTable;
8833409f3d5SMasatake YAMATO def->kindCount = ARRAY_SIZE(PuppetManifestKindTable);
884f570d51fSMasatake YAMATO def->requestAutomaticFQTag = true;
885f570d51fSMasatake YAMATO def->defaultScopeSeparator = "::";
8863409f3d5SMasatake YAMATO def->initialize = initializePuppetManifestParser;
8873409f3d5SMasatake YAMATO
8883409f3d5SMasatake YAMATO return def;
8893409f3d5SMasatake YAMATO }
890