Annotation of docbook2mdoc/rules.c, Revision 1.1
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):
! 68: case (NODE_PARA):
! 69: case (NODE_PROGRAMLISTING):
! 70: case (NODE_REFDESCRIPTOR):
! 71: case (NODE_REFENTRYTITLE):
! 72: case (NODE_REFNAME):
! 73: case (NODE_REFPURPOSE):
! 74: case (NODE_SYNOPSIS):
! 75: case (NODE_TERM):
! 76: case (NODE_TITLE):
! 77: return(1);
! 78: default:
! 79: break;
! 80: }
! 81: return(0);
! 82: case (NODE_CMDSYNOPSIS):
! 83: switch (parent) {
! 84: case (NODE_LISTITEM):
! 85: case (NODE_PARA):
! 86: case (NODE_REFSECT1):
! 87: case (NODE_REFSYNOPSISDIV):
! 88: case (NODE_VARIABLELIST):
! 89: return(1);
! 90: default:
! 91: break;
! 92: }
! 93: return(0);
! 94: case (NODE_CODE):
! 95: switch (parent) {
! 96: case (NODE_EMPHASIS):
! 97: case (NODE_FUNCSYNOPSISINFO):
! 98: case (NODE_PARA):
! 99: case (NODE_PROGRAMLISTING):
! 100: case (NODE_REFDESCRIPTOR):
! 101: case (NODE_REFENTRYTITLE):
! 102: case (NODE_REFNAME):
! 103: case (NODE_REFPURPOSE):
! 104: case (NODE_SYNOPSIS):
! 105: case (NODE_TERM):
! 106: case (NODE_TITLE):
! 107: return(1);
! 108: default:
! 109: break;
! 110: }
! 111: return(0);
! 112: case (NODE_COMMAND):
! 113: switch (parent) {
! 114: case (NODE_CMDSYNOPSIS):
! 115: case (NODE_EMPHASIS):
! 116: case (NODE_FUNCSYNOPSISINFO):
! 117: case (NODE_PARA):
! 118: case (NODE_PROGRAMLISTING):
! 119: case (NODE_REFDESCRIPTOR):
! 120: case (NODE_REFENTRYTITLE):
! 121: case (NODE_REFNAME):
! 122: case (NODE_REFPURPOSE):
! 123: case (NODE_SYNOPSIS):
! 124: case (NODE_TERM):
! 125: case (NODE_TITLE):
! 126: return(1);
! 127: default:
! 128: break;
! 129: }
! 130: return(0);
! 131: case (NODE_EMPHASIS):
! 132: switch (parent) {
! 133: case (NODE_EMPHASIS):
! 134: case (NODE_FUNCSYNOPSISINFO):
! 135: case (NODE_PARA):
! 136: case (NODE_PROGRAMLISTING):
! 137: case (NODE_REFDESCRIPTOR):
! 138: case (NODE_REFENTRYTITLE):
! 139: case (NODE_REFNAME):
! 140: case (NODE_REFPURPOSE):
! 141: case (NODE_SYNOPSIS):
! 142: case (NODE_TERM):
! 143: case (NODE_TITLE):
! 144: return(1);
! 145: default:
! 146: break;
! 147: }
! 148: return(0);
! 149: case (NODE_FUNCDEF):
! 150: return(NODE_FUNCPROTOTYPE == parent);
! 151: case (NODE_FUNCPROTOTYPE):
! 152: return(NODE_FUNCSYNOPSIS == parent);
! 153: case (NODE_FUNCSYNOPSIS):
! 154: switch (parent) {
! 155: case (NODE_LISTITEM):
! 156: case (NODE_PARA):
! 157: case (NODE_REFSECT1):
! 158: case (NODE_REFSYNOPSISDIV):
! 159: case (NODE_VARIABLELIST):
! 160: return(1);
! 161: default:
! 162: break;
! 163: }
! 164: return(0);
! 165: case (NODE_FUNCSYNOPSISINFO):
! 166: return(NODE_FUNCSYNOPSIS == parent);
! 167: case (NODE_FUNCTION):
! 168: switch (parent) {
! 169: case (NODE_CODE):
! 170: case (NODE_EMPHASIS):
! 171: case (NODE_FUNCDEF):
! 172: case (NODE_FUNCSYNOPSISINFO):
! 173: case (NODE_PARA):
! 174: case (NODE_PROGRAMLISTING):
! 175: case (NODE_REFDESCRIPTOR):
! 176: case (NODE_REFENTRYTITLE):
! 177: case (NODE_REFNAME):
! 178: case (NODE_REFPURPOSE):
! 179: case (NODE_SYNOPSIS):
! 180: case (NODE_TERM):
! 181: case (NODE_TITLE):
! 182: return(1);
! 183: default:
! 184: break;
! 185: }
! 186: return(0);
! 187: case (NODE_LISTITEM):
! 188: return(NODE_VARLISTENTRY == parent);
! 189: case (NODE_MANVOLNUM):
! 190: switch (parent) {
! 191: case (NODE_CITEREFENTRY):
! 192: case (NODE_REFMETA):
! 193: return(1);
! 194: default:
! 195: break;
! 196: }
! 197: return(0);
! 198: case (NODE_OPTION):
! 199: switch (parent) {
! 200: case (NODE_ARG):
! 201: case (NODE_EMPHASIS):
! 202: case (NODE_FUNCSYNOPSISINFO):
! 203: case (NODE_PARA):
! 204: case (NODE_PROGRAMLISTING):
! 205: case (NODE_REFDESCRIPTOR):
! 206: case (NODE_REFENTRYTITLE):
! 207: case (NODE_REFNAME):
! 208: case (NODE_REFPURPOSE):
! 209: case (NODE_SYNOPSIS):
! 210: case (NODE_TERM):
! 211: case (NODE_TITLE):
! 212: return(1);
! 213: default:
! 214: break;
! 215: }
! 216: return(0);
! 217: case (NODE_PARA):
! 218: switch (parent) {
! 219: case (NODE_LISTITEM):
! 220: case (NODE_REFSECT1):
! 221: case (NODE_REFSYNOPSISDIV):
! 222: case (NODE_VARIABLELIST):
! 223: return(1);
! 224: default:
! 225: break;
! 226: }
! 227: return(0);
! 228: case (NODE_PARAMDEF):
! 229: return(NODE_FUNCPROTOTYPE == parent);
! 230: case (NODE_PARAMETER):
! 231: switch (parent) {
! 232: case (NODE_CODE):
! 233: case (NODE_FUNCSYNOPSISINFO):
! 234: case (NODE_PARA):
! 235: case (NODE_PARAMDEF):
! 236: case (NODE_PROGRAMLISTING):
! 237: case (NODE_REFDESCRIPTOR):
! 238: case (NODE_REFENTRYTITLE):
! 239: case (NODE_REFNAME):
! 240: case (NODE_REFPURPOSE):
! 241: case (NODE_SYNOPSIS):
! 242: case (NODE_TERM):
! 243: case (NODE_TITLE):
! 244: return(1);
! 245: default:
! 246: break;
! 247: }
! 248: return(0);
! 249: case (NODE_PROGRAMLISTING):
! 250: switch (parent) {
! 251: case (NODE_LISTITEM):
! 252: case (NODE_PARA):
! 253: case (NODE_REFSECT1):
! 254: case (NODE_REFSYNOPSISDIV):
! 255: return(1);
! 256: default:
! 257: break;
! 258: }
! 259: return(0);
! 260: case (NODE_REFCLASS):
! 261: return(parent == NODE_REFNAMEDIV);
! 262: case (NODE_REFDESCRIPTOR):
! 263: return(parent == NODE_REFNAMEDIV);
! 264: case (NODE_REFENTRY):
! 265: return(parent == NODE_ROOT);
! 266: case (NODE_REFENTRYTITLE):
! 267: switch (parent) {
! 268: case (NODE_CITEREFENTRY):
! 269: case (NODE_REFMETA):
! 270: return(1);
! 271: default:
! 272: break;
! 273: }
! 274: case (NODE_REFMETA):
! 275: return(parent == NODE_REFENTRY);
! 276: case (NODE_REFMISCINFO):
! 277: return(parent == NODE_REFMETA);
! 278: case (NODE_REFNAME):
! 279: return(parent == NODE_REFNAMEDIV);
! 280: case (NODE_REFNAMEDIV):
! 281: return(parent == NODE_REFENTRY);
! 282: case (NODE_REFPURPOSE):
! 283: return(parent == NODE_REFNAMEDIV);
! 284: case (NODE_REFSECT1):
! 285: return(parent == NODE_REFENTRY);
! 286: case (NODE_REFSYNOPSISDIV):
! 287: return(parent == NODE_REFENTRY);
! 288: case (NODE_REPLACEABLE):
! 289: switch (parent) {
! 290: case (NODE_ARG):
! 291: case (NODE_CODE):
! 292: case (NODE_COMMAND):
! 293: case (NODE_EMPHASIS):
! 294: case (NODE_FUNCDEF):
! 295: case (NODE_FUNCSYNOPSISINFO):
! 296: case (NODE_FUNCTION):
! 297: case (NODE_MANVOLNUM):
! 298: case (NODE_OPTION):
! 299: case (NODE_PARA):
! 300: case (NODE_PARAMDEF):
! 301: case (NODE_PARAMETER):
! 302: case (NODE_PROGRAMLISTING):
! 303: case (NODE_REFDESCRIPTOR):
! 304: case (NODE_REFENTRYTITLE):
! 305: case (NODE_REFMISCINFO):
! 306: case (NODE_REFNAME):
! 307: case (NODE_REFPURPOSE):
! 308: case (NODE_REPLACEABLE):
! 309: case (NODE_SYNOPSIS):
! 310: case (NODE_TERM):
! 311: case (NODE_TITLE):
! 312: default:
! 313: return(1);
! 314: }
! 315: return(0);
! 316: case (NODE_STRUCTNAME):
! 317: switch (parent) {
! 318: case (NODE_CODE):
! 319: case (NODE_FUNCSYNOPSISINFO):
! 320: case (NODE_FUNCTION):
! 321: case (NODE_OPTION):
! 322: case (NODE_PARA):
! 323: case (NODE_PARAMETER):
! 324: case (NODE_PROGRAMLISTING):
! 325: case (NODE_REFDESCRIPTOR):
! 326: case (NODE_REFENTRYTITLE):
! 327: case (NODE_REFNAME):
! 328: case (NODE_REFPURPOSE):
! 329: case (NODE_SYNOPSIS):
! 330: case (NODE_TITLE):
! 331: return(1);
! 332: default:
! 333: break;
! 334: }
! 335: return(0);
! 336: case (NODE_SYNOPSIS):
! 337: switch (parent) {
! 338: case (NODE_LISTITEM):
! 339: case (NODE_REFSYNOPSISDIV):
! 340: case (NODE_REFSECT1):
! 341: return(1);
! 342: default:
! 343: break;
! 344: }
! 345: return(0);
! 346: case (NODE_TITLE):
! 347: switch (parent) {
! 348: case (NODE_REFSECT1):
! 349: case (NODE_REFSYNOPSISDIV):
! 350: case (NODE_VARIABLELIST):
! 351: return(1);
! 352: default:
! 353: break;
! 354: }
! 355: return(0);
! 356: case (NODE_TERM):
! 357: return(NODE_VARLISTENTRY == parent);
! 358: case (NODE_TEXT):
! 359: return(1);
! 360: case (NODE_VARIABLELIST):
! 361: switch (parent) {
! 362: case (NODE_PARA):
! 363: case (NODE_REFSECT1):
! 364: case (NODE_REFSYNOPSISDIV):
! 365: case (NODE_VARIABLELIST):
! 366: return(1);
! 367: default:
! 368: break;
! 369: }
! 370: return(0);
! 371: case (NODE_VARLISTENTRY):
! 372: return (NODE_VARIABLELIST == parent);
! 373: case (NODE__MAX):
! 374: break;
! 375: }
! 376:
! 377: abort();
! 378: return(0);
! 379: }
! 380:
CVSweb