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