Annotation of docbook2mdoc/rules.c, Revision 1.3
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) {
86: case (NODE_LISTITEM):
87: case (NODE_PARA):
88: case (NODE_REFSECT1):
89: case (NODE_REFSYNOPSISDIV):
90: case (NODE_VARIABLELIST):
91: return(1);
92: default:
93: break;
94: }
95: return(0);
96: case (NODE_CODE):
97: switch (parent) {
98: case (NODE_EMPHASIS):
99: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 100: case (NODE_LINK):
1.1 kristaps 101: case (NODE_PARA):
102: case (NODE_PROGRAMLISTING):
103: case (NODE_REFDESCRIPTOR):
104: case (NODE_REFENTRYTITLE):
105: case (NODE_REFNAME):
106: case (NODE_REFPURPOSE):
107: case (NODE_SYNOPSIS):
108: case (NODE_TERM):
109: case (NODE_TITLE):
1.2 kristaps 110: case (NODE_ULINK):
1.1 kristaps 111: return(1);
112: default:
113: break;
114: }
115: return(0);
116: case (NODE_COMMAND):
117: switch (parent) {
118: case (NODE_CMDSYNOPSIS):
119: case (NODE_EMPHASIS):
120: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 121: case (NODE_LINK):
1.1 kristaps 122: case (NODE_PARA):
123: case (NODE_PROGRAMLISTING):
124: case (NODE_REFDESCRIPTOR):
125: case (NODE_REFENTRYTITLE):
126: case (NODE_REFNAME):
127: case (NODE_REFPURPOSE):
128: case (NODE_SYNOPSIS):
129: case (NODE_TERM):
130: case (NODE_TITLE):
1.2 kristaps 131: case (NODE_ULINK):
1.1 kristaps 132: return(1);
133: default:
134: break;
135: }
136: return(0);
1.3 ! kristaps 137: case (NODE_DATE):
! 138: switch (parent) {
! 139: case (NODE_EMPHASIS):
! 140: case (NODE_FUNCSYNOPSISINFO):
! 141: case (NODE_LINK):
! 142: case (NODE_PARA):
! 143: case (NODE_PROGRAMLISTING):
! 144: case (NODE_REFDESCRIPTOR):
! 145: case (NODE_REFENTRYINFO):
! 146: case (NODE_REFENTRYTITLE):
! 147: case (NODE_REFNAME):
! 148: case (NODE_REFPURPOSE):
! 149: case (NODE_SYNOPSIS):
! 150: case (NODE_TITLE):
! 151: case (NODE_ULINK):
! 152: return(1);
! 153: default:
! 154: break;
! 155: }
! 156: return(0);
1.1 kristaps 157: case (NODE_EMPHASIS):
158: switch (parent) {
159: case (NODE_EMPHASIS):
160: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 161: case (NODE_LINK):
1.1 kristaps 162: case (NODE_PARA):
163: case (NODE_PROGRAMLISTING):
164: case (NODE_REFDESCRIPTOR):
165: case (NODE_REFENTRYTITLE):
166: case (NODE_REFNAME):
167: case (NODE_REFPURPOSE):
168: case (NODE_SYNOPSIS):
169: case (NODE_TERM):
170: case (NODE_TITLE):
1.2 kristaps 171: case (NODE_ULINK):
1.1 kristaps 172: return(1);
173: default:
174: break;
175: }
176: return(0);
177: case (NODE_FUNCDEF):
178: return(NODE_FUNCPROTOTYPE == parent);
179: case (NODE_FUNCPROTOTYPE):
180: return(NODE_FUNCSYNOPSIS == parent);
181: case (NODE_FUNCSYNOPSIS):
182: switch (parent) {
183: case (NODE_LISTITEM):
184: case (NODE_PARA):
185: case (NODE_REFSECT1):
186: case (NODE_REFSYNOPSISDIV):
187: case (NODE_VARIABLELIST):
188: return(1);
189: default:
190: break;
191: }
192: return(0);
193: case (NODE_FUNCSYNOPSISINFO):
194: return(NODE_FUNCSYNOPSIS == parent);
195: case (NODE_FUNCTION):
196: switch (parent) {
197: case (NODE_CODE):
198: case (NODE_EMPHASIS):
199: case (NODE_FUNCDEF):
200: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 201: case (NODE_LINK):
1.1 kristaps 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):
1.2 kristaps 211: case (NODE_ULINK):
212: return(1);
213: default:
214: break;
215: }
216: return(0);
217: case (NODE_LINK):
218: case (NODE_ULINK): /* Synonyms? */
219: switch (parent) {
220: case (NODE_ARG):
221: case (NODE_CODE):
222: case (NODE_COMMAND):
223: case (NODE_EMPHASIS):
224: case (NODE_FUNCDEF):
225: case (NODE_FUNCSYNOPSISINFO):
226: case (NODE_FUNCTION):
227: case (NODE_LINK):
228: case (NODE_MANVOLNUM):
229: case (NODE_OPTION):
230: case (NODE_PARA):
231: case (NODE_PARAMDEF):
232: case (NODE_PARAMETER):
233: case (NODE_PROGRAMLISTING):
234: case (NODE_REFDESCRIPTOR):
235: case (NODE_REFENTRYTITLE):
236: case (NODE_REFMISCINFO):
237: case (NODE_REFNAME):
238: case (NODE_REPLACEABLE):
239: case (NODE_SYNOPSIS):
240: case (NODE_TERM):
241: case (NODE_ULINK):
1.1 kristaps 242: return(1);
243: default:
244: break;
245: }
246: return(0);
247: case (NODE_LISTITEM):
248: return(NODE_VARLISTENTRY == parent);
249: case (NODE_MANVOLNUM):
250: switch (parent) {
251: case (NODE_CITEREFENTRY):
252: case (NODE_REFMETA):
253: return(1);
254: default:
255: break;
256: }
257: return(0);
258: case (NODE_OPTION):
259: switch (parent) {
260: case (NODE_ARG):
261: case (NODE_EMPHASIS):
262: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 263: case (NODE_LINK):
1.1 kristaps 264: case (NODE_PARA):
265: case (NODE_PROGRAMLISTING):
266: case (NODE_REFDESCRIPTOR):
267: case (NODE_REFENTRYTITLE):
268: case (NODE_REFNAME):
269: case (NODE_REFPURPOSE):
270: case (NODE_SYNOPSIS):
271: case (NODE_TERM):
272: case (NODE_TITLE):
1.2 kristaps 273: case (NODE_ULINK):
1.1 kristaps 274: return(1);
275: default:
276: break;
277: }
278: return(0);
279: case (NODE_PARA):
280: switch (parent) {
281: case (NODE_LISTITEM):
282: case (NODE_REFSECT1):
283: case (NODE_REFSYNOPSISDIV):
284: case (NODE_VARIABLELIST):
285: return(1);
286: default:
287: break;
288: }
289: return(0);
290: case (NODE_PARAMDEF):
291: return(NODE_FUNCPROTOTYPE == parent);
292: case (NODE_PARAMETER):
293: switch (parent) {
294: case (NODE_CODE):
295: case (NODE_FUNCSYNOPSISINFO):
1.2 kristaps 296: case (NODE_LINK):
1.1 kristaps 297: case (NODE_PARA):
298: case (NODE_PARAMDEF):
299: case (NODE_PROGRAMLISTING):
300: case (NODE_REFDESCRIPTOR):
301: case (NODE_REFENTRYTITLE):
302: case (NODE_REFNAME):
303: case (NODE_REFPURPOSE):
304: case (NODE_SYNOPSIS):
305: case (NODE_TERM):
306: case (NODE_TITLE):
1.2 kristaps 307: case (NODE_ULINK):
1.1 kristaps 308: return(1);
309: default:
310: break;
311: }
312: return(0);
313: case (NODE_PROGRAMLISTING):
314: switch (parent) {
315: case (NODE_LISTITEM):
316: case (NODE_PARA):
317: case (NODE_REFSECT1):
318: case (NODE_REFSYNOPSISDIV):
319: return(1);
320: default:
321: break;
322: }
323: return(0);
324: case (NODE_REFCLASS):
325: return(parent == NODE_REFNAMEDIV);
326: case (NODE_REFDESCRIPTOR):
327: return(parent == NODE_REFNAMEDIV);
328: case (NODE_REFENTRY):
329: return(parent == NODE_ROOT);
1.3 ! kristaps 330: case (NODE_REFENTRYINFO):
! 331: return(parent == NODE_REFENTRY);
1.1 kristaps 332: case (NODE_REFENTRYTITLE):
333: switch (parent) {
334: case (NODE_CITEREFENTRY):
335: case (NODE_REFMETA):
336: return(1);
337: default:
338: break;
339: }
340: case (NODE_REFMETA):
341: return(parent == NODE_REFENTRY);
342: case (NODE_REFMISCINFO):
343: return(parent == NODE_REFMETA);
344: case (NODE_REFNAME):
345: return(parent == NODE_REFNAMEDIV);
346: case (NODE_REFNAMEDIV):
347: return(parent == NODE_REFENTRY);
348: case (NODE_REFPURPOSE):
349: return(parent == NODE_REFNAMEDIV);
350: case (NODE_REFSECT1):
351: return(parent == NODE_REFENTRY);
352: case (NODE_REFSYNOPSISDIV):
353: return(parent == NODE_REFENTRY);
354: case (NODE_REPLACEABLE):
355: switch (parent) {
356: case (NODE_ARG):
357: case (NODE_CODE):
358: case (NODE_COMMAND):
359: case (NODE_EMPHASIS):
360: case (NODE_FUNCDEF):
361: case (NODE_FUNCSYNOPSISINFO):
362: case (NODE_FUNCTION):
1.2 kristaps 363: case (NODE_LINK):
1.1 kristaps 364: case (NODE_MANVOLNUM):
365: case (NODE_OPTION):
366: case (NODE_PARA):
367: case (NODE_PARAMDEF):
368: case (NODE_PARAMETER):
369: case (NODE_PROGRAMLISTING):
370: case (NODE_REFDESCRIPTOR):
371: case (NODE_REFENTRYTITLE):
372: case (NODE_REFMISCINFO):
373: case (NODE_REFNAME):
374: case (NODE_REFPURPOSE):
375: case (NODE_REPLACEABLE):
376: case (NODE_SYNOPSIS):
377: case (NODE_TERM):
378: case (NODE_TITLE):
1.2 kristaps 379: case (NODE_ULINK):
1.1 kristaps 380: default:
381: return(1);
382: }
383: return(0);
384: case (NODE_STRUCTNAME):
385: switch (parent) {
386: case (NODE_CODE):
387: case (NODE_FUNCSYNOPSISINFO):
388: case (NODE_FUNCTION):
389: case (NODE_OPTION):
390: case (NODE_PARA):
391: case (NODE_PARAMETER):
392: case (NODE_PROGRAMLISTING):
393: case (NODE_REFDESCRIPTOR):
394: case (NODE_REFENTRYTITLE):
395: case (NODE_REFNAME):
396: case (NODE_REFPURPOSE):
397: case (NODE_SYNOPSIS):
398: case (NODE_TITLE):
399: return(1);
400: default:
401: break;
402: }
403: return(0);
404: case (NODE_SYNOPSIS):
405: switch (parent) {
406: case (NODE_LISTITEM):
407: case (NODE_REFSYNOPSISDIV):
408: case (NODE_REFSECT1):
409: return(1);
410: default:
411: break;
412: }
413: return(0);
414: case (NODE_TITLE):
415: switch (parent) {
1.3 ! kristaps 416: case (NODE_REFENTRYINFO):
1.1 kristaps 417: case (NODE_REFSECT1):
418: case (NODE_REFSYNOPSISDIV):
419: case (NODE_VARIABLELIST):
420: return(1);
421: default:
422: break;
423: }
424: return(0);
425: case (NODE_TERM):
426: return(NODE_VARLISTENTRY == parent);
427: case (NODE_TEXT):
428: return(1);
429: case (NODE_VARIABLELIST):
430: switch (parent) {
431: case (NODE_PARA):
432: case (NODE_REFSECT1):
433: case (NODE_REFSYNOPSISDIV):
434: case (NODE_VARIABLELIST):
435: return(1);
436: default:
437: break;
438: }
439: return(0);
440: case (NODE_VARLISTENTRY):
441: return (NODE_VARIABLELIST == parent);
442: case (NODE__MAX):
443: break;
444: }
445:
446: abort();
447: return(0);
448: }
449:
CVSweb