Annotation of docbook2mdoc/rules.c, Revision 1.2
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);
137: case (NODE_EMPHASIS):
138: switch (parent) {
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);
157: case (NODE_FUNCDEF):
158: return(NODE_FUNCPROTOTYPE == parent);
159: case (NODE_FUNCPROTOTYPE):
160: return(NODE_FUNCSYNOPSIS == parent);
161: case (NODE_FUNCSYNOPSIS):
162: switch (parent) {
163: case (NODE_LISTITEM):
164: case (NODE_PARA):
165: case (NODE_REFSECT1):
166: case (NODE_REFSYNOPSISDIV):
167: case (NODE_VARIABLELIST):
168: return(1);
169: default:
170: break;
171: }
172: return(0);
173: case (NODE_FUNCSYNOPSISINFO):
174: return(NODE_FUNCSYNOPSIS == parent);
175: case (NODE_FUNCTION):
176: switch (parent) {
177: case (NODE_CODE):
178: case (NODE_EMPHASIS):
179: case (NODE_FUNCDEF):
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):
! 192: return(1);
! 193: default:
! 194: break;
! 195: }
! 196: return(0);
! 197: case (NODE_LINK):
! 198: case (NODE_ULINK): /* Synonyms? */
! 199: switch (parent) {
! 200: case (NODE_ARG):
! 201: case (NODE_CODE):
! 202: case (NODE_COMMAND):
! 203: case (NODE_EMPHASIS):
! 204: case (NODE_FUNCDEF):
! 205: case (NODE_FUNCSYNOPSISINFO):
! 206: case (NODE_FUNCTION):
! 207: case (NODE_LINK):
! 208: case (NODE_MANVOLNUM):
! 209: case (NODE_OPTION):
! 210: case (NODE_PARA):
! 211: case (NODE_PARAMDEF):
! 212: case (NODE_PARAMETER):
! 213: case (NODE_PROGRAMLISTING):
! 214: case (NODE_REFDESCRIPTOR):
! 215: case (NODE_REFENTRYTITLE):
! 216: case (NODE_REFMISCINFO):
! 217: case (NODE_REFNAME):
! 218: case (NODE_REPLACEABLE):
! 219: case (NODE_SYNOPSIS):
! 220: case (NODE_TERM):
! 221: case (NODE_ULINK):
1.1 kristaps 222: return(1);
223: default:
224: break;
225: }
226: return(0);
227: case (NODE_LISTITEM):
228: return(NODE_VARLISTENTRY == parent);
229: case (NODE_MANVOLNUM):
230: switch (parent) {
231: case (NODE_CITEREFENTRY):
232: case (NODE_REFMETA):
233: return(1);
234: default:
235: break;
236: }
237: return(0);
238: case (NODE_OPTION):
239: switch (parent) {
240: case (NODE_ARG):
241: case (NODE_EMPHASIS):
242: case (NODE_FUNCSYNOPSISINFO):
1.2 ! kristaps 243: case (NODE_LINK):
1.1 kristaps 244: case (NODE_PARA):
245: case (NODE_PROGRAMLISTING):
246: case (NODE_REFDESCRIPTOR):
247: case (NODE_REFENTRYTITLE):
248: case (NODE_REFNAME):
249: case (NODE_REFPURPOSE):
250: case (NODE_SYNOPSIS):
251: case (NODE_TERM):
252: case (NODE_TITLE):
1.2 ! kristaps 253: case (NODE_ULINK):
1.1 kristaps 254: return(1);
255: default:
256: break;
257: }
258: return(0);
259: case (NODE_PARA):
260: switch (parent) {
261: case (NODE_LISTITEM):
262: case (NODE_REFSECT1):
263: case (NODE_REFSYNOPSISDIV):
264: case (NODE_VARIABLELIST):
265: return(1);
266: default:
267: break;
268: }
269: return(0);
270: case (NODE_PARAMDEF):
271: return(NODE_FUNCPROTOTYPE == parent);
272: case (NODE_PARAMETER):
273: switch (parent) {
274: case (NODE_CODE):
275: case (NODE_FUNCSYNOPSISINFO):
1.2 ! kristaps 276: case (NODE_LINK):
1.1 kristaps 277: case (NODE_PARA):
278: case (NODE_PARAMDEF):
279: case (NODE_PROGRAMLISTING):
280: case (NODE_REFDESCRIPTOR):
281: case (NODE_REFENTRYTITLE):
282: case (NODE_REFNAME):
283: case (NODE_REFPURPOSE):
284: case (NODE_SYNOPSIS):
285: case (NODE_TERM):
286: case (NODE_TITLE):
1.2 ! kristaps 287: case (NODE_ULINK):
1.1 kristaps 288: return(1);
289: default:
290: break;
291: }
292: return(0);
293: case (NODE_PROGRAMLISTING):
294: switch (parent) {
295: case (NODE_LISTITEM):
296: case (NODE_PARA):
297: case (NODE_REFSECT1):
298: case (NODE_REFSYNOPSISDIV):
299: return(1);
300: default:
301: break;
302: }
303: return(0);
304: case (NODE_REFCLASS):
305: return(parent == NODE_REFNAMEDIV);
306: case (NODE_REFDESCRIPTOR):
307: return(parent == NODE_REFNAMEDIV);
308: case (NODE_REFENTRY):
309: return(parent == NODE_ROOT);
310: case (NODE_REFENTRYTITLE):
311: switch (parent) {
312: case (NODE_CITEREFENTRY):
313: case (NODE_REFMETA):
314: return(1);
315: default:
316: break;
317: }
318: case (NODE_REFMETA):
319: return(parent == NODE_REFENTRY);
320: case (NODE_REFMISCINFO):
321: return(parent == NODE_REFMETA);
322: case (NODE_REFNAME):
323: return(parent == NODE_REFNAMEDIV);
324: case (NODE_REFNAMEDIV):
325: return(parent == NODE_REFENTRY);
326: case (NODE_REFPURPOSE):
327: return(parent == NODE_REFNAMEDIV);
328: case (NODE_REFSECT1):
329: return(parent == NODE_REFENTRY);
330: case (NODE_REFSYNOPSISDIV):
331: return(parent == NODE_REFENTRY);
332: case (NODE_REPLACEABLE):
333: switch (parent) {
334: case (NODE_ARG):
335: case (NODE_CODE):
336: case (NODE_COMMAND):
337: case (NODE_EMPHASIS):
338: case (NODE_FUNCDEF):
339: case (NODE_FUNCSYNOPSISINFO):
340: case (NODE_FUNCTION):
1.2 ! kristaps 341: case (NODE_LINK):
1.1 kristaps 342: case (NODE_MANVOLNUM):
343: case (NODE_OPTION):
344: case (NODE_PARA):
345: case (NODE_PARAMDEF):
346: case (NODE_PARAMETER):
347: case (NODE_PROGRAMLISTING):
348: case (NODE_REFDESCRIPTOR):
349: case (NODE_REFENTRYTITLE):
350: case (NODE_REFMISCINFO):
351: case (NODE_REFNAME):
352: case (NODE_REFPURPOSE):
353: case (NODE_REPLACEABLE):
354: case (NODE_SYNOPSIS):
355: case (NODE_TERM):
356: case (NODE_TITLE):
1.2 ! kristaps 357: case (NODE_ULINK):
1.1 kristaps 358: default:
359: return(1);
360: }
361: return(0);
362: case (NODE_STRUCTNAME):
363: switch (parent) {
364: case (NODE_CODE):
365: case (NODE_FUNCSYNOPSISINFO):
366: case (NODE_FUNCTION):
367: case (NODE_OPTION):
368: case (NODE_PARA):
369: case (NODE_PARAMETER):
370: case (NODE_PROGRAMLISTING):
371: case (NODE_REFDESCRIPTOR):
372: case (NODE_REFENTRYTITLE):
373: case (NODE_REFNAME):
374: case (NODE_REFPURPOSE):
375: case (NODE_SYNOPSIS):
376: case (NODE_TITLE):
377: return(1);
378: default:
379: break;
380: }
381: return(0);
382: case (NODE_SYNOPSIS):
383: switch (parent) {
384: case (NODE_LISTITEM):
385: case (NODE_REFSYNOPSISDIV):
386: case (NODE_REFSECT1):
387: return(1);
388: default:
389: break;
390: }
391: return(0);
392: case (NODE_TITLE):
393: switch (parent) {
394: case (NODE_REFSECT1):
395: case (NODE_REFSYNOPSISDIV):
396: case (NODE_VARIABLELIST):
397: return(1);
398: default:
399: break;
400: }
401: return(0);
402: case (NODE_TERM):
403: return(NODE_VARLISTENTRY == parent);
404: case (NODE_TEXT):
405: return(1);
406: case (NODE_VARIABLELIST):
407: switch (parent) {
408: case (NODE_PARA):
409: case (NODE_REFSECT1):
410: case (NODE_REFSYNOPSISDIV):
411: case (NODE_VARIABLELIST):
412: return(1);
413: default:
414: break;
415: }
416: return(0);
417: case (NODE_VARLISTENTRY):
418: return (NODE_VARIABLELIST == parent);
419: case (NODE__MAX):
420: break;
421: }
422:
423: abort();
424: return(0);
425: }
426:
CVSweb