1*e1f93342SMasatake YAMATO /*
2*e1f93342SMasatake YAMATO * Generated by ./misc/optlib2c from optlib/scss.ctags, Don't edit this manually.
3*e1f93342SMasatake YAMATO */
4*e1f93342SMasatake YAMATO #include "general.h"
5*e1f93342SMasatake YAMATO #include "parse.h"
6*e1f93342SMasatake YAMATO #include "routines.h"
7*e1f93342SMasatake YAMATO #include "field.h"
8*e1f93342SMasatake YAMATO #include "xtag.h"
9*e1f93342SMasatake YAMATO
10*e1f93342SMasatake YAMATO
initializeSCSSParser(const langType language)11*e1f93342SMasatake YAMATO static void initializeSCSSParser (const langType language)
12*e1f93342SMasatake YAMATO {
13*e1f93342SMasatake YAMATO
14*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "toplevel");
15*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "comment");
16*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "interp");
17*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "args");
18*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "map");
19*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "strs");
20*e1f93342SMasatake YAMATO addLanguageRegexTable (language, "strd");
21*e1f93342SMasatake YAMATO
22*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
23*e1f93342SMasatake YAMATO "^//[^\n]*\n?",
24*e1f93342SMasatake YAMATO "", "", "", NULL);
25*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
26*e1f93342SMasatake YAMATO "^/\\*",
27*e1f93342SMasatake YAMATO "", "", "{tenter=comment}", NULL);
28*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
29*e1f93342SMasatake YAMATO "^#\\{",
30*e1f93342SMasatake YAMATO "", "", "{tenter=interp}", NULL);
31*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
32*e1f93342SMasatake YAMATO "^'",
33*e1f93342SMasatake YAMATO "", "", "{tenter=strs}", NULL);
34*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
35*e1f93342SMasatake YAMATO "^\"",
36*e1f93342SMasatake YAMATO "", "", "{tenter=strd}", NULL);
37*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
38*e1f93342SMasatake YAMATO "^[ \t]([A-Za-z0-9_-]+)[ \t]*:[^\n]*\n?",
39*e1f93342SMasatake YAMATO "", "", "", NULL);
40*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
41*e1f93342SMasatake YAMATO "^@mixin[ \t]+([A-Za-z0-9_-]+)",
42*e1f93342SMasatake YAMATO "\\1", "m", "{tenter=args}", NULL);
43*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
44*e1f93342SMasatake YAMATO "^@function[ \t]+([A-Za-z0-9_-]+)",
45*e1f93342SMasatake YAMATO "\\1", "f", "{tenter=args}", NULL);
46*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
47*e1f93342SMasatake YAMATO "^@each[ \t]+\\$([A-Za-z0-9_-]+)[ \t]in[ \t]+",
48*e1f93342SMasatake YAMATO "\\1", "v", "", NULL);
49*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
50*e1f93342SMasatake YAMATO "^@for[ \t]+\\$([A-Za-z0-9_-]+)[ \t]from[ \t]+.*[ \t]+(to|through)[ \t]+[^{]+",
51*e1f93342SMasatake YAMATO "\\1", "v", "", NULL);
52*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
53*e1f93342SMasatake YAMATO "^@[^\n]+\n?",
54*e1f93342SMasatake YAMATO "", "", "", NULL);
55*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
56*e1f93342SMasatake YAMATO "^:[^{;]+;\n?",
57*e1f93342SMasatake YAMATO "", "", "", NULL);
58*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
59*e1f93342SMasatake YAMATO "^:[^\n;{]+\n",
60*e1f93342SMasatake YAMATO "", "", "", NULL);
61*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
62*e1f93342SMasatake YAMATO "^::?([A-Za-z0-9_-]+)[ \t]*[,({]",
63*e1f93342SMasatake YAMATO "", "", "", NULL);
64*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
65*e1f93342SMasatake YAMATO "^:[^\n{]+[;{]\n?",
66*e1f93342SMasatake YAMATO "", "", "", NULL);
67*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
68*e1f93342SMasatake YAMATO "^\\$([A-Za-z0-9_-]+)[ \t]*:[ \t]*\\(",
69*e1f93342SMasatake YAMATO "\\1", "v", "{tenter=map}", NULL);
70*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
71*e1f93342SMasatake YAMATO "^\\$([A-Za-z0-9_-]+)[ \t]*:[^\n]*\n?",
72*e1f93342SMasatake YAMATO "\\1", "v", "", NULL);
73*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
74*e1f93342SMasatake YAMATO "^([.][A-Za-z0-9_:-]+)",
75*e1f93342SMasatake YAMATO "\\1", "c", "", NULL);
76*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
77*e1f93342SMasatake YAMATO "^(%[A-Za-z0-9_:-]+)",
78*e1f93342SMasatake YAMATO "\\1", "P", "", NULL);
79*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
80*e1f93342SMasatake YAMATO "^#([A-Za-z0-9_:-]+)",
81*e1f93342SMasatake YAMATO "\\1", "i", "", NULL);
82*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "toplevel",
83*e1f93342SMasatake YAMATO "^.",
84*e1f93342SMasatake YAMATO "", "", "", NULL);
85*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment",
86*e1f93342SMasatake YAMATO "^\\*/",
87*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
88*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "comment",
89*e1f93342SMasatake YAMATO "^.",
90*e1f93342SMasatake YAMATO "", "", "", NULL);
91*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "interp",
92*e1f93342SMasatake YAMATO "^\\}",
93*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
94*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "interp",
95*e1f93342SMasatake YAMATO "^.",
96*e1f93342SMasatake YAMATO "", "", "", NULL);
97*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "args",
98*e1f93342SMasatake YAMATO "^\\{",
99*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
100*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "args",
101*e1f93342SMasatake YAMATO "^#\\{",
102*e1f93342SMasatake YAMATO "", "", "{tenter=interp}", NULL);
103*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "args",
104*e1f93342SMasatake YAMATO "^\\$([A-Za-z0-9_-]+)[ \t]*(:([ \t]*\\$)?|[,)])",
105*e1f93342SMasatake YAMATO "\\1", "z", "", NULL);
106*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "args",
107*e1f93342SMasatake YAMATO "^.",
108*e1f93342SMasatake YAMATO "", "", "", NULL);
109*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
110*e1f93342SMasatake YAMATO "^//[^\n]*\n?",
111*e1f93342SMasatake YAMATO "", "", "", NULL);
112*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
113*e1f93342SMasatake YAMATO "^/\\*",
114*e1f93342SMasatake YAMATO "", "", "{tenter=comment}", NULL);
115*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
116*e1f93342SMasatake YAMATO "^#\\{",
117*e1f93342SMasatake YAMATO "", "", "{tenter=interp}", NULL);
118*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
119*e1f93342SMasatake YAMATO "^\\)",
120*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
121*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
122*e1f93342SMasatake YAMATO "^([A-Za-z0-9_-]+)[ \t]*:",
123*e1f93342SMasatake YAMATO "\\1", "v", "", NULL);
124*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
125*e1f93342SMasatake YAMATO "^'",
126*e1f93342SMasatake YAMATO "", "", "{tenter=strs}", NULL);
127*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
128*e1f93342SMasatake YAMATO "^\"",
129*e1f93342SMasatake YAMATO "", "", "{tenter=strd}", NULL);
130*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "map",
131*e1f93342SMasatake YAMATO "^.",
132*e1f93342SMasatake YAMATO "", "", "", NULL);
133*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strs",
134*e1f93342SMasatake YAMATO "^'",
135*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
136*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strs",
137*e1f93342SMasatake YAMATO "^#\\{",
138*e1f93342SMasatake YAMATO "", "", "{tenter=interp}", NULL);
139*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strs",
140*e1f93342SMasatake YAMATO "^[^'#\\\\]+",
141*e1f93342SMasatake YAMATO "", "", "", NULL);
142*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strs",
143*e1f93342SMasatake YAMATO "^\\\\?.",
144*e1f93342SMasatake YAMATO "", "", "", NULL);
145*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strd",
146*e1f93342SMasatake YAMATO "^\"",
147*e1f93342SMasatake YAMATO "", "", "{tleave}", NULL);
148*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strd",
149*e1f93342SMasatake YAMATO "^#\\{",
150*e1f93342SMasatake YAMATO "", "", "{tenter=interp}", NULL);
151*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strd",
152*e1f93342SMasatake YAMATO "^[^\"#\\\\]+",
153*e1f93342SMasatake YAMATO "", "", "", NULL);
154*e1f93342SMasatake YAMATO addLanguageTagMultiTableRegex (language, "strd",
155*e1f93342SMasatake YAMATO "^\\\\?.",
156*e1f93342SMasatake YAMATO "", "", "", NULL);
157*e1f93342SMasatake YAMATO }
158*e1f93342SMasatake YAMATO
SCSSParser(void)159*e1f93342SMasatake YAMATO extern parserDefinition* SCSSParser (void)
160*e1f93342SMasatake YAMATO {
161*e1f93342SMasatake YAMATO static const char *const extensions [] = {
162*e1f93342SMasatake YAMATO "scss",
163*e1f93342SMasatake YAMATO NULL
164*e1f93342SMasatake YAMATO };
165*e1f93342SMasatake YAMATO
166*e1f93342SMasatake YAMATO static const char *const aliases [] = {
167*e1f93342SMasatake YAMATO NULL
168*e1f93342SMasatake YAMATO };
169*e1f93342SMasatake YAMATO
170*e1f93342SMasatake YAMATO static const char *const patterns [] = {
171*e1f93342SMasatake YAMATO NULL
172*e1f93342SMasatake YAMATO };
173*e1f93342SMasatake YAMATO
174*e1f93342SMasatake YAMATO static kindDefinition SCSSKindTable [] = {
175*e1f93342SMasatake YAMATO {
176*e1f93342SMasatake YAMATO true, 'm', "mixin", "mixins",
177*e1f93342SMasatake YAMATO },
178*e1f93342SMasatake YAMATO {
179*e1f93342SMasatake YAMATO true, 'f', "function", "functions",
180*e1f93342SMasatake YAMATO },
181*e1f93342SMasatake YAMATO {
182*e1f93342SMasatake YAMATO true, 'v', "variable", "variables",
183*e1f93342SMasatake YAMATO },
184*e1f93342SMasatake YAMATO {
185*e1f93342SMasatake YAMATO true, 'c', "class", "classes",
186*e1f93342SMasatake YAMATO },
187*e1f93342SMasatake YAMATO {
188*e1f93342SMasatake YAMATO true, 'P', "placeholder", "placeholder classes",
189*e1f93342SMasatake YAMATO },
190*e1f93342SMasatake YAMATO {
191*e1f93342SMasatake YAMATO true, 'i', "id", "identities",
192*e1f93342SMasatake YAMATO },
193*e1f93342SMasatake YAMATO {
194*e1f93342SMasatake YAMATO true, 'z', "parameter", "function parameters",
195*e1f93342SMasatake YAMATO },
196*e1f93342SMasatake YAMATO };
197*e1f93342SMasatake YAMATO
198*e1f93342SMasatake YAMATO parserDefinition* const def = parserNew ("SCSS");
199*e1f93342SMasatake YAMATO
200*e1f93342SMasatake YAMATO def->enabled = true;
201*e1f93342SMasatake YAMATO def->extensions = extensions;
202*e1f93342SMasatake YAMATO def->patterns = patterns;
203*e1f93342SMasatake YAMATO def->aliases = aliases;
204*e1f93342SMasatake YAMATO def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
205*e1f93342SMasatake YAMATO def->kindTable = SCSSKindTable;
206*e1f93342SMasatake YAMATO def->kindCount = ARRAY_SIZE(SCSSKindTable);
207*e1f93342SMasatake YAMATO def->initialize = initializeSCSSParser;
208*e1f93342SMasatake YAMATO
209*e1f93342SMasatake YAMATO return def;
210*e1f93342SMasatake YAMATO }
211