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