xref: /Universal-ctags/optlib/man.c (revision a2073a83ebac9c08123fa77aaa3de27c5ea1b00f)
1 /*
2  * Generated by ./misc/optlib2c from optlib/man.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_TITLE,
13 	K_SECTION,
14 	K_SUBSECTION,
15 } ManKind;
16 
17 
initializeManParser(const langType language)18 static void initializeManParser (const langType language)
19 {
20 	addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
21 		"{{    % adjustment:int FILL-END-OF-SCOPE -\n"
22 		"    %\n"
23 		"    % Note: The group 1 of a regex matching is assumed.\n"
24 		"    %       An entry on the scope stack is assumed.\n"
25 		"    /fill-end-of-scope {\n"
26 		"         _scopetop pop exch\n"
27 		"         % scope-top:int adjustment:int\n"
28 		"         1 /start _matchloc _matchloc2line exch\n"
29 		"         % scope-top:int line adjustment:int\n"
30 		"         2 copy gt {\n"
31 		"             sub end:\n"
32 		"         } {\n"
33 		"             pop pop pop\n"
34 		"         } ifelse\n"
35 		"    } def\n"
36 		"    % adjustment:int /replace HEADING-ACTION -\n"
37 		"    % /push HEADING-ACTION -\n"
38 		"    /heading-action {\n"
39 		"        /replace eq {\n"
40 		"             %\n"
41 		"             % Before removing the tag at the top of the scope stack,\n"
42 		"             % fill the end field of the tag.\n"
43 		"             %\n"
44 		"             % input0.man\n"
45 		"             % ----------------------------------------------------\n"
46 		"             %   .SH SEC1\n"
47 		"             %   ...\n"
48 		"             %E: This is the end of the SEC1.\n"
49 		"             %   .SH\n"
50 		"             %C: SEC2\n"
51 		"             %\n"
52 		"             % ----------------------------------------------------\n"
53 		"             %\n"
54 		"             % C represents the current input line. The parser must\n"
55 		"             % fill the end field of \"SEC1\", the tag at the top,\n"
56 		"             % with the line number of E.\n"
57 		"             %\n"
58 		"             %    E = C - 2\n"
59 		"             %\n"
60 		"             % input1.man\n"
61 		"             % ----------------------------------------------------\n"
62 		"             %   .SH SEC3\n"
63 		"             %   ...\n"
64 		"             %E: This is the end of the SEC1.\n"
65 		"             %C:  .SH SEC4\n"
66 		"             %\n"
67 		"             % ----------------------------------------------------\n"
68 		"             %\n"
69 		"             % In this case\n"
70 		"             %\n"
71 		"             %    E = C - 1\n"
72 		"             %\n"
73 		"             % The offset for the adjustment depends on the conctxt.\n"
74 		"             %\n"
75 		"             fill-end-of-scope\n"
76 		"             _scopepop\n"
77 		"        } if\n"
78 		"\n"
79 		"        _scopetop {\n"
80 		"            . exch scope:\n"
81 		"        } if\n"
82 		"        . _scopepush\n"
83 		"    } def\n"
84 		"}}");
85 
86 	addLanguageRegexTable (language, "main");
87 	addLanguageRegexTable (language, "section");
88 	addLanguageRegexTable (language, "sectionheading");
89 	addLanguageRegexTable (language, "subsection");
90 	addLanguageRegexTable (language, "subsectionheading");
91 	addLanguageRegexTable (language, "EOF");
92 	addLanguageRegexTable (language, "SKIP");
93 	addLanguageRegexTable (language, "REST");
94 	addLanguageRegexTable (language, "GUARD");
95 
96 	addLanguageTagMultiTableRegex (language, "main",
97 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
98 	                               "", "", "{icase}", NULL);
99 	addLanguageTagMultiTableRegex (language, "main",
100 	                               "^\\.TH[\t ]+\"([^\"]+)\"[^\n]*\n",
101 	                               "\\1", "t", "{icase}{scope=set}", NULL);
102 	addLanguageTagMultiTableRegex (language, "main",
103 	                               "^\\.TH[\t ]+([^\t \n]+)[^\n]*\n",
104 	                               "\\1", "t", "{icase}{scope=set}", NULL);
105 	addLanguageTagMultiTableRegex (language, "main",
106 	                               "^\\.SH[\t ]+\"([^\"\n]+)\"[^\n]*\n",
107 	                               "\\1", "s", "{icase}{scope=push}{tenter=section}", NULL);
108 	addLanguageTagMultiTableRegex (language, "main",
109 	                               "^\\.SH[\t ]+([^\n]+)\n",
110 	                               "\\1", "s", "{icase}{scope=push}{tenter=section}", NULL);
111 	addLanguageTagMultiTableRegex (language, "main",
112 	                               "^\\.SH[\t ]*\n",
113 	                               "", "", "{icase}{tenter=sectionheading}"
114 		"{{\n"
115 		"    /push\n"
116 		"}}", NULL);
117 	addLanguageTagMultiTableRegex (language, "main",
118 	                               "^[^\n]*\n|[^\n]+",
119 	                               "", "", "", NULL);
120 	addLanguageTagMultiTableRegex (language, "main",
121 	                               "^",
122 	                               "", "", "{scope=clear}{tquit}", NULL);
123 	addLanguageTagMultiTableRegex (language, "section",
124 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
125 	                               "", "", "{icase}", NULL);
126 	addLanguageTagMultiTableRegex (language, "section",
127 	                               "^\\.SH[\t ]+\"([^\"\n]+)\"[^\n]*\n",
128 	                               "\\1", "s", "{icase}{scope=replace}", NULL);
129 	addLanguageTagMultiTableRegex (language, "section",
130 	                               "^\\.SH[\t ]+([^\n]+)\n",
131 	                               "\\1", "s", "{icase}{scope=replace}", NULL);
132 	addLanguageTagMultiTableRegex (language, "section",
133 	                               "^(\\.SH)[\t ]*\n",
134 	                               "", "", "{icase}{tjump=sectionheading}"
135 		"{{\n"
136 		"    2 /replace\n"
137 		"}}", NULL);
138 	addLanguageTagMultiTableRegex (language, "section",
139 	                               "^\\.SS[\t ]+\"([^\"\n]+)\"[^\n]*\n",
140 	                               "\\1", "S", "{icase}{scope=push}{tenter=subsection}", NULL);
141 	addLanguageTagMultiTableRegex (language, "section",
142 	                               "^\\.SS[\t ]+([^\n]+)\n",
143 	                               "\\1", "S", "{icase}{scope=push}{tenter=subsection}", NULL);
144 	addLanguageTagMultiTableRegex (language, "section",
145 	                               "^\\.SS[\t ]*\n",
146 	                               "", "", "{icase}{tenter=subsectionheading}"
147 		"{{\n"
148 		"    /push\n"
149 		"}}", NULL);
150 	addLanguageTagMultiTableRegex (language, "section",
151 	                               "^[^\n]*\n|[^\n]+",
152 	                               "", "", "", NULL);
153 	addLanguageTagMultiTableRegex (language, "section",
154 	                               "^",
155 	                               "", "", "{scope=clear}{tquit}", NULL);
156 	addLanguageTagMultiTableRegex (language, "sectionheading",
157 	                               "^[ \t]*([^\n]+)\n",
158 	                               "\\1", "s", "{tjump=section}"
159 		"{{\n"
160 		"    heading-action\n"
161 		"}}", NULL);
162 	addLanguageTagMultiTableRegex (language, "sectionheading",
163 	                               "^[^\n]*\n|[^\n]+",
164 	                               "", "", "", NULL);
165 	addLanguageTagMultiTableRegex (language, "sectionheading",
166 	                               "^",
167 	                               "", "", "{scope=clear}{tquit}", NULL);
168 	addLanguageTagMultiTableRegex (language, "subsection",
169 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
170 	                               "", "", "{icase}", NULL);
171 	addLanguageTagMultiTableRegex (language, "subsection",
172 	                               "^\\.SS[\t ]+\"([^\"\n]+)\"[^\n]*\n",
173 	                               "\\1", "S", "{icase}{scope=replace}", NULL);
174 	addLanguageTagMultiTableRegex (language, "subsection",
175 	                               "^\\.SS[\t ]+([^\n]+)\n",
176 	                               "\\1", "S", "{icase}{scope=replace}", NULL);
177 	addLanguageTagMultiTableRegex (language, "subsection",
178 	                               "^\\.SS[\t ]*\n",
179 	                               "", "", "{icase}{tjump=subsectionheading}"
180 		"{{\n"
181 		"    2 /replace\n"
182 		"}}", NULL);
183 	addLanguageTagMultiTableRegex (language, "subsection",
184 	                               "^(\\.SH)",
185 	                               "", "", "{icase}{_advanceTo=0start}{tleave}"
186 		"{{\n"
187 		"    1 fill-end-of-scope\n"
188 		"    _scopepop\n"
189 		"}}", NULL);
190 	addLanguageTagMultiTableRegex (language, "subsection",
191 	                               "^[^\n]*\n|[^\n]+",
192 	                               "", "", "", NULL);
193 	addLanguageTagMultiTableRegex (language, "subsection",
194 	                               "^",
195 	                               "", "", "{scope=clear}{tquit}", NULL);
196 	addLanguageTagMultiTableRegex (language, "subsectionheading",
197 	                               "^[ \t]*([^\n]+)\n",
198 	                               "\\1", "S", "{tjump=subsection}"
199 		"{{\n"
200 		"    heading-action\n"
201 		"}}", NULL);
202 	addLanguageTagMultiTableRegex (language, "subsectionheading",
203 	                               "^[^\n]*\n|[^\n]+",
204 	                               "", "", "", NULL);
205 	addLanguageTagMultiTableRegex (language, "subsectionheading",
206 	                               "^",
207 	                               "", "", "{scope=clear}{tquit}", NULL);
208 	addLanguageTagMultiTableRegex (language, "EOF",
209 	                               "^",
210 	                               "", "", "{scope=clear}{tquit}", NULL);
211 	addLanguageTagMultiTableRegex (language, "SKIP",
212 	                               "^[^\n]*\n|[^\n]+",
213 	                               "", "", "", NULL);
214 	addLanguageTagMultiTableRegex (language, "REST",
215 	                               "^[^\n]*\n|[^\n]+",
216 	                               "", "", "", NULL);
217 	addLanguageTagMultiTableRegex (language, "REST",
218 	                               "^",
219 	                               "", "", "{scope=clear}{tquit}", NULL);
220 	addLanguageTagMultiTableRegex (language, "GUARD",
221 	                               "^([^\n.]|\\.[^\nst])[^\n]*\n",
222 	                               "", "", "{icase}", NULL);
223 }
224 
ManParser(void)225 extern parserDefinition* ManParser (void)
226 {
227 	static const char *const extensions [] = {
228 		"1",
229 		"2",
230 		"3",
231 		"4",
232 		"5",
233 		"6",
234 		"7",
235 		"8",
236 		"9",
237 		"3pm",
238 		"3stap",
239 		"7stap",
240 		NULL
241 	};
242 
243 	static const char *const aliases [] = {
244 		NULL
245 	};
246 
247 	static const char *const patterns [] = {
248 		NULL
249 	};
250 
251 	static kindDefinition ManKindTable [] = {
252 		{
253 		  true, 't', "title", "titles",
254 		},
255 		{
256 		  true, 's', "section", "sections",
257 		},
258 		{
259 		  true, 'S', "subsection", "sub sections",
260 		},
261 	};
262 
263 	parserDefinition* const def = parserNew ("Man");
264 
265 	def->enabled       = true;
266 	def->extensions    = extensions;
267 	def->patterns      = patterns;
268 	def->aliases       = aliases;
269 	def->method        = METHOD_NOT_CRAFTED|METHOD_REGEX;
270 	def->useCork       = CORK_QUEUE;
271 	def->kindTable     = ManKindTable;
272 	def->kindCount     = ARRAY_SIZE(ManKindTable);
273 	def->defaultScopeSeparator = "\"\"";
274 	def->initialize    = initializeManParser;
275 
276 	return def;
277 }
278