xref: /Universal-ctags/optlib/man.c (revision a2073a83ebac9c08123fa77aaa3de27c5ea1b00f)
18eefea3cSMasatake YAMATO /*
28eefea3cSMasatake YAMATO  * Generated by ./misc/optlib2c from optlib/man.ctags, Don't edit this manually.
38eefea3cSMasatake YAMATO  */
48eefea3cSMasatake YAMATO #include "general.h"
58eefea3cSMasatake YAMATO #include "parse.h"
68eefea3cSMasatake YAMATO #include "routines.h"
70d502ef0SMasatake YAMATO #include "field.h"
80d502ef0SMasatake YAMATO #include "xtag.h"
98eefea3cSMasatake YAMATO 
108eefea3cSMasatake YAMATO 
11*a2073a83SMasatake YAMATO typedef enum {
12*a2073a83SMasatake YAMATO 	K_TITLE,
13*a2073a83SMasatake YAMATO 	K_SECTION,
14*a2073a83SMasatake YAMATO 	K_SUBSECTION,
15*a2073a83SMasatake YAMATO } ManKind;
16*a2073a83SMasatake YAMATO 
17*a2073a83SMasatake YAMATO 
initializeManParser(const langType language)1880fd3f70SMasatake YAMATO static void initializeManParser (const langType language)
198eefea3cSMasatake YAMATO {
202b2165a2SMasatake YAMATO 	addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
21*a2073a83SMasatake YAMATO 		"{{    % adjustment:int FILL-END-OF-SCOPE -\n"
22*a2073a83SMasatake YAMATO 		"    %\n"
23*a2073a83SMasatake YAMATO 		"    % Note: The group 1 of a regex matching is assumed.\n"
24*a2073a83SMasatake YAMATO 		"    %       An entry on the scope stack is assumed.\n"
25*a2073a83SMasatake YAMATO 		"    /fill-end-of-scope {\n"
26*a2073a83SMasatake YAMATO 		"         _scopetop pop exch\n"
27*a2073a83SMasatake YAMATO 		"         % scope-top:int adjustment:int\n"
28*a2073a83SMasatake YAMATO 		"         1 /start _matchloc _matchloc2line exch\n"
29*a2073a83SMasatake YAMATO 		"         % scope-top:int line adjustment:int\n"
30*a2073a83SMasatake YAMATO 		"         2 copy gt {\n"
31*a2073a83SMasatake YAMATO 		"             sub end:\n"
322b2165a2SMasatake YAMATO 		"         } {\n"
33*a2073a83SMasatake YAMATO 		"             pop pop pop\n"
342b2165a2SMasatake YAMATO 		"         } ifelse\n"
35*a2073a83SMasatake YAMATO 		"    } def\n"
36*a2073a83SMasatake YAMATO 		"    % adjustment:int /replace HEADING-ACTION -\n"
37*a2073a83SMasatake YAMATO 		"    % /push HEADING-ACTION -\n"
38*a2073a83SMasatake YAMATO 		"    /heading-action {\n"
39*a2073a83SMasatake YAMATO 		"        /replace eq {\n"
40*a2073a83SMasatake YAMATO 		"             %\n"
41*a2073a83SMasatake YAMATO 		"             % Before removing the tag at the top of the scope stack,\n"
42*a2073a83SMasatake YAMATO 		"             % fill the end field of the tag.\n"
43*a2073a83SMasatake YAMATO 		"             %\n"
44*a2073a83SMasatake YAMATO 		"             % input0.man\n"
45*a2073a83SMasatake YAMATO 		"             % ----------------------------------------------------\n"
46*a2073a83SMasatake YAMATO 		"             %   .SH SEC1\n"
47*a2073a83SMasatake YAMATO 		"             %   ...\n"
48*a2073a83SMasatake YAMATO 		"             %E: This is the end of the SEC1.\n"
49*a2073a83SMasatake YAMATO 		"             %   .SH\n"
50*a2073a83SMasatake YAMATO 		"             %C: SEC2\n"
51*a2073a83SMasatake YAMATO 		"             %\n"
52*a2073a83SMasatake YAMATO 		"             % ----------------------------------------------------\n"
53*a2073a83SMasatake YAMATO 		"             %\n"
54*a2073a83SMasatake YAMATO 		"             % C represents the current input line. The parser must\n"
55*a2073a83SMasatake YAMATO 		"             % fill the end field of \"SEC1\", the tag at the top,\n"
56*a2073a83SMasatake YAMATO 		"             % with the line number of E.\n"
57*a2073a83SMasatake YAMATO 		"             %\n"
58*a2073a83SMasatake YAMATO 		"             %    E = C - 2\n"
59*a2073a83SMasatake YAMATO 		"             %\n"
60*a2073a83SMasatake YAMATO 		"             % input1.man\n"
61*a2073a83SMasatake YAMATO 		"             % ----------------------------------------------------\n"
62*a2073a83SMasatake YAMATO 		"             %   .SH SEC3\n"
63*a2073a83SMasatake YAMATO 		"             %   ...\n"
64*a2073a83SMasatake YAMATO 		"             %E: This is the end of the SEC1.\n"
65*a2073a83SMasatake YAMATO 		"             %C:  .SH SEC4\n"
66*a2073a83SMasatake YAMATO 		"             %\n"
67*a2073a83SMasatake YAMATO 		"             % ----------------------------------------------------\n"
68*a2073a83SMasatake YAMATO 		"             %\n"
69*a2073a83SMasatake YAMATO 		"             % In this case\n"
70*a2073a83SMasatake YAMATO 		"             %\n"
71*a2073a83SMasatake YAMATO 		"             %    E = C - 1\n"
72*a2073a83SMasatake YAMATO 		"             %\n"
73*a2073a83SMasatake YAMATO 		"             % The offset for the adjustment depends on the conctxt.\n"
74*a2073a83SMasatake YAMATO 		"             %\n"
75*a2073a83SMasatake YAMATO 		"             fill-end-of-scope\n"
762b2165a2SMasatake YAMATO 		"             _scopepop\n"
772b2165a2SMasatake YAMATO 		"        } if\n"
782b2165a2SMasatake YAMATO 		"\n"
792b2165a2SMasatake YAMATO 		"        _scopetop {\n"
802b2165a2SMasatake YAMATO 		"            . exch scope:\n"
812b2165a2SMasatake YAMATO 		"        } if\n"
822b2165a2SMasatake YAMATO 		"        . _scopepush\n"
832b2165a2SMasatake YAMATO 		"    } def\n"
842b2165a2SMasatake YAMATO 		"}}");
8580fd3f70SMasatake YAMATO 
8680fd3f70SMasatake YAMATO 	addLanguageRegexTable (language, "main");
87373135a8SMasatake YAMATO 	addLanguageRegexTable (language, "section");
882b2165a2SMasatake YAMATO 	addLanguageRegexTable (language, "sectionheading");
89*a2073a83SMasatake YAMATO 	addLanguageRegexTable (language, "subsection");
90*a2073a83SMasatake YAMATO 	addLanguageRegexTable (language, "subsectionheading");
91373135a8SMasatake YAMATO 	addLanguageRegexTable (language, "EOF");
92373135a8SMasatake YAMATO 	addLanguageRegexTable (language, "SKIP");
93373135a8SMasatake YAMATO 	addLanguageRegexTable (language, "REST");
94373135a8SMasatake YAMATO 	addLanguageRegexTable (language, "GUARD");
9580fd3f70SMasatake YAMATO 
9680fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
9780fd3f70SMasatake YAMATO 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
9880fd3f70SMasatake YAMATO 	                               "", "", "{icase}", NULL);
9980fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
10080fd3f70SMasatake YAMATO 	                               "^\\.TH[\t ]+\"([^\"]+)\"[^\n]*\n",
101373135a8SMasatake YAMATO 	                               "\\1", "t", "{icase}{scope=set}", NULL);
10280fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
10380fd3f70SMasatake YAMATO 	                               "^\\.TH[\t ]+([^\t \n]+)[^\n]*\n",
104373135a8SMasatake YAMATO 	                               "\\1", "t", "{icase}{scope=set}", NULL);
10580fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
10680fd3f70SMasatake YAMATO 	                               "^\\.SH[\t ]+\"([^\"\n]+)\"[^\n]*\n",
107373135a8SMasatake YAMATO 	                               "\\1", "s", "{icase}{scope=push}{tenter=section}", NULL);
10880fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
10980fd3f70SMasatake YAMATO 	                               "^\\.SH[\t ]+([^\n]+)\n",
110373135a8SMasatake YAMATO 	                               "\\1", "s", "{icase}{scope=push}{tenter=section}", NULL);
11180fd3f70SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
1122b2165a2SMasatake YAMATO 	                               "^\\.SH[\t ]*\n",
1132b2165a2SMasatake YAMATO 	                               "", "", "{icase}{tenter=sectionheading}"
1142b2165a2SMasatake YAMATO 		"{{\n"
1152b2165a2SMasatake YAMATO 		"    /push\n"
1162b2165a2SMasatake YAMATO 		"}}", NULL);
1172b2165a2SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
11880fd3f70SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
11980fd3f70SMasatake YAMATO 	                               "", "", "", NULL);
120373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "main",
121373135a8SMasatake YAMATO 	                               "^",
122373135a8SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
123373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
124373135a8SMasatake YAMATO 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
125373135a8SMasatake YAMATO 	                               "", "", "{icase}", NULL);
126373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
127373135a8SMasatake YAMATO 	                               "^\\.SH[\t ]+\"([^\"\n]+)\"[^\n]*\n",
128373135a8SMasatake YAMATO 	                               "\\1", "s", "{icase}{scope=replace}", NULL);
129373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
130373135a8SMasatake YAMATO 	                               "^\\.SH[\t ]+([^\n]+)\n",
131373135a8SMasatake YAMATO 	                               "\\1", "s", "{icase}{scope=replace}", NULL);
132373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
133*a2073a83SMasatake YAMATO 	                               "^(\\.SH)[\t ]*\n",
134*a2073a83SMasatake YAMATO 	                               "", "", "{icase}{tjump=sectionheading}"
1352b2165a2SMasatake YAMATO 		"{{\n"
136*a2073a83SMasatake YAMATO 		"    2 /replace\n"
137*a2073a83SMasatake YAMATO 		"}}", NULL);
138*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
139*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]+\"([^\"\n]+)\"[^\n]*\n",
140*a2073a83SMasatake YAMATO 	                               "\\1", "S", "{icase}{scope=push}{tenter=subsection}", NULL);
141*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
142*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]+([^\n]+)\n",
143*a2073a83SMasatake YAMATO 	                               "\\1", "S", "{icase}{scope=push}{tenter=subsection}", NULL);
144*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
145*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]*\n",
146*a2073a83SMasatake YAMATO 	                               "", "", "{icase}{tenter=subsectionheading}"
147*a2073a83SMasatake YAMATO 		"{{\n"
148*a2073a83SMasatake YAMATO 		"    /push\n"
1492b2165a2SMasatake YAMATO 		"}}", NULL);
1502b2165a2SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
151373135a8SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
152373135a8SMasatake YAMATO 	                               "", "", "", NULL);
153373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "section",
154373135a8SMasatake YAMATO 	                               "^",
155373135a8SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
1562b2165a2SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "sectionheading",
1572b2165a2SMasatake YAMATO 	                               "^[ \t]*([^\n]+)\n",
158*a2073a83SMasatake YAMATO 	                               "\\1", "s", "{tjump=section}"
1592b2165a2SMasatake YAMATO 		"{{\n"
160*a2073a83SMasatake YAMATO 		"    heading-action\n"
1612b2165a2SMasatake YAMATO 		"}}", NULL);
1622b2165a2SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "sectionheading",
1632b2165a2SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
1642b2165a2SMasatake YAMATO 	                               "", "", "", NULL);
1652b2165a2SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "sectionheading",
1662b2165a2SMasatake YAMATO 	                               "^",
1672b2165a2SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
168*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
169*a2073a83SMasatake YAMATO 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
170*a2073a83SMasatake YAMATO 	                               "", "", "{icase}", NULL);
171*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
172*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]+\"([^\"\n]+)\"[^\n]*\n",
173*a2073a83SMasatake YAMATO 	                               "\\1", "S", "{icase}{scope=replace}", NULL);
174*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
175*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]+([^\n]+)\n",
176*a2073a83SMasatake YAMATO 	                               "\\1", "S", "{icase}{scope=replace}", NULL);
177*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
178*a2073a83SMasatake YAMATO 	                               "^\\.SS[\t ]*\n",
179*a2073a83SMasatake YAMATO 	                               "", "", "{icase}{tjump=subsectionheading}"
180*a2073a83SMasatake YAMATO 		"{{\n"
181*a2073a83SMasatake YAMATO 		"    2 /replace\n"
182*a2073a83SMasatake YAMATO 		"}}", NULL);
183*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
184*a2073a83SMasatake YAMATO 	                               "^(\\.SH)",
185*a2073a83SMasatake YAMATO 	                               "", "", "{icase}{_advanceTo=0start}{tleave}"
186*a2073a83SMasatake YAMATO 		"{{\n"
187*a2073a83SMasatake YAMATO 		"    1 fill-end-of-scope\n"
188*a2073a83SMasatake YAMATO 		"    _scopepop\n"
189*a2073a83SMasatake YAMATO 		"}}", NULL);
190*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
191*a2073a83SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
192*a2073a83SMasatake YAMATO 	                               "", "", "", NULL);
193*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsection",
194*a2073a83SMasatake YAMATO 	                               "^",
195*a2073a83SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
196*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsectionheading",
197*a2073a83SMasatake YAMATO 	                               "^[ \t]*([^\n]+)\n",
198*a2073a83SMasatake YAMATO 	                               "\\1", "S", "{tjump=subsection}"
199*a2073a83SMasatake YAMATO 		"{{\n"
200*a2073a83SMasatake YAMATO 		"    heading-action\n"
201*a2073a83SMasatake YAMATO 		"}}", NULL);
202*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsectionheading",
203*a2073a83SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
204*a2073a83SMasatake YAMATO 	                               "", "", "", NULL);
205*a2073a83SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "subsectionheading",
206*a2073a83SMasatake YAMATO 	                               "^",
207*a2073a83SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
208373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "EOF",
209373135a8SMasatake YAMATO 	                               "^",
210373135a8SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
211373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "SKIP",
212373135a8SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
213373135a8SMasatake YAMATO 	                               "", "", "", NULL);
214373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "REST",
215373135a8SMasatake YAMATO 	                               "^[^\n]*\n|[^\n]+",
216373135a8SMasatake YAMATO 	                               "", "", "", NULL);
217373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "REST",
218373135a8SMasatake YAMATO 	                               "^",
219373135a8SMasatake YAMATO 	                               "", "", "{scope=clear}{tquit}", NULL);
220373135a8SMasatake YAMATO 	addLanguageTagMultiTableRegex (language, "GUARD",
221373135a8SMasatake YAMATO 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
222373135a8SMasatake YAMATO 	                               "", "", "{icase}", NULL);
2238eefea3cSMasatake YAMATO }
2248eefea3cSMasatake YAMATO 
ManParser(void)2258eefea3cSMasatake YAMATO extern parserDefinition* ManParser (void)
2268eefea3cSMasatake YAMATO {
2278eefea3cSMasatake YAMATO 	static const char *const extensions [] = {
2288eefea3cSMasatake YAMATO 		"1",
2298eefea3cSMasatake YAMATO 		"2",
2308eefea3cSMasatake YAMATO 		"3",
2318eefea3cSMasatake YAMATO 		"4",
2328eefea3cSMasatake YAMATO 		"5",
2338eefea3cSMasatake YAMATO 		"6",
2348eefea3cSMasatake YAMATO 		"7",
2358eefea3cSMasatake YAMATO 		"8",
2368eefea3cSMasatake YAMATO 		"9",
2375d3bedcdSMasatake YAMATO 		"3pm",
2385d3bedcdSMasatake YAMATO 		"3stap",
2395d3bedcdSMasatake YAMATO 		"7stap",
2408eefea3cSMasatake YAMATO 		NULL
2418eefea3cSMasatake YAMATO 	};
2428eefea3cSMasatake YAMATO 
2438eefea3cSMasatake YAMATO 	static const char *const aliases [] = {
2448eefea3cSMasatake YAMATO 		NULL
2458eefea3cSMasatake YAMATO 	};
2468eefea3cSMasatake YAMATO 
2478eefea3cSMasatake YAMATO 	static const char *const patterns [] = {
2488eefea3cSMasatake YAMATO 		NULL
2498eefea3cSMasatake YAMATO 	};
2508eefea3cSMasatake YAMATO 
251f8d15bd7SMasatake YAMATO 	static kindDefinition ManKindTable [] = {
2522625d890SMasatake YAMATO 		{
2532625d890SMasatake YAMATO 		  true, 't', "title", "titles",
2542625d890SMasatake YAMATO 		},
2552625d890SMasatake YAMATO 		{
2562625d890SMasatake YAMATO 		  true, 's', "section", "sections",
2572625d890SMasatake YAMATO 		},
258*a2073a83SMasatake YAMATO 		{
259*a2073a83SMasatake YAMATO 		  true, 'S', "subsection", "sub sections",
260*a2073a83SMasatake YAMATO 		},
261f8d15bd7SMasatake YAMATO 	};
2628eefea3cSMasatake YAMATO 
2636b1ec470SMasatake YAMATO 	parserDefinition* const def = parserNew ("Man");
2648eefea3cSMasatake YAMATO 
265a07531f3SMasatake YAMATO 	def->enabled       = true;
2668eefea3cSMasatake YAMATO 	def->extensions    = extensions;
2678eefea3cSMasatake YAMATO 	def->patterns      = patterns;
2688eefea3cSMasatake YAMATO 	def->aliases       = aliases;
2698eefea3cSMasatake YAMATO 	def->method        = METHOD_NOT_CRAFTED|METHOD_REGEX;
2706b1a862eSMasatake YAMATO 	def->useCork       = CORK_QUEUE;
271f8d15bd7SMasatake YAMATO 	def->kindTable     = ManKindTable;
272f8d15bd7SMasatake YAMATO 	def->kindCount     = ARRAY_SIZE(ManKindTable);
273*a2073a83SMasatake YAMATO 	def->defaultScopeSeparator = "\"\"";
2748eefea3cSMasatake YAMATO 	def->initialize    = initializeManParser;
2758eefea3cSMasatake YAMATO 
2768eefea3cSMasatake YAMATO 	return def;
2778eefea3cSMasatake YAMATO }
278