=================================================================== RCS file: /cvs/texi2mdoc/extern.h,v retrieving revision 1.27 retrieving revision 1.30 diff -u -p -r1.27 -r1.30 --- texi2mdoc/extern.h 2015/03/11 12:51:41 1.27 +++ texi2mdoc/extern.h 2018/11/13 08:45:29 1.30 @@ -1,4 +1,4 @@ -/* $Id: extern.h,v 1.27 2015/03/11 12:51:41 kristaps Exp $ */ +/* $Id: extern.h,v 1.30 2018/11/13 08:45:29 schwarze Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -85,6 +85,10 @@ enum texicmd { TEXICMD_DEFINDEX, TEXICMD_DEFMAC, TEXICMD_DEFMACX, + TEXICMD_DEFOP, + TEXICMD_DEFOPX, + TEXICMD_DEFOPT, + TEXICMD_DEFOPTX, TEXICMD_DEFTP, TEXICMD_DEFTPX, TEXICMD_DEFTYPEFN, @@ -373,23 +377,39 @@ struct teximacro { }; /* + * A term is a word in an index. + * For example "@cindex foo" adds the term "foo" to the "cp" index. + * This occurs within a chapter ("nodes" in struct texi) + */ +struct texiterm { + char *term; + ssize_t chapter; +}; + +/* * Index tables. * These have a two or three letter name (usually) and any number of * terms that are associated with it. */ struct texidex { char *name; - char **index; + struct texiterm *index; size_t indexsz; }; +struct texinode { + char *name; + ssize_t up; + ssize_t prev; + ssize_t next; +}; + /* * The main parse structure. * 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; /* current output stream */ @@ -402,6 +422,7 @@ struct texi { size_t valstackpos; /* position in valstack */ char *title; /* title of document */ char *subtitle; /* subtitle of document */ + char *date; /* date of document */ int secoffs; /* see sectioner() */ struct texidex *indexs; /* index entries */ size_t indexsz; /* entries in indexs */ @@ -411,6 +432,10 @@ struct texi { size_t macrosz; /* entries in macros */ char *copying; /* the @copying block */ size_t copyingsz; /* length of @copying */ + struct texinode *nodecache; /* index of node names */ + size_t nodecachesz; /* nodes in nodecache */ + size_t nodesz; /* parsing node (sequential) */ + ssize_t nodecur; /* parsing node (cache position) */ /* * The following control what we output to the screen. * The complexity is required to accomodate for mdoc(7). @@ -448,6 +473,7 @@ void parsefile(struct texi *, const char *, int); int parselinearg(struct texi *, size_t *); void parseeoln(struct texi *, size_t *); void parseto(struct texi *, size_t *, const char *); +void parsesingle(struct texi *, size_t *); void texiabort(struct texi *, const char *) __attribute__((noreturn)); @@ -457,6 +483,7 @@ enum texicmd peekcmd(const struct texi *, size_t); enum texicmd peeklinecmd(const struct texi *, size_t); +ssize_t texicache(struct texi *, const char *, size_t); void texierr(struct texi *, const char *, ...) __attribute__((format(printf, 2, 3))) __attribute__((noreturn));