Annotation of docbook2mdoc/rules.c, Revision 1.8
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);
1.8 ! kristaps 55: case (NODE_ACRONYM):
! 56: switch (parent) {
! 57: case (NODE_EMPHASIS):
! 58: case (NODE_FUNCSYNOPSISINFO):
! 59: case (NODE_PROGRAMLISTING):
! 60: case (NODE_REFDESCRIPTOR):
! 61: case (NODE_REFENTRYTITLE):
! 62: case (NODE_REFNAME):
! 63: case (NODE_REFPURPOSE):
! 64: case (NODE_SYNOPSIS):
! 65: case (NODE_TERM):
! 66: case (NODE_TITLE):
! 67: return(1);
! 68: default:
! 69: break;
! 70: }
! 71: return(0);
1.1 kristaps 72: case (NODE_ARG):
73: switch (parent) {
74: case (NODE_ARG):
75: case (NODE_CMDSYNOPSIS):
76: return(1);
77: default:
78: break;
79: }
80: return(0);
81: case (NODE_CITEREFENTRY):
82: switch (parent) {
83: case (NODE_EMPHASIS):
84: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 85: case (NODE_LINK):
1.1 kristaps 86: case (NODE_PARA):
87: case (NODE_PROGRAMLISTING):
88: case (NODE_REFDESCRIPTOR):
89: case (NODE_REFENTRYTITLE):
90: case (NODE_REFNAME):
91: case (NODE_REFPURPOSE):
92: case (NODE_SYNOPSIS):
93: case (NODE_TERM):
94: case (NODE_TITLE):
1.2 kristaps 95: case (NODE_ULINK):
1.1 kristaps 96: return(1);
97: default:
98: break;
99: }
100: return(0);
101: case (NODE_CMDSYNOPSIS):
102: switch (parent) {
1.4 kristaps 103: case (NODE_ITEMIZEDLIST):
1.1 kristaps 104: case (NODE_LISTITEM):
1.8 ! kristaps 105: case (NODE_ORDEREDLIST):
1.1 kristaps 106: case (NODE_PARA):
107: case (NODE_REFSECT1):
1.7 kristaps 108: case (NODE_REFSECT2):
1.1 kristaps 109: case (NODE_REFSYNOPSISDIV):
110: case (NODE_VARIABLELIST):
111: return(1);
112: default:
113: break;
114: }
115: return(0);
116: case (NODE_CODE):
117: switch (parent) {
118: case (NODE_EMPHASIS):
119: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 120: case (NODE_LINK):
1.1 kristaps 121: case (NODE_PARA):
122: case (NODE_PROGRAMLISTING):
123: case (NODE_REFDESCRIPTOR):
124: case (NODE_REFENTRYTITLE):
125: case (NODE_REFNAME):
126: case (NODE_REFPURPOSE):
127: case (NODE_SYNOPSIS):
128: case (NODE_TERM):
129: case (NODE_TITLE):
1.2 kristaps 130: case (NODE_ULINK):
1.1 kristaps 131: return(1);
132: default:
133: break;
134: }
135: return(0);
136: case (NODE_COMMAND):
137: switch (parent) {
138: case (NODE_CMDSYNOPSIS):
139: case (NODE_EMPHASIS):
140: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 141: case (NODE_LINK):
1.1 kristaps 142: case (NODE_PARA):
143: case (NODE_PROGRAMLISTING):
144: case (NODE_REFDESCRIPTOR):
145: case (NODE_REFENTRYTITLE):
146: case (NODE_REFNAME):
147: case (NODE_REFPURPOSE):
148: case (NODE_SYNOPSIS):
149: case (NODE_TERM):
150: case (NODE_TITLE):
1.2 kristaps 151: case (NODE_ULINK):
1.1 kristaps 152: return(1);
153: default:
154: break;
155: }
156: return(0);
1.3 kristaps 157: case (NODE_DATE):
158: switch (parent) {
159: case (NODE_EMPHASIS):
160: case (NODE_FUNCSYNOPSISINFO):
161: case (NODE_LINK):
162: case (NODE_PARA):
163: case (NODE_PROGRAMLISTING):
164: case (NODE_REFDESCRIPTOR):
165: case (NODE_REFENTRYINFO):
166: case (NODE_REFENTRYTITLE):
167: case (NODE_REFNAME):
168: case (NODE_REFPURPOSE):
169: case (NODE_SYNOPSIS):
170: case (NODE_TITLE):
171: case (NODE_ULINK):
172: return(1);
173: default:
174: break;
175: }
176: return(0);
1.1 kristaps 177: case (NODE_EMPHASIS):
178: switch (parent) {
179: case (NODE_EMPHASIS):
180: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 181: case (NODE_LINK):
1.1 kristaps 182: case (NODE_PARA):
183: case (NODE_PROGRAMLISTING):
184: case (NODE_REFDESCRIPTOR):
185: case (NODE_REFENTRYTITLE):
186: case (NODE_REFNAME):
187: case (NODE_REFPURPOSE):
188: case (NODE_SYNOPSIS):
189: case (NODE_TERM):
190: case (NODE_TITLE):
1.2 kristaps 191: case (NODE_ULINK):
1.1 kristaps 192: return(1);
193: default:
194: break;
195: }
196: return(0);
1.8 ! kristaps 197: case (NODE_ENVAR):
! 198: switch (parent) {
! 199: case (NODE_EMPHASIS):
! 200: case (NODE_FUNCSYNOPSISINFO):
! 201: case (NODE_LINK):
! 202: case (NODE_PARA):
! 203: case (NODE_PROGRAMLISTING):
! 204: case (NODE_REFDESCRIPTOR):
! 205: case (NODE_REFENTRYTITLE):
! 206: case (NODE_REFNAME):
! 207: case (NODE_REFPURPOSE):
! 208: case (NODE_SYNOPSIS):
! 209: case (NODE_TERM):
! 210: case (NODE_TITLE):
! 211: case (NODE_ULINK):
! 212: return(1);
! 213: default:
! 214: break;
! 215: }
! 216: return(0);
1.5 kristaps 217: case (NODE_FILENAME):
218: switch (parent) {
219: case (NODE_EMPHASIS):
220: case (NODE_FUNCSYNOPSISINFO):
221: case (NODE_LINK):
222: case (NODE_PARA):
223: case (NODE_PROGRAMLISTING):
224: case (NODE_REFDESCRIPTOR):
225: case (NODE_REFENTRYTITLE):
226: case (NODE_REFNAME):
227: case (NODE_REFPURPOSE):
228: case (NODE_SYNOPSIS):
229: case (NODE_TERM):
230: case (NODE_TITLE):
231: case (NODE_ULINK):
232: return(1);
233: default:
234: break;
235: }
236: return(0);
1.1 kristaps 237: case (NODE_FUNCDEF):
238: return(NODE_FUNCPROTOTYPE == parent);
239: case (NODE_FUNCPROTOTYPE):
240: return(NODE_FUNCSYNOPSIS == parent);
241: case (NODE_FUNCSYNOPSIS):
242: switch (parent) {
1.4 kristaps 243: case (NODE_ITEMIZEDLIST):
1.1 kristaps 244: case (NODE_LISTITEM):
1.8 ! kristaps 245: case (NODE_ORDEREDLIST):
1.1 kristaps 246: case (NODE_PARA):
247: case (NODE_REFSECT1):
1.7 kristaps 248: case (NODE_REFSECT2):
1.1 kristaps 249: case (NODE_REFSYNOPSISDIV):
250: case (NODE_VARIABLELIST):
251: return(1);
252: default:
253: break;
254: }
255: return(0);
256: case (NODE_FUNCSYNOPSISINFO):
257: return(NODE_FUNCSYNOPSIS == parent);
258: case (NODE_FUNCTION):
259: switch (parent) {
260: case (NODE_CODE):
261: case (NODE_EMPHASIS):
262: case (NODE_FUNCDEF):
263: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 264: case (NODE_LINK):
1.1 kristaps 265: case (NODE_PARA):
266: case (NODE_PROGRAMLISTING):
267: case (NODE_REFDESCRIPTOR):
268: case (NODE_REFENTRYTITLE):
269: case (NODE_REFNAME):
270: case (NODE_REFPURPOSE):
271: case (NODE_SYNOPSIS):
272: case (NODE_TERM):
273: case (NODE_TITLE):
1.2 kristaps 274: case (NODE_ULINK):
275: return(1);
276: default:
277: break;
278: }
279: return(0);
1.4 kristaps 280: case (NODE_ITEMIZEDLIST):
281: switch (parent) {
282: case (NODE_ITEMIZEDLIST):
283: case (NODE_LISTITEM):
1.8 ! kristaps 284: case (NODE_ORDEREDLIST):
1.4 kristaps 285: case (NODE_REFSECT1):
1.7 kristaps 286: case (NODE_REFSECT2):
1.4 kristaps 287: case (NODE_REFSYNOPSISDIV):
288: case (NODE_VARIABLELIST):
289: return(1);
290: default:
291: break;
292: }
293: return(0);
1.2 kristaps 294: case (NODE_LINK):
1.4 kristaps 295: case (NODE_ULINK): /* Synonyms. */
1.2 kristaps 296: switch (parent) {
1.8 ! kristaps 297: case (NODE_ACRONYM):
1.2 kristaps 298: case (NODE_ARG):
299: case (NODE_CODE):
300: case (NODE_COMMAND):
301: case (NODE_EMPHASIS):
1.8 ! kristaps 302: case (NODE_ENVAR):
1.5 kristaps 303: case (NODE_FILENAME):
1.2 kristaps 304: case (NODE_FUNCDEF):
305: case (NODE_FUNCSYNOPSISINFO):
306: case (NODE_FUNCTION):
307: case (NODE_LINK):
1.6 kristaps 308: case (NODE_LITERAL):
1.2 kristaps 309: case (NODE_MANVOLNUM):
310: case (NODE_OPTION):
311: case (NODE_PARA):
312: case (NODE_PARAMDEF):
313: case (NODE_PARAMETER):
314: case (NODE_PROGRAMLISTING):
315: case (NODE_REFDESCRIPTOR):
316: case (NODE_REFENTRYTITLE):
317: case (NODE_REFMISCINFO):
318: case (NODE_REFNAME):
319: case (NODE_REPLACEABLE):
320: case (NODE_SYNOPSIS):
321: case (NODE_TERM):
322: case (NODE_ULINK):
1.1 kristaps 323: return(1);
324: default:
325: break;
326: }
327: return(0);
328: case (NODE_LISTITEM):
1.4 kristaps 329: switch (parent) {
330: case (NODE_ITEMIZEDLIST):
1.8 ! kristaps 331: case (NODE_ORDEREDLIST):
1.4 kristaps 332: case (NODE_VARLISTENTRY):
333: return(1);
334: default:
335: break;
336: }
337: return(0);
1.6 kristaps 338: case (NODE_LITERAL):
339: switch (parent) {
340: case (NODE_EMPHASIS):
341: case (NODE_FUNCSYNOPSISINFO):
342: case (NODE_LINK):
343: case (NODE_PARA):
344: case (NODE_PROGRAMLISTING):
345: case (NODE_REFDESCRIPTOR):
346: case (NODE_REFENTRYTITLE):
347: case (NODE_REFNAME):
348: case (NODE_REFPURPOSE):
349: case (NODE_SYNOPSIS):
350: case (NODE_TERM):
351: case (NODE_TITLE):
352: case (NODE_ULINK):
353: return(1);
354: default:
355: break;
356: }
357: return(0);
1.1 kristaps 358: case (NODE_MANVOLNUM):
359: switch (parent) {
360: case (NODE_CITEREFENTRY):
361: case (NODE_REFMETA):
362: return(1);
363: default:
364: break;
365: }
366: return(0);
367: case (NODE_OPTION):
368: switch (parent) {
369: case (NODE_ARG):
370: case (NODE_EMPHASIS):
371: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 372: case (NODE_LINK):
1.1 kristaps 373: case (NODE_PARA):
374: case (NODE_PROGRAMLISTING):
375: case (NODE_REFDESCRIPTOR):
376: case (NODE_REFENTRYTITLE):
377: case (NODE_REFNAME):
378: case (NODE_REFPURPOSE):
379: case (NODE_SYNOPSIS):
380: case (NODE_TERM):
381: case (NODE_TITLE):
1.2 kristaps 382: case (NODE_ULINK):
1.1 kristaps 383: return(1);
384: default:
385: break;
386: }
387: return(0);
1.8 ! kristaps 388: case (NODE_ORDEREDLIST):
! 389: switch (parent) {
! 390: case (NODE_ITEMIZEDLIST):
! 391: case (NODE_LISTITEM):
! 392: case (NODE_ORDEREDLIST):
! 393: case (NODE_PARA):
! 394: case (NODE_REFSECT1):
! 395: case (NODE_REFSECT2):
! 396: case (NODE_REFSYNOPSISDIV):
! 397: case (NODE_VARIABLELIST):
! 398: return(1);
! 399: default:
! 400: break;
! 401: }
! 402: return(0);
1.1 kristaps 403: case (NODE_PARA):
404: switch (parent) {
1.4 kristaps 405: case (NODE_ITEMIZEDLIST):
1.1 kristaps 406: case (NODE_LISTITEM):
1.8 ! kristaps 407: case (NODE_ORDEREDLIST):
1.1 kristaps 408: case (NODE_REFSECT1):
1.7 kristaps 409: case (NODE_REFSECT2):
1.1 kristaps 410: case (NODE_REFSYNOPSISDIV):
411: case (NODE_VARIABLELIST):
412: return(1);
413: default:
414: break;
415: }
416: return(0);
417: case (NODE_PARAMDEF):
418: return(NODE_FUNCPROTOTYPE == parent);
419: case (NODE_PARAMETER):
420: switch (parent) {
421: case (NODE_CODE):
422: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 423: case (NODE_LINK):
1.1 kristaps 424: case (NODE_PARA):
425: case (NODE_PARAMDEF):
426: case (NODE_PROGRAMLISTING):
427: case (NODE_REFDESCRIPTOR):
428: case (NODE_REFENTRYTITLE):
429: case (NODE_REFNAME):
430: case (NODE_REFPURPOSE):
431: case (NODE_SYNOPSIS):
432: case (NODE_TERM):
433: case (NODE_TITLE):
1.2 kristaps 434: case (NODE_ULINK):
1.1 kristaps 435: return(1);
436: default:
437: break;
438: }
439: return(0);
440: case (NODE_PROGRAMLISTING):
441: switch (parent) {
1.4 kristaps 442: case (NODE_ITEMIZEDLIST):
1.1 kristaps 443: case (NODE_LISTITEM):
1.8 ! kristaps 444: case (NODE_ORDEREDLIST):
1.1 kristaps 445: case (NODE_PARA):
446: case (NODE_REFSECT1):
1.7 kristaps 447: case (NODE_REFSECT2):
1.1 kristaps 448: case (NODE_REFSYNOPSISDIV):
449: return(1);
450: default:
451: break;
452: }
453: return(0);
454: case (NODE_REFCLASS):
455: return(parent == NODE_REFNAMEDIV);
456: case (NODE_REFDESCRIPTOR):
457: return(parent == NODE_REFNAMEDIV);
458: case (NODE_REFENTRY):
459: return(parent == NODE_ROOT);
1.3 kristaps 460: case (NODE_REFENTRYINFO):
461: return(parent == NODE_REFENTRY);
1.1 kristaps 462: case (NODE_REFENTRYTITLE):
463: switch (parent) {
464: case (NODE_CITEREFENTRY):
465: case (NODE_REFMETA):
466: return(1);
467: default:
468: break;
469: }
470: case (NODE_REFMETA):
471: return(parent == NODE_REFENTRY);
472: case (NODE_REFMISCINFO):
473: return(parent == NODE_REFMETA);
474: case (NODE_REFNAME):
475: return(parent == NODE_REFNAMEDIV);
476: case (NODE_REFNAMEDIV):
477: return(parent == NODE_REFENTRY);
478: case (NODE_REFPURPOSE):
479: return(parent == NODE_REFNAMEDIV);
480: case (NODE_REFSECT1):
481: return(parent == NODE_REFENTRY);
1.7 kristaps 482: case (NODE_REFSECT2):
483: switch (parent) {
484: case (NODE_REFSYNOPSISDIV):
485: case (NODE_REFSECT1):
486: return(1);
487: default:
488: break;
489: }
490: return(0);
1.1 kristaps 491: case (NODE_REFSYNOPSISDIV):
492: return(parent == NODE_REFENTRY);
493: case (NODE_REPLACEABLE):
494: switch (parent) {
1.8 ! kristaps 495: case (NODE_ACRONYM):
1.1 kristaps 496: case (NODE_ARG):
497: case (NODE_CODE):
498: case (NODE_COMMAND):
499: case (NODE_EMPHASIS):
1.8 ! kristaps 500: case (NODE_ENVAR):
1.5 kristaps 501: case (NODE_FILENAME):
1.1 kristaps 502: case (NODE_FUNCDEF):
503: case (NODE_FUNCSYNOPSISINFO):
504: case (NODE_FUNCTION):
1.2 kristaps 505: case (NODE_LINK):
1.6 kristaps 506: case (NODE_LITERAL):
1.1 kristaps 507: case (NODE_MANVOLNUM):
508: case (NODE_OPTION):
509: case (NODE_PARA):
510: case (NODE_PARAMDEF):
511: case (NODE_PARAMETER):
512: case (NODE_PROGRAMLISTING):
513: case (NODE_REFDESCRIPTOR):
514: case (NODE_REFENTRYTITLE):
515: case (NODE_REFMISCINFO):
516: case (NODE_REFNAME):
517: case (NODE_REFPURPOSE):
518: case (NODE_REPLACEABLE):
519: case (NODE_SYNOPSIS):
520: case (NODE_TERM):
521: case (NODE_TITLE):
1.2 kristaps 522: case (NODE_ULINK):
1.1 kristaps 523: default:
524: return(1);
1.6 kristaps 525: }
526: return(0);
527: case (NODE_SBR):
528: switch (parent) {
529: case (NODE_ARG):
530: case (NODE_CMDSYNOPSIS):
531: return(1);
532: default:
533: break;
1.1 kristaps 534: }
535: return(0);
536: case (NODE_STRUCTNAME):
537: switch (parent) {
538: case (NODE_CODE):
539: case (NODE_FUNCSYNOPSISINFO):
540: case (NODE_FUNCTION):
541: case (NODE_OPTION):
542: case (NODE_PARA):
543: case (NODE_PARAMETER):
544: case (NODE_PROGRAMLISTING):
545: case (NODE_REFDESCRIPTOR):
546: case (NODE_REFENTRYTITLE):
547: case (NODE_REFNAME):
548: case (NODE_REFPURPOSE):
549: case (NODE_SYNOPSIS):
550: case (NODE_TITLE):
551: return(1);
552: default:
553: break;
554: }
555: return(0);
556: case (NODE_SYNOPSIS):
557: switch (parent) {
1.4 kristaps 558: case (NODE_ITEMIZEDLIST):
1.1 kristaps 559: case (NODE_LISTITEM):
1.8 ! kristaps 560: case (NODE_ORDEREDLIST):
1.1 kristaps 561: case (NODE_REFSYNOPSISDIV):
562: case (NODE_REFSECT1):
1.7 kristaps 563: case (NODE_REFSECT2):
1.1 kristaps 564: return(1);
565: default:
566: break;
567: }
568: return(0);
569: case (NODE_TITLE):
570: switch (parent) {
1.4 kristaps 571: case (NODE_ITEMIZEDLIST):
1.8 ! kristaps 572: case (NODE_ORDEREDLIST):
1.3 kristaps 573: case (NODE_REFENTRYINFO):
1.1 kristaps 574: case (NODE_REFSECT1):
1.7 kristaps 575: case (NODE_REFSECT2):
1.1 kristaps 576: case (NODE_REFSYNOPSISDIV):
577: case (NODE_VARIABLELIST):
578: return(1);
579: default:
580: break;
581: }
582: return(0);
583: case (NODE_TERM):
584: return(NODE_VARLISTENTRY == parent);
585: case (NODE_TEXT):
586: return(1);
587: case (NODE_VARIABLELIST):
588: switch (parent) {
1.4 kristaps 589: case (NODE_ITEMIZEDLIST):
1.8 ! kristaps 590: case (NODE_ORDEREDLIST):
1.1 kristaps 591: case (NODE_PARA):
592: case (NODE_REFSECT1):
1.7 kristaps 593: case (NODE_REFSECT2):
1.1 kristaps 594: case (NODE_REFSYNOPSISDIV):
595: case (NODE_VARIABLELIST):
596: return(1);
597: default:
598: break;
599: }
600: return(0);
601: case (NODE_VARLISTENTRY):
602: return (NODE_VARIABLELIST == parent);
603: case (NODE__MAX):
604: break;
605: }
606:
607: abort();
608: return(0);
609: }
610:
CVSweb