Annotation of docbook2mdoc/rules.c, Revision 1.4
1.1 kristaps 1: #include <stdlib.h>
2:
3: #include "extern.h"
4:
5: int
6: isattrkey(enum nodeid node, enum attrkey key)
7: {
8:
9: switch (key) {
10: case (ATTRKEY_CHOICE):
11: return(node == NODE_ARG);
12: case (ATTRKEY_ID):
13: /* Common to all. */
14: return(1);
15: case (ATTRKEY_REP):
16: return(node == NODE_ARG);
17: default:
18: break;
19: }
20: abort();
21: return(0);
22: }
23:
24: int
25: isattrval(enum attrkey key, enum attrval val)
26: {
27:
28: switch (val) {
29: case (ATTRVAL_OPT):
30: case (ATTRVAL_PLAIN):
31: case (ATTRVAL_REQ):
32: return(key == ATTRKEY_CHOICE);
33: case (ATTRVAL_REPEAT):
34: case (ATTRVAL_NOREPEAT):
35: return(key == ATTRKEY_REP);
36: default:
37: break;
38: }
39: abort();
40: return(0);
41: }
42:
43: /*
44: * Look up whether "parent" is a valid parent for "node".
45: * This is sucked directly from the DocBook specification: look at the
46: * "children" and "parent" sections of each node.
47: */
48: int
49: isparent(enum nodeid node, enum nodeid parent)
50: {
51:
52: switch (node) {
53: case (NODE_ROOT):
54: return(0);
55: case (NODE_ARG):
56: switch (parent) {
57: case (NODE_ARG):
58: case (NODE_CMDSYNOPSIS):
59: return(1);
60: default:
61: break;
62: }
63: return(0);
64: case (NODE_CITEREFENTRY):
65: switch (parent) {
66: case (NODE_EMPHASIS):
67: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 68: case (NODE_LINK):
1.1 kristaps 69: case (NODE_PARA):
70: case (NODE_PROGRAMLISTING):
71: case (NODE_REFDESCRIPTOR):
72: case (NODE_REFENTRYTITLE):
73: case (NODE_REFNAME):
74: case (NODE_REFPURPOSE):
75: case (NODE_SYNOPSIS):
76: case (NODE_TERM):
77: case (NODE_TITLE):
1.2 kristaps 78: case (NODE_ULINK):
1.1 kristaps 79: return(1);
80: default:
81: break;
82: }
83: return(0);
84: case (NODE_CMDSYNOPSIS):
85: switch (parent) {
1.4 ! kristaps 86: case (NODE_ITEMIZEDLIST):
1.1 kristaps 87: case (NODE_LISTITEM):
88: case (NODE_PARA):
89: case (NODE_REFSECT1):
90: case (NODE_REFSYNOPSISDIV):
91: case (NODE_VARIABLELIST):
92: return(1);
93: default:
94: break;
95: }
96: return(0);
97: case (NODE_CODE):
98: switch (parent) {
99: case (NODE_EMPHASIS):
100: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 101: case (NODE_LINK):
1.1 kristaps 102: case (NODE_PARA):
103: case (NODE_PROGRAMLISTING):
104: case (NODE_REFDESCRIPTOR):
105: case (NODE_REFENTRYTITLE):
106: case (NODE_REFNAME):
107: case (NODE_REFPURPOSE):
108: case (NODE_SYNOPSIS):
109: case (NODE_TERM):
110: case (NODE_TITLE):
1.2 kristaps 111: case (NODE_ULINK):
1.1 kristaps 112: return(1);
113: default:
114: break;
115: }
116: return(0);
117: case (NODE_COMMAND):
118: switch (parent) {
119: case (NODE_CMDSYNOPSIS):
120: case (NODE_EMPHASIS):
121: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 122: case (NODE_LINK):
1.1 kristaps 123: case (NODE_PARA):
124: case (NODE_PROGRAMLISTING):
125: case (NODE_REFDESCRIPTOR):
126: case (NODE_REFENTRYTITLE):
127: case (NODE_REFNAME):
128: case (NODE_REFPURPOSE):
129: case (NODE_SYNOPSIS):
130: case (NODE_TERM):
131: case (NODE_TITLE):
1.2 kristaps 132: case (NODE_ULINK):
1.1 kristaps 133: return(1);
134: default:
135: break;
136: }
137: return(0);
1.3 kristaps 138: case (NODE_DATE):
139: switch (parent) {
140: case (NODE_EMPHASIS):
141: case (NODE_FUNCSYNOPSISINFO):
142: case (NODE_LINK):
143: case (NODE_PARA):
144: case (NODE_PROGRAMLISTING):
145: case (NODE_REFDESCRIPTOR):
146: case (NODE_REFENTRYINFO):
147: case (NODE_REFENTRYTITLE):
148: case (NODE_REFNAME):
149: case (NODE_REFPURPOSE):
150: case (NODE_SYNOPSIS):
151: case (NODE_TITLE):
152: case (NODE_ULINK):
153: return(1);
154: default:
155: break;
156: }
157: return(0);
1.1 kristaps 158: case (NODE_EMPHASIS):
159: switch (parent) {
160: case (NODE_EMPHASIS):
161: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 162: case (NODE_LINK):
1.1 kristaps 163: case (NODE_PARA):
164: case (NODE_PROGRAMLISTING):
165: case (NODE_REFDESCRIPTOR):
166: case (NODE_REFENTRYTITLE):
167: case (NODE_REFNAME):
168: case (NODE_REFPURPOSE):
169: case (NODE_SYNOPSIS):
170: case (NODE_TERM):
171: case (NODE_TITLE):
1.2 kristaps 172: case (NODE_ULINK):
1.1 kristaps 173: return(1);
174: default:
175: break;
176: }
177: return(0);
178: case (NODE_FUNCDEF):
179: return(NODE_FUNCPROTOTYPE == parent);
180: case (NODE_FUNCPROTOTYPE):
181: return(NODE_FUNCSYNOPSIS == parent);
182: case (NODE_FUNCSYNOPSIS):
183: switch (parent) {
1.4 ! kristaps 184: case (NODE_ITEMIZEDLIST):
1.1 kristaps 185: case (NODE_LISTITEM):
186: case (NODE_PARA):
187: case (NODE_REFSECT1):
188: case (NODE_REFSYNOPSISDIV):
189: case (NODE_VARIABLELIST):
190: return(1);
191: default:
192: break;
193: }
194: return(0);
195: case (NODE_FUNCSYNOPSISINFO):
196: return(NODE_FUNCSYNOPSIS == parent);
197: case (NODE_FUNCTION):
198: switch (parent) {
199: case (NODE_CODE):
200: case (NODE_EMPHASIS):
201: case (NODE_FUNCDEF):
202: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 203: case (NODE_LINK):
1.1 kristaps 204: case (NODE_PARA):
205: case (NODE_PROGRAMLISTING):
206: case (NODE_REFDESCRIPTOR):
207: case (NODE_REFENTRYTITLE):
208: case (NODE_REFNAME):
209: case (NODE_REFPURPOSE):
210: case (NODE_SYNOPSIS):
211: case (NODE_TERM):
212: case (NODE_TITLE):
1.2 kristaps 213: case (NODE_ULINK):
214: return(1);
215: default:
216: break;
217: }
218: return(0);
1.4 ! kristaps 219: case (NODE_ITEMIZEDLIST):
! 220: switch (parent) {
! 221: case (NODE_ITEMIZEDLIST):
! 222: case (NODE_LISTITEM):
! 223: case (NODE_REFSECT1):
! 224: case (NODE_REFSYNOPSISDIV):
! 225: case (NODE_VARIABLELIST):
! 226: return(1);
! 227: default:
! 228: break;
! 229: }
! 230: return(0);
1.2 kristaps 231: case (NODE_LINK):
1.4 ! kristaps 232: case (NODE_ULINK): /* Synonyms. */
1.2 kristaps 233: switch (parent) {
234: case (NODE_ARG):
235: case (NODE_CODE):
236: case (NODE_COMMAND):
237: case (NODE_EMPHASIS):
238: case (NODE_FUNCDEF):
239: case (NODE_FUNCSYNOPSISINFO):
240: case (NODE_FUNCTION):
241: case (NODE_LINK):
242: case (NODE_MANVOLNUM):
243: case (NODE_OPTION):
244: case (NODE_PARA):
245: case (NODE_PARAMDEF):
246: case (NODE_PARAMETER):
247: case (NODE_PROGRAMLISTING):
248: case (NODE_REFDESCRIPTOR):
249: case (NODE_REFENTRYTITLE):
250: case (NODE_REFMISCINFO):
251: case (NODE_REFNAME):
252: case (NODE_REPLACEABLE):
253: case (NODE_SYNOPSIS):
254: case (NODE_TERM):
255: case (NODE_ULINK):
1.1 kristaps 256: return(1);
257: default:
258: break;
259: }
260: return(0);
261: case (NODE_LISTITEM):
1.4 ! kristaps 262: switch (parent) {
! 263: case (NODE_ITEMIZEDLIST):
! 264: case (NODE_VARLISTENTRY):
! 265: return(1);
! 266: default:
! 267: break;
! 268: }
! 269: return(0);
1.1 kristaps 270: case (NODE_MANVOLNUM):
271: switch (parent) {
272: case (NODE_CITEREFENTRY):
273: case (NODE_REFMETA):
274: return(1);
275: default:
276: break;
277: }
278: return(0);
279: case (NODE_OPTION):
280: switch (parent) {
281: case (NODE_ARG):
282: case (NODE_EMPHASIS):
283: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 284: case (NODE_LINK):
1.1 kristaps 285: case (NODE_PARA):
286: case (NODE_PROGRAMLISTING):
287: case (NODE_REFDESCRIPTOR):
288: case (NODE_REFENTRYTITLE):
289: case (NODE_REFNAME):
290: case (NODE_REFPURPOSE):
291: case (NODE_SYNOPSIS):
292: case (NODE_TERM):
293: case (NODE_TITLE):
1.2 kristaps 294: case (NODE_ULINK):
1.1 kristaps 295: return(1);
296: default:
297: break;
298: }
299: return(0);
300: case (NODE_PARA):
301: switch (parent) {
1.4 ! kristaps 302: case (NODE_ITEMIZEDLIST):
1.1 kristaps 303: case (NODE_LISTITEM):
304: case (NODE_REFSECT1):
305: case (NODE_REFSYNOPSISDIV):
306: case (NODE_VARIABLELIST):
307: return(1);
308: default:
309: break;
310: }
311: return(0);
312: case (NODE_PARAMDEF):
313: return(NODE_FUNCPROTOTYPE == parent);
314: case (NODE_PARAMETER):
315: switch (parent) {
316: case (NODE_CODE):
317: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 318: case (NODE_LINK):
1.1 kristaps 319: case (NODE_PARA):
320: case (NODE_PARAMDEF):
321: case (NODE_PROGRAMLISTING):
322: case (NODE_REFDESCRIPTOR):
323: case (NODE_REFENTRYTITLE):
324: case (NODE_REFNAME):
325: case (NODE_REFPURPOSE):
326: case (NODE_SYNOPSIS):
327: case (NODE_TERM):
328: case (NODE_TITLE):
1.2 kristaps 329: case (NODE_ULINK):
1.1 kristaps 330: return(1);
331: default:
332: break;
333: }
334: return(0);
335: case (NODE_PROGRAMLISTING):
336: switch (parent) {
1.4 ! kristaps 337: case (NODE_ITEMIZEDLIST):
1.1 kristaps 338: case (NODE_LISTITEM):
339: case (NODE_PARA):
340: case (NODE_REFSECT1):
341: case (NODE_REFSYNOPSISDIV):
342: return(1);
343: default:
344: break;
345: }
346: return(0);
347: case (NODE_REFCLASS):
348: return(parent == NODE_REFNAMEDIV);
349: case (NODE_REFDESCRIPTOR):
350: return(parent == NODE_REFNAMEDIV);
351: case (NODE_REFENTRY):
352: return(parent == NODE_ROOT);
1.3 kristaps 353: case (NODE_REFENTRYINFO):
354: return(parent == NODE_REFENTRY);
1.1 kristaps 355: case (NODE_REFENTRYTITLE):
356: switch (parent) {
357: case (NODE_CITEREFENTRY):
358: case (NODE_REFMETA):
359: return(1);
360: default:
361: break;
362: }
363: case (NODE_REFMETA):
364: return(parent == NODE_REFENTRY);
365: case (NODE_REFMISCINFO):
366: return(parent == NODE_REFMETA);
367: case (NODE_REFNAME):
368: return(parent == NODE_REFNAMEDIV);
369: case (NODE_REFNAMEDIV):
370: return(parent == NODE_REFENTRY);
371: case (NODE_REFPURPOSE):
372: return(parent == NODE_REFNAMEDIV);
373: case (NODE_REFSECT1):
374: return(parent == NODE_REFENTRY);
375: case (NODE_REFSYNOPSISDIV):
376: return(parent == NODE_REFENTRY);
377: case (NODE_REPLACEABLE):
378: switch (parent) {
379: case (NODE_ARG):
380: case (NODE_CODE):
381: case (NODE_COMMAND):
382: case (NODE_EMPHASIS):
383: case (NODE_FUNCDEF):
384: case (NODE_FUNCSYNOPSISINFO):
385: case (NODE_FUNCTION):
1.2 kristaps 386: case (NODE_LINK):
1.1 kristaps 387: case (NODE_MANVOLNUM):
388: case (NODE_OPTION):
389: case (NODE_PARA):
390: case (NODE_PARAMDEF):
391: case (NODE_PARAMETER):
392: case (NODE_PROGRAMLISTING):
393: case (NODE_REFDESCRIPTOR):
394: case (NODE_REFENTRYTITLE):
395: case (NODE_REFMISCINFO):
396: case (NODE_REFNAME):
397: case (NODE_REFPURPOSE):
398: case (NODE_REPLACEABLE):
399: case (NODE_SYNOPSIS):
400: case (NODE_TERM):
401: case (NODE_TITLE):
1.2 kristaps 402: case (NODE_ULINK):
1.1 kristaps 403: default:
404: return(1);
405: }
406: return(0);
407: case (NODE_STRUCTNAME):
408: switch (parent) {
409: case (NODE_CODE):
410: case (NODE_FUNCSYNOPSISINFO):
411: case (NODE_FUNCTION):
412: case (NODE_OPTION):
413: case (NODE_PARA):
414: case (NODE_PARAMETER):
415: case (NODE_PROGRAMLISTING):
416: case (NODE_REFDESCRIPTOR):
417: case (NODE_REFENTRYTITLE):
418: case (NODE_REFNAME):
419: case (NODE_REFPURPOSE):
420: case (NODE_SYNOPSIS):
421: case (NODE_TITLE):
422: return(1);
423: default:
424: break;
425: }
426: return(0);
427: case (NODE_SYNOPSIS):
428: switch (parent) {
1.4 ! kristaps 429: case (NODE_ITEMIZEDLIST):
1.1 kristaps 430: case (NODE_LISTITEM):
431: case (NODE_REFSYNOPSISDIV):
432: case (NODE_REFSECT1):
433: return(1);
434: default:
435: break;
436: }
437: return(0);
438: case (NODE_TITLE):
439: switch (parent) {
1.4 ! kristaps 440: case (NODE_ITEMIZEDLIST):
1.3 kristaps 441: case (NODE_REFENTRYINFO):
1.1 kristaps 442: case (NODE_REFSECT1):
443: case (NODE_REFSYNOPSISDIV):
444: case (NODE_VARIABLELIST):
445: return(1);
446: default:
447: break;
448: }
449: return(0);
450: case (NODE_TERM):
451: return(NODE_VARLISTENTRY == parent);
452: case (NODE_TEXT):
453: return(1);
454: case (NODE_VARIABLELIST):
455: switch (parent) {
1.4 ! kristaps 456: case (NODE_ITEMIZEDLIST):
1.1 kristaps 457: case (NODE_PARA):
458: case (NODE_REFSECT1):
459: case (NODE_REFSYNOPSISDIV):
460: case (NODE_VARIABLELIST):
461: return(1);
462: default:
463: break;
464: }
465: return(0);
466: case (NODE_VARLISTENTRY):
467: return (NODE_VARIABLELIST == parent);
468: case (NODE__MAX):
469: break;
470: }
471:
472: abort();
473: return(0);
474: }
475:
CVSweb