=================================================================== RCS file: /cvs/texi2mdoc/extern.h,v retrieving revision 1.3 retrieving revision 1.10 diff -u -p -r1.3 -r1.10 --- texi2mdoc/extern.h 2015/02/21 17:00:33 1.3 +++ texi2mdoc/extern.h 2015/02/23 15:09:09 1.10 @@ -1,4 +1,4 @@ -/* $Id: extern.h,v 1.3 2015/02/21 17:00:33 kristaps Exp $ */ +/* $Id: extern.h,v 1.10 2015/02/23 15:09:09 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -39,6 +39,8 @@ enum texicmd { TEXICMD_BANG, TEXICMD_BULLET, TEXICMD_BYE, + TEXICMD_CARTOUCHE, + TEXICMD_CEDILLA, TEXICMD_CENTER, TEXICMD_CHAPTER, TEXICMD_CINDEX, @@ -48,6 +50,7 @@ enum texicmd { TEXICMD_CODE, TEXICMD_COLON, TEXICMD_COLUMNFRACTIONS, + TEXICMD_COMMA, TEXICMD_COMMAND, TEXICMD_COMMENT, TEXICMD_COMMENT_LONG, @@ -66,6 +69,8 @@ enum texicmd { TEXICMD_DEFTYPEFNX, TEXICMD_DEFTYPEFUN, TEXICMD_DEFTYPEFUNX, + TEXICMD_DEFTYPEMETHOD, + TEXICMD_DEFTYPEMETHODX, TEXICMD_DEFTYPEVAR, TEXICMD_DEFTYPEVARX, TEXICMD_DEFTYPEVR, @@ -81,12 +86,15 @@ enum texicmd { TEXICMD_DIRCATEGORY, TEXICMD_DIRENTRY, TEXICMD_DISPLAY, + TEXICMD_DMN, TEXICMD_DOTS, TEXICMD_EMAIL, TEXICMD_EMPH, TEXICMD_END, + TEXICMD_ENDDOTS, TEXICMD_ENUMERATE, TEXICMD_ENV, + TEXICMD_EQUIV, TEXICMD_ERROR, TEXICMD_EXAMPLE, TEXICMD_EXDENT, @@ -94,6 +102,7 @@ enum texicmd { TEXICMD_FILE, TEXICMD_FINALOUT, TEXICMD_FINDEX, + TEXICMD_FOOTNOTE, TEXICMD_FTABLE, TEXICMD_FORMAT, TEXICMD_GRAVE, @@ -122,7 +131,7 @@ enum texicmd { TEXICMD_IMAGE, TEXICMD_INCLUDE, TEXICMD_INDENTBLOCK, - TEXICMD_INDEX, + TEXICMD_INFOREF, TEXICMD_INSERTCOPYING, TEXICMD_ITEM, TEXICMD_ITEMIZE, @@ -132,6 +141,7 @@ enum texicmd { TEXICMD_KINDEX, TEXICMD_LATEX, TEXICMD_LOWERSECTIONS, + TEXICMD_MACRO, TEXICMD_MATH, TEXICMD_MENU, TEXICMD_MINUS, @@ -147,10 +157,12 @@ enum texicmd { TEXICMD_PAGE, TEXICMD_PARINDENT, TEXICMD_PERIOD, + TEXICMD_PINDEX, TEXICMD_PRINTINDEX, TEXICMD_R, TEXICMD_RAISESECTIONS, TEXICMD_REF, + TEXICMD_REFILL, TEXICMD_RESULT, TEXICMD_SAMP, TEXICMD_SANSSERIF, @@ -158,10 +170,12 @@ enum texicmd { TEXICMD_SECTION, TEXICMD_SET, TEXICMD_SETCHAPNEWPAGE, + TEXICMD_SETCONTENTSAFTER, TEXICMD_SETFILENAME, TEXICMD_SETTITLE, TEXICMD_SHORTCONTENTS, TEXICMD_SLANTED, + TEXICMD_SLASH, TEXICMD_SP, TEXICMD_SPACE, TEXICMD_SMALLBOOK, @@ -171,9 +185,11 @@ enum texicmd { TEXICMD_SMALLINDENTBLOCK, TEXICMD_SQUIGGLE_LEFT, TEXICMD_SQUIGGLE_RIGHT, + TEXICMD_SS, TEXICMD_STRONG, TEXICMD_SUBHEADING, TEXICMD_SUBSECTION, + TEXICMD_SUBSUBHEADING, TEXICMD_SUBSUBSECTION, TEXICMD_SUBTITLE, TEXICMD_SUMMARYCONTENTS, @@ -185,6 +201,7 @@ enum texicmd { TEXICMD_TABLE, TEXICMD_TEX, TEXICMD_TEXSYM, + TEXICMD_TIE, TEXICMD_TILDE, TEXICMD_TINDEX, TEXICMD_TITLE, @@ -198,8 +215,10 @@ enum texicmd { TEXICMD_UNNUMBEREDSUBSUBSEC, TEXICMD_UREF, TEXICMD_URL, + TEXICMD_USER_INDEX, TEXICMD_VALUE, TEXICMD_VAR, + TEXICMD_VERB, TEXICMD_VERBATIM, TEXICMD_VERBATIMINCLUDE, TEXICMD_VINDEX, @@ -251,6 +270,13 @@ struct texivalue { char *value; }; +struct teximacro { + char *key; + char *value; + char **args; + size_t argsz; +}; + /* * The main parse structure. * This keeps any necessary information handy. @@ -258,6 +284,8 @@ struct texivalue { struct texi { struct texifile files[64]; /* stack of open files */ size_t filepos; /* number of open files */ + const char *valstack[64]; /* stack of opened values */ + size_t valstackpos; /* position in valstack */ size_t outcol; /* column in output line */ char **dirs; /* texi directories */ size_t dirsz; /* number of texi directories */ @@ -268,6 +296,8 @@ struct texi { size_t indexsz; /* entries in indexs */ struct texivalue *vals; /* @value entries */ size_t valsz; /* entries in vals */ + struct teximacro *macros; + size_t macrosz; /* * The following control what we output to the screen. * The complexity is required to accomodate for mdoc(7). @@ -291,11 +321,14 @@ void advance(struct texi *, const char *, size_t *); size_t advanceeoln(struct texi *, const char *, size_t, size_t *, int); void advanceto(struct texi *, const char *, size_t *, size_t); +char **argparse(struct texi *, const char *, size_t, size_t *, size_t *, size_t); + int parsearg(struct texi *, const char *, size_t, size_t *, size_t); void parsebracket(struct texi *, const char *, size_t, size_t *); void parsefile(struct texi *, const char *, int); int parselinearg(struct texi *, const char *, size_t, size_t *); void parseeof(struct texi *, const char *, size_t); +void parsemembuf(struct texi *, const char *, size_t); void parseeoln(struct texi *, const char *, size_t, size_t *); void parsesingle(struct texi *, const char *, size_t, size_t *); void parseto(struct texi *, const char *, size_t, size_t *, const char *); @@ -303,7 +336,8 @@ void parseto(struct texi *, const char *, size_t, size void texiabort(struct texi *, const char *) __attribute__((noreturn)); enum texicmd - texicmd(struct texi *, const char *, size_t, size_t, size_t *); + texicmd(struct texi *, const char *, size_t, size_t, + size_t *, struct teximacro **); void texierr(struct texi *, const char *, ...) __attribute__((format(printf, 2, 3))) __attribute__((noreturn)); @@ -313,6 +347,7 @@ void teximacro(struct texi *, const char *); void teximacroclose(struct texi *); void teximacroopen(struct texi *, const char *); void texipunctuate(struct texi *, const char *, size_t, size_t *); +void texiputbuf(struct texi *p, const char *, size_t, size_t); void texiputchar(struct texi *p, char); void texiputchars(struct texi *, const char *); void texivspace(struct texi *);