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