![]() ![]() | ![]() |
version 1.16, 2009/07/12 20:24:24 | version 1.46, 2010/05/15 08:54:04 | ||
---|---|---|---|
|
|
||
struct mdoc { | struct mdoc { | ||
void *data; | void *data; | ||
struct mdoc_cb cb; | struct mdoc_cb cb; | ||
void *htab; | |||
int flags; | int flags; | ||
#define MDOC_HALT (1 << 0) /* Error in parse. Halt. */ | #define MDOC_HALT (1 << 0) /* error in parse: halt */ | ||
#define MDOC_LITERAL (1 << 1) /* In a literal scope. */ | #define MDOC_LITERAL (1 << 1) /* in a literal scope */ | ||
#define MDOC_PBODY (1 << 2) /* In the document body. */ | #define MDOC_PBODY (1 << 2) /* in the document body */ | ||
#define MDOC_NEWLINE (1 << 3) /* first macro/text in a line */ | |||
#define MDOC_PHRASELIT (1 << 4) /* literal within a partila phrase */ | |||
#define MDOC_PPHRASE (1 << 5) /* within a partial phrase */ | |||
int pflags; | int pflags; | ||
enum mdoc_next next; | enum mdoc_next next; | ||
struct mdoc_node *last; | struct mdoc_node *last; | ||
|
|
||
enum merr { | enum merr { | ||
ETAILWS = 0, | ETAILWS = 0, | ||
ECOLEMPTY, | |||
EARGVPARM, | |||
EQUOTPARM, | EQUOTPARM, | ||
EQUOTTERM, | EQUOTTERM, | ||
EMALLOC, | |||
EARGVAL, | EARGVAL, | ||
ENOCALL, | |||
EBODYPROL, | EBODYPROL, | ||
EPROLBODY, | EPROLBODY, | ||
ETEXTPROL, | ETEXTPROL, | ||
|
|
||
ENOLINE, | ENOLINE, | ||
EPROLOOO, | EPROLOOO, | ||
EPROLREP, | EPROLREP, | ||
EBADMSEC, | |||
EBADSEC, | EBADSEC, | ||
EFONT, | EFONT, | ||
EBADDATE, | EBADDATE, | ||
|
|
||
ENOWIDTH, | ENOWIDTH, | ||
EUTSNAME, | EUTSNAME, | ||
EOBS, | EOBS, | ||
EMACPARM, | |||
EIMPBRK, | EIMPBRK, | ||
EIGNE, | EIGNE, | ||
EOPEN, | EOPEN, | ||
EQUOTPHR, | EQUOTPHR, | ||
ENOCTX, | ENOCTX, | ||
ESPACE, | ELIB, | ||
EBADCHILD, | |||
ENOTYPE, | |||
EBADCOMMENT, | |||
MERRMAX | MERRMAX | ||
}; | }; | ||
#define MACRO_PROT_ARGS struct mdoc *mdoc, int tok, int line, \ | #define MACRO_PROT_ARGS struct mdoc *m, enum mdoct tok, \ | ||
int ppos, int *pos, char *buf | int line, int ppos, int *pos, char *buf | ||
struct mdoc_macro { | struct mdoc_macro { | ||
int (*fp)(MACRO_PROT_ARGS); | int (*fp)(MACRO_PROT_ARGS); | ||
|
|
||
/* Reserved words in arguments treated as text. */ | /* Reserved words in arguments treated as text. */ | ||
}; | }; | ||
enum margserr { | |||
ARGS_ERROR, | |||
ARGS_EOLN, | |||
ARGS_WORD, | |||
ARGS_PUNCT, | |||
ARGS_QWORD, | |||
ARGS_PHRASE, | |||
ARGS_PPHRASE, | |||
ARGS_PEND | |||
}; | |||
enum margverr { | |||
ARGV_ERROR, | |||
ARGV_EOLN, | |||
ARGV_ARG, | |||
ARGV_WORD | |||
}; | |||
enum mdelim { | |||
DELIM_NONE = 0, | |||
DELIM_OPEN, | |||
DELIM_MIDDLE, | |||
DELIM_CLOSE | |||
}; | |||
extern const struct mdoc_macro *const mdoc_macros; | extern const struct mdoc_macro *const mdoc_macros; | ||
__BEGIN_DECLS | __BEGIN_DECLS | ||
|
|
||
int mdoc_word_alloc(struct mdoc *, | int mdoc_word_alloc(struct mdoc *, | ||
int, int, const char *); | int, int, const char *); | ||
int mdoc_elem_alloc(struct mdoc *, int, int, | int mdoc_elem_alloc(struct mdoc *, int, int, | ||
int, struct mdoc_arg *); | enum mdoct, struct mdoc_arg *); | ||
int mdoc_block_alloc(struct mdoc *, int, int, | int mdoc_block_alloc(struct mdoc *, int, int, | ||
int, struct mdoc_arg *); | enum mdoct, struct mdoc_arg *); | ||
int mdoc_head_alloc(struct mdoc *, int, int, int); | int mdoc_head_alloc(struct mdoc *, int, int, enum mdoct); | ||
int mdoc_tail_alloc(struct mdoc *, int, int, int); | int mdoc_tail_alloc(struct mdoc *, int, int, enum mdoct); | ||
int mdoc_body_alloc(struct mdoc *, int, int, int); | int mdoc_body_alloc(struct mdoc *, int, int, enum mdoct); | ||
void mdoc_node_free(struct mdoc_node *); | void mdoc_node_delete(struct mdoc *, struct mdoc_node *); | ||
void mdoc_node_freelist(struct mdoc_node *); | void mdoc_hash_init(void); | ||
void *mdoc_hash_alloc(void); | enum mdoct mdoc_hash_find(const char *); | ||
int mdoc_hash_find(const void *, const char *); | enum mdelim mdoc_iscdelim(char); | ||
void mdoc_hash_free(void *); | enum mdelim mdoc_isdelim(const char *); | ||
int mdoc_iscdelim(char); | |||
int mdoc_isdelim(const char *); | |||
size_t mdoc_isescape(const char *); | size_t mdoc_isescape(const char *); | ||
enum mdoc_sec mdoc_atosec(const char *); | enum mdoc_sec mdoc_str2sec(const char *); | ||
time_t mdoc_atotime(const char *); | time_t mdoc_atotime(const char *); | ||
size_t mdoc_macro2len(enum mdoct); | |||
size_t mdoc_macro2len(int); | |||
const char *mdoc_a2att(const char *); | const char *mdoc_a2att(const char *); | ||
const char *mdoc_a2lib(const char *); | |||
const char *mdoc_a2st(const char *); | |||
const char *mdoc_a2arch(const char *); | const char *mdoc_a2arch(const char *); | ||
const char *mdoc_a2vol(const char *); | const char *mdoc_a2vol(const char *); | ||
const char *mdoc_a2msec(const char *); | const char *mdoc_a2msec(const char *); | ||
|
|
||
int mdoc_action_pre(struct mdoc *, | int mdoc_action_pre(struct mdoc *, | ||
const struct mdoc_node *); | const struct mdoc_node *); | ||
int mdoc_action_post(struct mdoc *); | int mdoc_action_post(struct mdoc *); | ||
int mdoc_argv(struct mdoc *, int, int, | enum margverr mdoc_argv(struct mdoc *, int, enum mdoct, | ||
struct mdoc_arg **, int *, char *); | struct mdoc_arg **, int *, char *); | ||
#define ARGV_ERROR (-1) | |||
#define ARGV_EOLN (0) | |||
#define ARGV_ARG (1) | |||
#define ARGV_WORD (2) | |||
void mdoc_argv_free(struct mdoc_arg *); | void mdoc_argv_free(struct mdoc_arg *); | ||
int mdoc_args(struct mdoc *, int, | void mdoc_argn_free(struct mdoc_arg *, int); | ||
enum margserr mdoc_args(struct mdoc *, int, | |||
int *, char *, enum mdoct, char **); | |||
enum margserr mdoc_zargs(struct mdoc *, int, | |||
int *, char *, int, char **); | int *, char *, int, char **); | ||
#define ARGS_ERROR (-1) | #define ARGS_DELIM (1 << 1) | ||
#define ARGS_EOLN (0) | #define ARGS_TABSEP (1 << 2) | ||
#define ARGS_WORD (1) | #define ARGS_NOWARN (1 << 3) | ||
#define ARGS_PUNCT (2) | |||
#define ARGS_QWORD (3) | |||
#define ARGS_PHRASE (4) | |||
int mdoc_macroend(struct mdoc *); | int mdoc_macroend(struct mdoc *); | ||