=================================================================== RCS file: /cvs/texi2mdoc/extern.h,v retrieving revision 1.12 retrieving revision 1.23 diff -u -p -r1.12 -r1.23 --- texi2mdoc/extern.h 2015/02/24 20:06:32 1.12 +++ texi2mdoc/extern.h 2015/03/01 16:57:39 1.23 @@ -1,4 +1,4 @@ -/* $Id: extern.h,v 1.12 2015/02/24 20:06:32 kristaps Exp $ */ +/* $Id: extern.h,v 1.23 2015/03/01 16:57:39 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -17,6 +17,21 @@ #ifndef EXTERN_H #define EXTERN_H +#if !defined(__BEGIN_DECLS) +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# else +# define __BEGIN_DECLS +# endif +#endif +#if !defined(__END_DECLS) +# ifdef __cplusplus +# define __END_DECLS } +# else +# define __END_DECLS +# endif +#endif + /* * This defines each one of the Texinfo commands that we understand. * Obviously this only refers to native commands; overriden names are a @@ -95,6 +110,7 @@ enum texicmd { TEXICMD_DMN, TEXICMD_DOCUMENTDESCRPITION, TEXICMD_DOCUMENTENCODING, + TEXICMD_DOCUMENTLANGUAGE, TEXICMD_DOTACCENT, TEXICMD_DOTLESS, TEXICMD_DOTS, @@ -106,6 +122,7 @@ enum texicmd { TEXICMD_ENV, TEXICMD_EQUIV, TEXICMD_ERROR, + TEXICMD_EURO, TEXICMD_EXAMPLE, TEXICMD_EXCLAMDOWN, TEXICMD_EXDENT, @@ -113,11 +130,22 @@ enum texicmd { TEXICMD_FILE, TEXICMD_FINALOUT, TEXICMD_FINDEX, + TEXICMD_FLUSHLEFT, + TEXICMD_FLUSHRIGHT, + TEXICMD_FIRSTPARAGRAPHINDENT, TEXICMD_FOOTNOTE, + TEXICMD_FOOTNOTESTYLE, TEXICMD_FTABLE, TEXICMD_FORMAT, + TEXICMD_GEQ, TEXICMD_GRAVE, TEXICMD_GROUP, + TEXICMD_GUILLEMETLEFT, + TEXICMD_GUILLEMETRIGHT, + TEXICMD_GUILLEMOTLEFT, + TEXICMD_GUILLEMOTRIGHT, + TEXICMD_GUILSINGLLEFT, + TEXICMD_GUILSINGLRIGHT, TEXICMD_H, TEXICMD_HEADING, TEXICMD_HEADINGS, @@ -143,6 +171,7 @@ enum texicmd { TEXICMD_IMAGE, TEXICMD_INCLUDE, TEXICMD_INDENTBLOCK, + TEXICMD_INDICATEURL, TEXICMD_INFOREF, TEXICMD_INSERTCOPYING, TEXICMD_ITEM, @@ -153,6 +182,7 @@ enum texicmd { TEXICMD_KINDEX, TEXICMD_L, TEXICMD_LATEX, + TEXICMD_LEQ, TEXICMD_LOWERSECTIONS, TEXICMD_LSMALL, TEXICMD_MACRO, @@ -177,15 +207,23 @@ enum texicmd { TEXICMD_PARINDENT, TEXICMD_PERIOD, TEXICMD_PINDEX, + TEXICMD_POUNDS, TEXICMD_PRINTINDEX, TEXICMD_PXREF, TEXICMD_QUESTIONDOWN, TEXICMD_QUESTIONMARK, TEXICMD_QUOTATION, + TEXICMD_QUOTEDBLBASE, + TEXICMD_QUOTEDBLLEFT, + TEXICMD_QUOTEDBLRIGHT, + TEXICMD_QUOTESINGLBASE, + TEXICMD_QUOTELEFT, + TEXICMD_QUOTERIGHT, TEXICMD_R, TEXICMD_RAISESECTIONS, TEXICMD_REF, TEXICMD_REFILL, + TEXICMD_REGISTEREDSYMBOL, TEXICMD_RESULT, TEXICMD_RINGACCENT, TEXICMD_SAMP, @@ -225,6 +263,7 @@ enum texicmd { TEXICMD_TABLE, TEXICMD_TEX, TEXICMD_TEXSYM, + TEXICMD_TEXTDEGREE, TEXICMD_TH, TEXICMD_THSMALL, TEXICMD_TIE, @@ -274,8 +313,11 @@ struct texifile { const char *name; /* name of the file */ size_t line; /* current line (from zero) */ size_t col; /* current column in line (from zero) */ - char *map; /* mmap'd file OR allocated buffer */ - size_t mapsz; /* size of mmap */ + char *map; /* allocated file buffer */ + size_t mapsz; /* size of map */ + size_t mapmaxsz; /* full size of map */ + size_t insplice; /* how many bytes left in splice */ + size_t depth; /* pasted macro recursive depth */ }; struct texi; @@ -283,8 +325,7 @@ struct texi; /* * Callback for functions implementing texi commands. */ -typedef void (*texicmdfp)(struct texi *, - enum texicmd, const char *, size_t, size_t *); +typedef void (*texicmdfp)(struct texi *, enum texicmd, size_t *); /* * Describes Texinfo commands, whether native or overriden. @@ -331,13 +372,18 @@ struct teximacro { * This keeps any necessary information handy. */ struct texi { + const char *chapters; /* are we splitting chapters */ + size_t chapnum; /* current chapter node */ + char **dirs; /* texi directories */ + size_t dirsz; /* number of texi directories */ + FILE *outfile; + /* + * Run-time parameters. + */ 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 */ char *title; /* title of document */ char *subtitle; /* subtitle of document */ int secoffs; /* see sectioner() */ @@ -353,12 +399,16 @@ struct texi { */ enum texilist list; /* current list (set recursively) */ int outmacro; /* if >0, output is in line macro */ + size_t outcol; /* column in output line */ int seenws; /* ws has been seen (and ignored) */ int seenvs; /* newline has been Pp'd */ int ign; /* if >0, don't print anything */ int literal; /* if >0, literal context */ }; +#define BUF(_p) ((_p)->files[(_p)->filepos - 1].map) +#define BUFSZ(_p) ((_p)->files[(_p)->filepos - 1].mapsz) + #define isws(_x) \ (' ' == (_x) || '\t' == (_x)) #define ismspace(_x) \ @@ -366,28 +416,26 @@ struct texi { __BEGIN_DECLS -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); +void advance(struct texi *, size_t *); +size_t advanceeoln(struct texi *, size_t *, int); +void advanceto(struct texi *, size_t *, size_t); -char **argparse(struct texi *, const char *, size_t, size_t *, size_t *, size_t); +char **argparse(struct texi *, 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 *); +int parsearg(struct texi *, size_t *, size_t); +void parsebracket(struct texi *, size_t *, int); void parsestdin(struct texi *); 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 *); +int parselinearg(struct texi *, size_t *); +void parseeoln(struct texi *, size_t *); +void parseto(struct texi *, size_t *, const char *); void texiabort(struct texi *, const char *) __attribute__((noreturn)); enum texicmd - texicmd(struct texi *, const char *, size_t, size_t, - size_t *, struct teximacro **); + texicmd(const struct texi *, size_t, size_t *, struct teximacro **); +enum texicmd + peekcmd(const struct texi *, size_t); void texierr(struct texi *, const char *, ...) __attribute__((format(printf, 2, 3))) __attribute__((noreturn)); @@ -396,20 +444,23 @@ void texifilepop(struct texi *); 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 teximdocopen(struct texi *, size_t *); +void teximdocclose(struct texi *, int); +void texipunctuate(struct texi *, size_t *); +void texiputbuf(struct texi *p, size_t, size_t); void texiputchar(struct texi *p, char); void texiputchars(struct texi *, const char *); void texivspace(struct texi *); void texiwarn(const struct texi *, const char *, ...) __attribute__((format(printf, 2, 3))); +void texisplice(struct texi *, const char *, size_t, size_t); void valueadd(struct texi *, char *, char *); const char * - valueblookup(struct texi *, const char *, size_t, size_t *); -void valuelclear(struct texi *, const char *, size_t, size_t *); + valueblookup(struct texi *, size_t *); +void valuelclear(struct texi *, size_t *); const char * - valuellookup(struct texi *, const char *, size_t, size_t *); + valuellookup(struct texi *, size_t *); extern const struct texitok *const texitoks;