![]() ![]() | ![]() |
version 1.14, 2015/02/24 21:06:52 | version 1.16, 2015/02/25 14:49:14 | ||
---|---|---|---|
|
|
||
const char *name; /* name of the file */ | const char *name; /* name of the file */ | ||
size_t line; /* current line (from zero) */ | size_t line; /* current line (from zero) */ | ||
size_t col; /* current column in line (from zero) */ | size_t col; /* current column in line (from zero) */ | ||
char *map; /* mmap'd file OR allocated buffer */ | char *map; /* allocated file buffer */ | ||
size_t mapsz; /* size of mmap */ | size_t mapsz; /* size of map */ | ||
size_t mapmaxsz; /* full size of map */ | |||
size_t insplice; /* how many bytes left in splice */ | |||
}; | }; | ||
struct texi; | struct texi; | ||
|
|
||
/* | /* | ||
* Callback for functions implementing texi commands. | * Callback for functions implementing texi commands. | ||
*/ | */ | ||
typedef void (*texicmdfp)(struct texi *, | typedef void (*texicmdfp)(struct texi *, enum texicmd, size_t *); | ||
enum texicmd, const char *, size_t, size_t *); | |||
/* | /* | ||
* Describes Texinfo commands, whether native or overriden. | * Describes Texinfo commands, whether native or overriden. | ||
|
|
||
int literal; /* if >0, literal context */ | 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) \ | #define isws(_x) \ | ||
(' ' == (_x) || '\t' == (_x)) | (' ' == (_x) || '\t' == (_x)) | ||
#define ismspace(_x) \ | #define ismspace(_x) \ | ||
|
|
||
__BEGIN_DECLS | __BEGIN_DECLS | ||
void advance(struct texi *, const char *, size_t *); | void advance(struct texi *, size_t *); | ||
size_t advanceeoln(struct texi *, const char *, size_t, size_t *, int); | size_t advanceeoln(struct texi *, size_t *, int); | ||
void advanceto(struct texi *, const char *, size_t *, size_t); | 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); | int parsearg(struct texi *, size_t *, size_t); | ||
void parsebracket(struct texi *, const char *, size_t, size_t *); | void parsebracket(struct texi *, size_t *); | ||
void parsestdin(struct texi *); | void parsestdin(struct texi *); | ||
void parsefile(struct texi *, const char *, int); | void parsefile(struct texi *, const char *, int); | ||
int parselinearg(struct texi *, const char *, size_t, size_t *); | int parselinearg(struct texi *, size_t *); | ||
void parseeof(struct texi *, const char *, size_t); | void parseeoln(struct texi *, size_t *); | ||
void parsemembuf(struct texi *, const char *, size_t); | void parseto(struct texi *, size_t *, const char *); | ||
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 *); | |||
void texiabort(struct texi *, const char *) | void texiabort(struct texi *, const char *) | ||
__attribute__((noreturn)); | __attribute__((noreturn)); | ||
enum texicmd | enum texicmd | ||
texicmd(struct texi *, const char *, size_t, size_t, | texicmd(struct texi *, size_t, | ||
size_t *, struct teximacro **); | size_t *, struct teximacro **); | ||
void texierr(struct texi *, const char *, ...) | void texierr(struct texi *, const char *, ...) | ||
__attribute__((format(printf, 2, 3))) | __attribute__((format(printf, 2, 3))) | ||
|
|
||
void teximacro(struct texi *, const char *); | void teximacro(struct texi *, const char *); | ||
void teximacroclose(struct texi *); | void teximacroclose(struct texi *); | ||
void teximacroopen(struct texi *, const char *); | void teximacroopen(struct texi *, const char *); | ||
void texipunctuate(struct texi *, const char *, size_t, size_t *); | void texipunctuate(struct texi *, size_t *); | ||
void texiputbuf(struct texi *p, const char *, size_t, size_t); | void texiputbuf(struct texi *p, size_t, size_t); | ||
void texiputchar(struct texi *p, char); | void texiputchar(struct texi *p, char); | ||
void texiputchars(struct texi *, const char *); | void texiputchars(struct texi *, const char *); | ||
void texivspace(struct texi *); | void texivspace(struct texi *); | ||
void texiwarn(const struct texi *, const char *, ...) | void texiwarn(const struct texi *, const char *, ...) | ||
__attribute__((format(printf, 2, 3))); | __attribute__((format(printf, 2, 3))); | ||
void texisplice(struct texi *, const char *, size_t, size_t *); | |||
void valueadd(struct texi *, char *, char *); | void valueadd(struct texi *, char *, char *); | ||
const char * | const char * | ||
valueblookup(struct texi *, const char *, size_t, size_t *); | valueblookup(struct texi *, size_t *); | ||
void valuelclear(struct texi *, const char *, size_t, size_t *); | void valuelclear(struct texi *, size_t *); | ||
const char * | const char * | ||
valuellookup(struct texi *, const char *, size_t, size_t *); | valuellookup(struct texi *, size_t *); | ||
extern const struct texitok *const texitoks; | extern const struct texitok *const texitoks; | ||