Annotation of docbook2mdoc/rules.c, Revision 1.5
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):
263: case (NODE_MANVOLNUM):
264: case (NODE_OPTION):
265: case (NODE_PARA):
266: case (NODE_PARAMDEF):
267: case (NODE_PARAMETER):
268: case (NODE_PROGRAMLISTING):
269: case (NODE_REFDESCRIPTOR):
270: case (NODE_REFENTRYTITLE):
271: case (NODE_REFMISCINFO):
272: case (NODE_REFNAME):
273: case (NODE_REPLACEABLE):
274: case (NODE_SYNOPSIS):
275: case (NODE_TERM):
276: case (NODE_ULINK):
1.1 kristaps 277: return(1);
278: default:
279: break;
280: }
281: return(0);
282: case (NODE_LISTITEM):
1.4 kristaps 283: switch (parent) {
284: case (NODE_ITEMIZEDLIST):
285: case (NODE_VARLISTENTRY):
286: return(1);
287: default:
288: break;
289: }
290: return(0);
1.1 kristaps 291: case (NODE_MANVOLNUM):
292: switch (parent) {
293: case (NODE_CITEREFENTRY):
294: case (NODE_REFMETA):
295: return(1);
296: default:
297: break;
298: }
299: return(0);
300: case (NODE_OPTION):
301: switch (parent) {
302: case (NODE_ARG):
303: case (NODE_EMPHASIS):
304: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 305: case (NODE_LINK):
1.1 kristaps 306: case (NODE_PARA):
307: case (NODE_PROGRAMLISTING):
308: case (NODE_REFDESCRIPTOR):
309: case (NODE_REFENTRYTITLE):
310: case (NODE_REFNAME):
311: case (NODE_REFPURPOSE):
312: case (NODE_SYNOPSIS):
313: case (NODE_TERM):
314: case (NODE_TITLE):
1.2 kristaps 315: case (NODE_ULINK):
1.1 kristaps 316: return(1);
317: default:
318: break;
319: }
320: return(0);
321: case (NODE_PARA):
322: switch (parent) {
1.4 kristaps 323: case (NODE_ITEMIZEDLIST):
1.1 kristaps 324: case (NODE_LISTITEM):
325: case (NODE_REFSECT1):
326: case (NODE_REFSYNOPSISDIV):
327: case (NODE_VARIABLELIST):
328: return(1);
329: default:
330: break;
331: }
332: return(0);
333: case (NODE_PARAMDEF):
334: return(NODE_FUNCPROTOTYPE == parent);
335: case (NODE_PARAMETER):
336: switch (parent) {
337: case (NODE_CODE):
338: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 339: case (NODE_LINK):
1.1 kristaps 340: case (NODE_PARA):
341: case (NODE_PARAMDEF):
342: case (NODE_PROGRAMLISTING):
343: case (NODE_REFDESCRIPTOR):
344: case (NODE_REFENTRYTITLE):
345: case (NODE_REFNAME):
346: case (NODE_REFPURPOSE):
347: case (NODE_SYNOPSIS):
348: case (NODE_TERM):
349: case (NODE_TITLE):
1.2 kristaps 350: case (NODE_ULINK):
1.1 kristaps 351: return(1);
352: default:
353: break;
354: }
355: return(0);
356: case (NODE_PROGRAMLISTING):
357: switch (parent) {
1.4 kristaps 358: case (NODE_ITEMIZEDLIST):
1.1 kristaps 359: case (NODE_LISTITEM):
360: case (NODE_PARA):
361: case (NODE_REFSECT1):
362: case (NODE_REFSYNOPSISDIV):
363: return(1);
364: default:
365: break;
366: }
367: return(0);
368: case (NODE_REFCLASS):
369: return(parent == NODE_REFNAMEDIV);
370: case (NODE_REFDESCRIPTOR):
371: return(parent == NODE_REFNAMEDIV);
372: case (NODE_REFENTRY):
373: return(parent == NODE_ROOT);
1.3 kristaps 374: case (NODE_REFENTRYINFO):
375: return(parent == NODE_REFENTRY);
1.1 kristaps 376: case (NODE_REFENTRYTITLE):
377: switch (parent) {
378: case (NODE_CITEREFENTRY):
379: case (NODE_REFMETA):
380: return(1);
381: default:
382: break;
383: }
384: case (NODE_REFMETA):
385: return(parent == NODE_REFENTRY);
386: case (NODE_REFMISCINFO):
387: return(parent == NODE_REFMETA);
388: case (NODE_REFNAME):
389: return(parent == NODE_REFNAMEDIV);
390: case (NODE_REFNAMEDIV):
391: return(parent == NODE_REFENTRY);
392: case (NODE_REFPURPOSE):
393: return(parent == NODE_REFNAMEDIV);
394: case (NODE_REFSECT1):
395: return(parent == NODE_REFENTRY);
396: case (NODE_REFSYNOPSISDIV):
397: return(parent == NODE_REFENTRY);
398: case (NODE_REPLACEABLE):
399: switch (parent) {
400: case (NODE_ARG):
401: case (NODE_CODE):
402: case (NODE_COMMAND):
403: case (NODE_EMPHASIS):
1.5 ! kristaps 404: case (NODE_FILENAME):
1.1 kristaps 405: case (NODE_FUNCDEF):
406: case (NODE_FUNCSYNOPSISINFO):
407: case (NODE_FUNCTION):
1.2 kristaps 408: case (NODE_LINK):
1.1 kristaps 409: case (NODE_MANVOLNUM):
410: case (NODE_OPTION):
411: case (NODE_PARA):
412: case (NODE_PARAMDEF):
413: case (NODE_PARAMETER):
414: case (NODE_PROGRAMLISTING):
415: case (NODE_REFDESCRIPTOR):
416: case (NODE_REFENTRYTITLE):
417: case (NODE_REFMISCINFO):
418: case (NODE_REFNAME):
419: case (NODE_REFPURPOSE):
420: case (NODE_REPLACEABLE):
421: case (NODE_SYNOPSIS):
422: case (NODE_TERM):
423: case (NODE_TITLE):
1.2 kristaps 424: case (NODE_ULINK):
1.1 kristaps 425: default:
426: return(1);
427: }
428: return(0);
429: case (NODE_STRUCTNAME):
430: switch (parent) {
431: case (NODE_CODE):
432: case (NODE_FUNCSYNOPSISINFO):
433: case (NODE_FUNCTION):
434: case (NODE_OPTION):
435: case (NODE_PARA):
436: case (NODE_PARAMETER):
437: case (NODE_PROGRAMLISTING):
438: case (NODE_REFDESCRIPTOR):
439: case (NODE_REFENTRYTITLE):
440: case (NODE_REFNAME):
441: case (NODE_REFPURPOSE):
442: case (NODE_SYNOPSIS):
443: case (NODE_TITLE):
444: return(1);
445: default:
446: break;
447: }
448: return(0);
449: case (NODE_SYNOPSIS):
450: switch (parent) {
1.4 kristaps 451: case (NODE_ITEMIZEDLIST):
1.1 kristaps 452: case (NODE_LISTITEM):
453: case (NODE_REFSYNOPSISDIV):
454: case (NODE_REFSECT1):
455: return(1);
456: default:
457: break;
458: }
459: return(0);
460: case (NODE_TITLE):
461: switch (parent) {
1.4 kristaps 462: case (NODE_ITEMIZEDLIST):
1.3 kristaps 463: case (NODE_REFENTRYINFO):
1.1 kristaps 464: case (NODE_REFSECT1):
465: case (NODE_REFSYNOPSISDIV):
466: case (NODE_VARIABLELIST):
467: return(1);
468: default:
469: break;
470: }
471: return(0);
472: case (NODE_TERM):
473: return(NODE_VARLISTENTRY == parent);
474: case (NODE_TEXT):
475: return(1);
476: case (NODE_VARIABLELIST):
477: switch (parent) {
1.4 kristaps 478: case (NODE_ITEMIZEDLIST):
1.1 kristaps 479: case (NODE_PARA):
480: case (NODE_REFSECT1):
481: case (NODE_REFSYNOPSISDIV):
482: case (NODE_VARIABLELIST):
483: return(1);
484: default:
485: break;
486: }
487: return(0);
488: case (NODE_VARLISTENTRY):
489: return (NODE_VARIABLELIST == parent);
490: case (NODE__MAX):
491: break;
492: }
493:
494: abort();
495: return(0);
496: }
497:
CVSweb