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

Annotation of texi2mdoc/extern.h, Revision 1.1

1.1     ! kristaps    1: /*     $Id: main.c,v 1.23 2015/02/19 20:55:56 kristaps Exp $ */
        !             2: /*
        !             3:  * Copyright (c) 2015 Kristaps Dzonsons <kristaps@bsd.lv>
        !             4:  *
        !             5:  * Permission to use, copy, modify, and distribute this software for any
        !             6:  * purpose with or without fee is hereby granted, provided that the above
        !             7:  * copyright notice and this permission notice appear in all copies.
        !             8:  *
        !             9:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            10:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            11:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            12:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            13:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        !            14:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
        !            15:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            16:  */
        !            17: #ifndef EXTERN_H
        !            18: #define EXTERN_H
        !            19:
        !            20: /*
        !            21:  * This defines each one of the Texinfo commands that we understand.
        !            22:  * Obviously this only refers to native commands; overriden names are a
        !            23:  * different story.
        !            24:  */
        !            25: enum   texicmd {
        !            26:        TEXICMD_ACRONYM,
        !            27:        TEXICMD_ACUTE,
        !            28:        TEXICMD_A4PAPER,
        !            29:        TEXICMD_ANCHOR,
        !            30:        TEXICMD_APPENDIX,
        !            31:        TEXICMD_APPENDIXSEC,
        !            32:        TEXICMD_APPENDIXSUBSEC,
        !            33:        TEXICMD_APPENDIXSUBSUBSEC,
        !            34:        TEXICMD_ASTERISK,
        !            35:        TEXICMD_AT,
        !            36:        TEXICMD_AUTHOR,
        !            37:        TEXICMD_B,
        !            38:        TEXICMD_BANG,
        !            39:        TEXICMD_BULLET,
        !            40:        TEXICMD_BYE,
        !            41:        TEXICMD_CENTER,
        !            42:        TEXICMD_CHAPTER,
        !            43:        TEXICMD_CINDEX,
        !            44:        TEXICMD_CIRCUMFLEX,
        !            45:        TEXICMD_CITE,
        !            46:        TEXICMD_CLEAR,
        !            47:        TEXICMD_CODE,
        !            48:        TEXICMD_COLON,
        !            49:        TEXICMD_COLUMNFRACTIONS,
        !            50:        TEXICMD_COMMAND,
        !            51:        TEXICMD_COMMENT,
        !            52:        TEXICMD_COMMENT_LONG,
        !            53:        TEXICMD_CONTENTS,
        !            54:        TEXICMD_COPYING,
        !            55:        TEXICMD_COPYRIGHT,
        !            56:        TEXICMD_DEFFN,
        !            57:        TEXICMD_DEFFNX,
        !            58:        TEXICMD_DEFMAC,
        !            59:        TEXICMD_DEFMACX,
        !            60:        TEXICMD_DEFTP,
        !            61:        TEXICMD_DEFTPX,
        !            62:        TEXICMD_DEFTYPEFN,
        !            63:        TEXICMD_DEFTYPEFNX,
        !            64:        TEXICMD_DEFTYPEFUN,
        !            65:        TEXICMD_DEFTYPEFUNX,
        !            66:        TEXICMD_DEFTYPEVAR,
        !            67:        TEXICMD_DEFTYPEVARX,
        !            68:        TEXICMD_DEFTYPEVR,
        !            69:        TEXICMD_DEFTYPEVRX,
        !            70:        TEXICMD_DEFUN,
        !            71:        TEXICMD_DEFUNX,
        !            72:        TEXICMD_DEFVAR,
        !            73:        TEXICMD_DEFVARX,
        !            74:        TEXICMD_DEFVR,
        !            75:        TEXICMD_DEFVRX,
        !            76:        TEXICMD_DETAILMENU,
        !            77:        TEXICMD_DFN,
        !            78:        TEXICMD_DIRCATEGORY,
        !            79:        TEXICMD_DIRENTRY,
        !            80:        TEXICMD_DISPLAY,
        !            81:        TEXICMD_DOTS,
        !            82:        TEXICMD_EMAIL,
        !            83:        TEXICMD_EMPH,
        !            84:        TEXICMD_END,
        !            85:        TEXICMD_ENUMERATE,
        !            86:        TEXICMD_ENV,
        !            87:        TEXICMD_ERROR,
        !            88:        TEXICMD_EXAMPLE,
        !            89:        TEXICMD_EXPANSION,
        !            90:        TEXICMD_FILE,
        !            91:        TEXICMD_FINALOUT,
        !            92:        TEXICMD_FINDEX,
        !            93:        TEXICMD_FTABLE,
        !            94:        TEXICMD_FORMAT,
        !            95:        TEXICMD_GRAVE,
        !            96:        TEXICMD_GROUP,
        !            97:        TEXICMD_HEADING,
        !            98:        TEXICMD_HEADINGS,
        !            99:        TEXICMD_HEADITEM,
        !           100:        TEXICMD_HYPHEN,
        !           101:        TEXICMD_I,
        !           102:        TEXICMD_IFCLEAR,
        !           103:        TEXICMD_IFDOCBOOK,
        !           104:        TEXICMD_IFHTML,
        !           105:        TEXICMD_IFINFO,
        !           106:        TEXICMD_IFNOTDOCBOOK,
        !           107:        TEXICMD_IFNOTHTML,
        !           108:        TEXICMD_IFNOTINFO,
        !           109:        TEXICMD_IFNOTPLAINTEXT,
        !           110:        TEXICMD_IFNOTTEX,
        !           111:        TEXICMD_IFNOTXML,
        !           112:        TEXICMD_IFPLAINTEXT,
        !           113:        TEXICMD_IFTEX,
        !           114:        TEXICMD_IFSET,
        !           115:        TEXICMD_IFXML,
        !           116:        TEXICMD_IGNORE,
        !           117:        TEXICMD_IMAGE,
        !           118:        TEXICMD_INCLUDE,
        !           119:        TEXICMD_INDENTBLOCK,
        !           120:        TEXICMD_INSERTCOPYING,
        !           121:        TEXICMD_ITEM,
        !           122:        TEXICMD_ITEMIZE,
        !           123:        TEXICMD_ITEMX,
        !           124:        TEXICMD_KBD,
        !           125:        TEXICMD_KEY,
        !           126:        TEXICMD_KINDEX,
        !           127:        TEXICMD_LATEX,
        !           128:        TEXICMD_LOWERSECTIONS,
        !           129:        TEXICMD_MATH,
        !           130:        TEXICMD_MENU,
        !           131:        TEXICMD_MULTITABLE,
        !           132:        TEXICMD_NEED,
        !           133:        TEXICMD_NEWLINE,
        !           134:        TEXICMD_NODE,
        !           135:        TEXICMD_NOINDENT,
        !           136:        TEXICMD_OPTION,
        !           137:        TEXICMD_PXREF,
        !           138:        TEXICMD_QUESTIONMARK,
        !           139:        TEXICMD_QUOTATION,
        !           140:        TEXICMD_PAGE,
        !           141:        TEXICMD_PARINDENT,
        !           142:        TEXICMD_PRINTINDEX,
        !           143:        TEXICMD_R,
        !           144:        TEXICMD_RAISESECTIONS,
        !           145:        TEXICMD_REF,
        !           146:        TEXICMD_RESULT,
        !           147:        TEXICMD_SAMP,
        !           148:        TEXICMD_SANSSERIF,
        !           149:        TEXICMD_SC,
        !           150:        TEXICMD_SECTION,
        !           151:        TEXICMD_SET,
        !           152:        TEXICMD_SETCHAPNEWPAGE,
        !           153:        TEXICMD_SETFILENAME,
        !           154:        TEXICMD_SETTITLE,
        !           155:        TEXICMD_SLANTED,
        !           156:        TEXICMD_SP,
        !           157:        TEXICMD_SPACE,
        !           158:        TEXICMD_SMALLBOOK,
        !           159:        TEXICMD_SMALLDISPLAY,
        !           160:        TEXICMD_SMALLEXAMPLE,
        !           161:        TEXICMD_SMALLFORMAT,
        !           162:        TEXICMD_SMALLINDENTBLOCK,
        !           163:        TEXICMD_SQUIGGLE_LEFT,
        !           164:        TEXICMD_SQUIGGLE_RIGHT,
        !           165:        TEXICMD_STRONG,
        !           166:        TEXICMD_SUBHEADING,
        !           167:        TEXICMD_SUBSECTION,
        !           168:        TEXICMD_SUBSUBSECTION,
        !           169:        TEXICMD_SUBTITLE,
        !           170:        TEXICMD_SYNCODEINDEX,
        !           171:        TEXICMD_T,
        !           172:        TEXICMD_TAB,
        !           173:        TEXICMD_TABSYM,
        !           174:        TEXICMD_TABLE,
        !           175:        TEXICMD_TEX,
        !           176:        TEXICMD_TEXSYM,
        !           177:        TEXICMD_TILDE,
        !           178:        TEXICMD_TITLE,
        !           179:        TEXICMD_TITLEFONT,
        !           180:        TEXICMD_TITLEPAGE,
        !           181:        TEXICMD_TOP,
        !           182:        TEXICMD_UMLAUT,
        !           183:        TEXICMD_UNNUMBERED,
        !           184:        TEXICMD_UNNUMBEREDSEC,
        !           185:        TEXICMD_UNNUMBEREDSUBSEC,
        !           186:        TEXICMD_UNNUMBEREDSUBSUBSEC,
        !           187:        TEXICMD_UREF,
        !           188:        TEXICMD_URL,
        !           189:        TEXICMD_VALUE,
        !           190:        TEXICMD_VAR,
        !           191:        TEXICMD_VERBATIMINCLUDE,
        !           192:        TEXICMD_VINDEX,
        !           193:        TEXICMD_VSKIP,
        !           194:        TEXICMD_VTABLE,
        !           195:        TEXICMD_W,
        !           196:        TEXICMD_XREF,
        !           197:        TEXICMD__MAX
        !           198: };
        !           199:
        !           200: /*
        !           201:  * The file currently being parsed.
        !           202:  * This keeps track of our location within that file.
        !           203:  */
        !           204: struct texifile {
        !           205:        const char      *name; /* name of the file */
        !           206:        size_t           line; /* current line (from zero) */
        !           207:        size_t           col; /* current column in line (from zero) */
        !           208:        char            *map; /* mmap'd file */
        !           209:        size_t           mapsz; /* size of mmap */
        !           210: };
        !           211:
        !           212: struct texi;
        !           213:
        !           214: /*
        !           215:  * Callback for functions implementing texi commands.
        !           216:  */
        !           217: typedef        void (*texicmdfp)(struct texi *,
        !           218:        enum texicmd, const char *, size_t, size_t *);
        !           219:
        !           220: /*
        !           221:  * Describes Texinfo commands, whether native or overriden.
        !           222:  */
        !           223: struct texitok {
        !           224:        texicmdfp        fp; /* callback (or NULL if none) */
        !           225:        const char      *tok; /* name of the token */
        !           226:        size_t           len; /* strlen(tok) */
        !           227: };
        !           228:
        !           229: enum   texilist {
        !           230:        TEXILIST_NONE = 0,
        !           231:        TEXILIST_ITEM,
        !           232:        TEXILIST_NOITEM,
        !           233:        TEXILIST_TABLE
        !           234: };
        !           235:
        !           236: struct texivalue {
        !           237:        char            *key;
        !           238:        char            *value;
        !           239: };
        !           240:
        !           241: /*
        !           242:  * The main parse structure.
        !           243:  * This keeps any necessary information handy.
        !           244:  */
        !           245: struct texi {
        !           246:        struct texifile   files[64]; /* stack of open files */
        !           247:        size_t            filepos; /* number of open files */
        !           248:        size_t            outcol; /* column in output line */
        !           249:        char            **dirs; /* texi directories */
        !           250:        size_t            dirsz; /* number of texi directories */
        !           251:        char             *title; /* title of document */
        !           252:        char             *subtitle; /* subtitle of document */
        !           253:        int               secoffs; /* see sectioner() */
        !           254:        struct texivalue *vals;
        !           255:        size_t            valsz;
        !           256:        /*
        !           257:         * The following control what we output to the screen.
        !           258:         * The complexity is required to accomodate for mdoc(7).
        !           259:         */
        !           260:        enum texilist     list; /* current list (set recursively) */
        !           261:        int               outmacro; /* if >0, output is in line macro */
        !           262:        int               seenws; /* ws has been seen (and ignored) */
        !           263:        int               seenvs; /* newline has been Pp'd */
        !           264:        int               ign; /* if >0, don't print anything */
        !           265:        int               literal; /* if >0, literal context */
        !           266: };
        !           267:
        !           268: #define        isws(_x) \
        !           269:        (' ' == (_x) || '\t' == (_x))
        !           270: #define        ismspace(_x) \
        !           271:        (isws((_x)) || '\n' == (_x))
        !           272:
        !           273: __BEGIN_DECLS
        !           274:
        !           275: void   advance(struct texi *, const char *, size_t *);
        !           276: size_t advanceeoln(struct texi *, const char *, size_t, size_t *, int);
        !           277: void   advanceto(struct texi *, const char *, size_t *, size_t);
        !           278:
        !           279: int    parsearg(struct texi *, const char *, size_t, size_t *, size_t);
        !           280: void   parsebracket(struct texi *, const char *, size_t, size_t *);
        !           281: void   parsefile(struct texi *, const char *, int);
        !           282: int    parselinearg(struct texi *, const char *, size_t, size_t *);
        !           283: void   parseeof(struct texi *, const char *, size_t);
        !           284: void   parseeoln(struct texi *, const char *, size_t, size_t *);
        !           285: void   parsesingle(struct texi *, const char *, size_t, size_t *);
        !           286: void   parseto(struct texi *, const char *, size_t, size_t *, const char *);
        !           287:
        !           288: void   texiabort(struct texi *, const char *);
        !           289: enum texicmd
        !           290:        texicmd(struct texi *, const char *, size_t, size_t, size_t *);
        !           291: void   texierr(struct texi *, const char *, ...)
        !           292:                __attribute__((format(printf, 2, 3)));
        !           293: void   texiexit(struct texi *p);
        !           294: void   texifilepop(struct texi *);
        !           295: void   teximacro(struct texi *, const char *);
        !           296: void   teximacroclose(struct texi *);
        !           297: void   teximacroopen(struct texi *, const char *);
        !           298: void   texipunctuate(struct texi *, const char *, size_t, size_t *);
        !           299: void   texiputchar(struct texi *p, char);
        !           300: void   texiputchars(struct texi *, const char *);
        !           301: void   texivspace(struct texi *);
        !           302: void   texiwarn(const struct texi *, const char *, ...)
        !           303:                __attribute__((format(printf, 2, 3)));
        !           304:
        !           305: extern const struct texitok *const texitoks;
        !           306:
        !           307: __END_DECLS
        !           308:
        !           309: #endif

CVSweb