[BACK]Return to node.h CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / docbook2mdoc

Annotation of docbook2mdoc/node.h, Revision 1.1

1.1     ! schwarze    1: /* $Id$ */
        !             2: /*
        !             3:  * Copyright (c) 2014 Kristaps Dzonsons <kristaps@bsd.lv>
        !             4:  * Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
        !             5:  *
        !             6:  * Permission to use, copy, modify, and distribute this software for any
        !             7:  * purpose with or without fee is hereby granted, provided that the above
        !             8:  * copyright notice and this permission notice appear in all copies.
        !             9:  *
        !            10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
        !            11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
        !            13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        !            15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
        !            16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            17:  */
        !            18: #include <sys/queue.h>
        !            19:
        !            20: /*
        !            21:  * The interface of the DocBook syntax tree.
        !            22:  */
        !            23:
        !            24: /*
        !            25:  * All node types used for formatting purposes.
        !            26:  * More DocBook XML elements are recognized, but remapped or discarded.
        !            27:  */
        !            28: enum   nodeid {
        !            29:        NODE_NONE = 0,  /* Must come first. */
        !            30:        /* Alpha-ordered hereafter. */
        !            31:        NODE_ACRONYM,
        !            32:        NODE_AFFILIATION,
        !            33:        NODE_ANCHOR,
        !            34:        NODE_APPLICATION,
        !            35:        NODE_ARG,
        !            36:        NODE_AUTHOR,
        !            37:        NODE_AUTHORGROUP,
        !            38:        NODE_BLOCKQUOTE,
        !            39:        NODE_BOOK,
        !            40:        NODE_BOOKINFO,
        !            41:        NODE_CAUTION,
        !            42:        NODE_CITEREFENTRY,
        !            43:        NODE_CITETITLE,
        !            44:        NODE_CMDSYNOPSIS,
        !            45:        NODE_CODE,
        !            46:        NODE_COLSPEC,
        !            47:        NODE_COMMAND,
        !            48:        NODE_CONSTANT,
        !            49:        NODE_COPYRIGHT,
        !            50:        NODE_DATE,
        !            51:        NODE_EDITOR,
        !            52:        NODE_EMAIL,
        !            53:        NODE_EMPHASIS,
        !            54:        NODE_ENTRY,
        !            55:        NODE_ENVAR,
        !            56:        NODE_FIELDSYNOPSIS,
        !            57:        NODE_FILENAME,
        !            58:        NODE_FIRSTNAME,
        !            59:        NODE_FIRSTTERM,
        !            60:        NODE_FOOTNOTE,
        !            61:        NODE_FUNCDEF,
        !            62:        NODE_FUNCPROTOTYPE,
        !            63:        NODE_FUNCSYNOPSIS,
        !            64:        NODE_FUNCSYNOPSISINFO,
        !            65:        NODE_FUNCTION,
        !            66:        NODE_GLOSSTERM,
        !            67:        NODE_GROUP,
        !            68:        NODE_HOLDER,
        !            69:        NODE_INDEX,
        !            70:        NODE_INDEXTERM,
        !            71:        NODE_INFO,
        !            72:        NODE_INFORMALEQUATION,
        !            73:        NODE_INFORMALTABLE,
        !            74:        NODE_INLINEEQUATION,
        !            75:        NODE_ITEMIZEDLIST,
        !            76:        NODE_KEYSYM,
        !            77:        NODE_LEGALNOTICE,
        !            78:        NODE_LINK,
        !            79:        NODE_LISTITEM,
        !            80:        NODE_LITERAL,
        !            81:        NODE_LITERALLAYOUT,
        !            82:        NODE_MANVOLNUM,
        !            83:        NODE_MEMBER,
        !            84:        NODE_MML_MATH,
        !            85:        NODE_MML_MFENCED,
        !            86:        NODE_MML_MFRAC,
        !            87:        NODE_MML_MI,
        !            88:        NODE_MML_MN,
        !            89:        NODE_MML_MO,
        !            90:        NODE_MML_MROW,
        !            91:        NODE_MML_MSUB,
        !            92:        NODE_MML_MSUP,
        !            93:        NODE_MODIFIER,
        !            94:        NODE_NOTE,
        !            95:        NODE_OPTION,
        !            96:        NODE_ORDEREDLIST,
        !            97:        NODE_ORGNAME,
        !            98:        NODE_OTHERNAME,
        !            99:        NODE_PARA,
        !           100:        NODE_PARAMDEF,
        !           101:        NODE_PARAMETER,
        !           102:        NODE_PERSONNAME,
        !           103:        NODE_PHRASE,
        !           104:        NODE_PREFACE,
        !           105:        NODE_PRIMARY,
        !           106:        NODE_PROGRAMLISTING,
        !           107:        NODE_PROMPT,
        !           108:        NODE_QUOTE,
        !           109:        NODE_REFCLASS,
        !           110:        NODE_REFDESCRIPTOR,
        !           111:        NODE_REFENTRY,
        !           112:        NODE_REFENTRYINFO,
        !           113:        NODE_REFENTRYTITLE,
        !           114:        NODE_REFMETA,
        !           115:        NODE_REFMETAINFO,
        !           116:        NODE_REFMISCINFO,
        !           117:        NODE_REFNAME,
        !           118:        NODE_REFNAMEDIV,
        !           119:        NODE_REFPURPOSE,
        !           120:        NODE_REFSYNOPSISDIV,
        !           121:        NODE_RELEASEINFO,
        !           122:        NODE_REPLACEABLE,
        !           123:        NODE_ROW,
        !           124:        NODE_SBR,
        !           125:        NODE_SCREEN,
        !           126:        NODE_SECONDARY,
        !           127:        NODE_SECTION,
        !           128:        NODE_SGMLTAG,
        !           129:        NODE_SIMPLELIST,
        !           130:        NODE_SPANSPEC,
        !           131:        NODE_STRUCTNAME,
        !           132:        NODE_SUBTITLE,
        !           133:        NODE_SURNAME,
        !           134:        NODE_SYNOPSIS,
        !           135:        NODE_TABLE,
        !           136:        NODE_TBODY,
        !           137:        NODE_TERM,
        !           138:        NODE_TEXT,
        !           139:        NODE_TFOOT,
        !           140:        NODE_TGROUP,
        !           141:        NODE_THEAD,
        !           142:        NODE_TIP,
        !           143:        NODE_TITLE,
        !           144:        NODE_TRADEMARK,
        !           145:        NODE_TYPE,
        !           146:        NODE_ULINK,
        !           147:        NODE_USERINPUT,
        !           148:        NODE_VARIABLELIST,
        !           149:        NODE_VARLISTENTRY,
        !           150:        NODE_VARNAME,
        !           151:        NODE_WARNING,
        !           152:        NODE_WORDASWORD,
        !           153:        NODE_YEAR,
        !           154:        NODE__MAX
        !           155: };
        !           156:
        !           157: /*
        !           158:  * All recognised attribute keys.
        !           159:  * Other attributes are discarded.
        !           160:  */
        !           161: enum   attrkey {
        !           162:        /* Alpha-order... */
        !           163:        ATTRKEY_CHOICE = 0,
        !           164:        ATTRKEY_CLASS,
        !           165:        ATTRKEY_CLOSE,
        !           166:        ATTRKEY_ID,
        !           167:        ATTRKEY_LINKEND,
        !           168:        ATTRKEY_OPEN,
        !           169:        ATTRKEY_REP,
        !           170:        ATTRKEY__MAX
        !           171: };
        !           172:
        !           173: /*
        !           174:  * All explicitly recognised attribute values.
        !           175:  * If an attribute has ATTRVAL__MAX, it is treated as free-form.
        !           176:  */
        !           177: enum   attrval {
        !           178:        /* Alpha-order... */
        !           179:        ATTRVAL_MONOSPACED,
        !           180:        ATTRVAL_NOREPEAT,
        !           181:        ATTRVAL_OPT,
        !           182:        ATTRVAL_PLAIN,
        !           183:        ATTRVAL_REPEAT,
        !           184:        ATTRVAL_REQ,
        !           185:        ATTRVAL__MAX
        !           186: };
        !           187:
        !           188: TAILQ_HEAD(pnodeq, pnode);
        !           189: TAILQ_HEAD(pattrq, pattr);
        !           190:
        !           191: /*
        !           192:  * One DocBook XML element attribute.
        !           193:  */
        !           194: struct pattr {
        !           195:        enum attrkey     key;
        !           196:        enum attrval     val;
        !           197:        char            *rawval;
        !           198:        TAILQ_ENTRY(pattr) child;
        !           199: };
        !           200:
        !           201: /*
        !           202:  * One DocBook XML element.
        !           203:  */
        !           204: struct pnode {
        !           205:        enum nodeid      node;     /* Node type. */
        !           206:        char            *b;        /* String value. */
        !           207:        char            *real;     /* Storage for "b". */
        !           208:        size_t           bsz;      /* strlen(b) */
        !           209:        struct pnode    *parent;   /* Parent node or NULL. */
        !           210:        struct pnodeq    childq;   /* Queue of children. */
        !           211:        struct pattrq    attrq;    /* Attributes of the node. */
        !           212:        TAILQ_ENTRY(pnode) child;
        !           213: };
        !           214:
        !           215: /*
        !           216:  * The parse result for one complete DocBook XML document.
        !           217:  */
        !           218: struct ptree {
        !           219:        struct pnode    *root;     /* The document element. */
        !           220:        int              flags;
        !           221: #define        TREE_FAIL        (1 << 0)  /* A fatal parse error occurred. */
        !           222: #define        TREE_EQN         (1 << 1)  /* The document needs inline eqn(7). */
        !           223: };
        !           224:
        !           225:
        !           226: enum attrkey    attrkey_parse(const char *);
        !           227: enum attrval    attrval_parse(const char *);
        !           228: void            pnode_unlink(struct pnode *);
        !           229: void            pnode_unlinksub(struct pnode *);
        !           230: enum attrval    pnode_getattr(struct pnode *, enum attrkey);
        !           231: const char     *pnode_getattr_raw(struct pnode *, enum attrkey, const char *);
        !           232: struct pnode   *pnode_findfirst(struct pnode *, enum nodeid);

CVSweb