Return to private.h CVS log | Up to [cvsweb.bsd.lv] / mandoc |
version 1.51, 2008/12/30 19:06:03 | version 1.70, 2009/01/20 12:51:28 | ||
---|---|---|---|
|
|
||
#include "mdoc.h" | #include "mdoc.h" | ||
enum mdoc_next { | |||
MDOC_NEXT_SIBLING = 0, | |||
MDOC_NEXT_CHILD | |||
}; | |||
struct mdoc { | struct mdoc { | ||
void *data; | void *data; | ||
struct mdoc_cb cb; | struct mdoc_cb cb; | ||
void *htab; | void *htab; | ||
int linetok; | |||
int flags; | |||
#define MDOC_HALT (1 << 0) | |||
#define MDOC_BODYPARSE (1 << 1) | |||
enum mdoc_next next; | |||
struct mdoc_node *last; | struct mdoc_node *last; | ||
struct mdoc_node *first; | struct mdoc_node *first; | ||
struct mdoc_meta meta; | struct mdoc_meta meta; | ||
|
|
||
enum mdoc_sec sec_last; | enum mdoc_sec sec_last; | ||
}; | }; | ||
/* Hard-limit of macro arguments. */ | |||
#define MDOC_LINEARG_MAX 9 | |||
/* Suggested limit of macro arguments. */ | |||
#define MDOC_LINEARG_SOFTMAX 9 | |||
#define MACRO_PROT_ARGS struct mdoc *mdoc, int tok, int line, \ | |||
int ppos, int *pos, char *buf | |||
struct mdoc_macro { | struct mdoc_macro { | ||
int (*fp)(struct mdoc *, int, int, int *, char *); | int (*fp)(MACRO_PROT_ARGS); | ||
int flags; | int flags; | ||
#define MDOC_CALLABLE (1 << 0) | #define MDOC_CALLABLE (1 << 0) | ||
#define MDOC_EXPLICIT (1 << 1) | #define MDOC_PARSED (1 << 1) | ||
#define MDOC_QUOTABLE (1 << 2) | #define MDOC_EXPLICIT (1 << 2) | ||
#define MDOC_QUOTABLE (1 << 3) | |||
#define MDOC_PROLOGUE (1 << 4) | |||
#define MDOC_TABSEP (1 << 5) | |||
}; | }; | ||
extern const struct mdoc_macro *const mdoc_macros; | #define mdoc_nwarn(mdoc, node, type, fmt, ...) \ | ||
mdoc_vwarn((mdoc), (node)->line, \ | |||
(node)->pos, (type), (fmt), ##__VA_ARGS__) | |||
#define MACRO_PROT_ARGS struct mdoc *mdoc, int tok, \ | #define mdoc_nerr(mdoc, node, fmt, ...) \ | ||
int ppos, int *pos, char *buf | mdoc_verr((mdoc), (node)->line, \ | ||
(node)->pos, (fmt), ##__VA_ARGS__) | |||
#define mdoc_warn(mdoc, type, fmt, ...) \ | |||
mdoc_vwarn((mdoc), (mdoc)->last->line, \ | |||
(mdoc)->last->pos, (type), (fmt), ##__VA_ARGS__) | |||
#define mdoc_err(mdoc, fmt, ...) \ | |||
mdoc_verr((mdoc), (mdoc)->last->line, \ | |||
(mdoc)->last->pos, (fmt), ##__VA_ARGS__) | |||
#define mdoc_msg(mdoc, fmt, ...) \ | |||
mdoc_vmsg((mdoc), (mdoc)->last->line, \ | |||
(mdoc)->last->pos, (fmt), ##__VA_ARGS__) | |||
#define mdoc_pmsg(mdoc, line, pos, fmt, ...) \ | |||
mdoc_vmsg((mdoc), (line), \ | |||
(pos), (fmt), ##__VA_ARGS__) | |||
#define mdoc_pwarn(mdoc, line, pos, type, fmt, ...) \ | |||
mdoc_vwarn((mdoc), (line), \ | |||
(pos), (type), (fmt), ##__VA_ARGS__) | |||
#define mdoc_perr(mdoc, line, pos, fmt, ...) \ | |||
mdoc_verr((mdoc), (line), \ | |||
(pos), (fmt), ##__VA_ARGS__) | |||
extern const struct mdoc_macro *const mdoc_macros; | |||
__BEGIN_DECLS | __BEGIN_DECLS | ||
int mdoc_err(struct mdoc *, int, int, enum mdoc_err); | int mdoc_vwarn(struct mdoc *, int, int, | ||
int mdoc_warn(struct mdoc *, int, int, enum mdoc_warn); | enum mdoc_warn, const char *, ...); | ||
void mdoc_msg(struct mdoc *, int, const char *, ...); | void mdoc_vmsg(struct mdoc *, int, int, | ||
int mdoc_macro(struct mdoc *, int, int, int *, char *); | const char *, ...); | ||
int mdoc_verr(struct mdoc *, int, int, | |||
const char *, ...); | |||
int mdoc_macro(MACRO_PROT_ARGS); | |||
int mdoc_find(const struct mdoc *, const char *); | int mdoc_find(const struct mdoc *, const char *); | ||
void mdoc_word_alloc(struct mdoc *, int, const char *); | int mdoc_word_alloc(struct mdoc *, | ||
void mdoc_elem_alloc(struct mdoc *, int, int, | int, int, const char *); | ||
size_t, const struct mdoc_arg *, | int mdoc_elem_alloc(struct mdoc *, int, int, | ||
size_t, const char **); | int, size_t, const struct mdoc_arg *); | ||
void mdoc_block_alloc(struct mdoc *, int, int, | int mdoc_block_alloc(struct mdoc *, int, int, | ||
size_t, const struct mdoc_arg *); | int, size_t, const struct mdoc_arg *); | ||
void mdoc_head_alloc(struct mdoc *, | int mdoc_root_alloc(struct mdoc *); | ||
int, int, size_t, const char **); | int mdoc_head_alloc(struct mdoc *, int, int, int); | ||
void mdoc_body_alloc(struct mdoc *, int, int); | int mdoc_tail_alloc(struct mdoc *, int, int, int); | ||
int mdoc_body_alloc(struct mdoc *, int, int, int); | |||
void mdoc_node_free(struct mdoc_node *); | void mdoc_node_free(struct mdoc_node *); | ||
void mdoc_node_freelist(struct mdoc_node *); | |||
void mdoc_sibling(struct mdoc *, int, struct mdoc_node **, | void mdoc_sibling(struct mdoc *, int, struct mdoc_node **, | ||
struct mdoc_node **, struct mdoc_node *); | struct mdoc_node **, struct mdoc_node *); | ||
void *mdoc_tokhash_alloc(void); | void *mdoc_tokhash_alloc(void); | ||
|
|
||
void mdoc_tokhash_free(void *); | void mdoc_tokhash_free(void *); | ||
int mdoc_isdelim(const char *); | int mdoc_isdelim(const char *); | ||
int mdoc_iscdelim(char); | int mdoc_iscdelim(char); | ||
enum mdoc_sec mdoc_atosec(size_t, const char **); | enum mdoc_sec mdoc_atosec(const char *); | ||
enum mdoc_msec mdoc_atomsec(const char *); | enum mdoc_msec mdoc_atomsec(const char *); | ||
enum mdoc_vol mdoc_atovol(const char *); | enum mdoc_vol mdoc_atovol(const char *); | ||
enum mdoc_arch mdoc_atoarch(const char *); | enum mdoc_arch mdoc_atoarch(const char *); | ||
enum mdoc_att mdoc_atoatt(const char *); | enum mdoc_att mdoc_atoatt(const char *); | ||
time_t mdoc_atotime(const char *); | time_t mdoc_atotime(const char *); | ||
int mdoc_valid(struct mdoc *, int, int, | char *mdoc_type2a(enum mdoc_type); | ||
int, const char *[], | char *mdoc_node2a(struct mdoc_node *); | ||
int, const struct mdoc_arg *); | |||
int mdoc_argv(struct mdoc *, int, | int mdoc_valid_pre(struct mdoc *, struct mdoc_node *); | ||
int mdoc_valid_post(struct mdoc *); | |||
int mdoc_action_pre(struct mdoc *, struct mdoc_node *); | |||
int mdoc_action_post(struct mdoc *); | |||
int mdoc_argv(struct mdoc *, int, int, | |||
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(int, struct mdoc_arg *); | void mdoc_argv_free(int, struct mdoc_arg *); | ||
int mdoc_args(struct mdoc *, int, | int mdoc_args(struct mdoc *, int, | ||
int *, char *, int, char **); | int *, char *, int, char **); | ||
|
|
||
#define ARGS_QUOTED (1 << 0) | #define ARGS_QUOTED (1 << 0) | ||
#define ARGS_DELIM (1 << 1) | #define ARGS_DELIM (1 << 1) | ||
#define ARGS_TABSEP (1 << 2) | |||
int xstrlcats(char *, const struct mdoc_node *, size_t); | |||
int xstrlcat(char *, const char *, size_t); | int xstrlcat(char *, const char *, size_t); | ||
int xstrlcpy(char *, const char *, size_t); | int xstrlcpy(char *, const char *, size_t); | ||
int xstrcmp(const char *, const char *); | int xstrcmp(const char *, const char *); | ||
|
|
||
char *xstrdup(const char *); | char *xstrdup(const char *); | ||
int macro_obsolete(MACRO_PROT_ARGS); | int macro_obsolete(MACRO_PROT_ARGS); | ||
int macro_constant_quoted(MACRO_PROT_ARGS); | |||
int macro_constant_obsolete(MACRO_PROT_ARGS); | |||
int macro_constant_argv(MACRO_PROT_ARGS); | |||
int macro_constant(MACRO_PROT_ARGS); | int macro_constant(MACRO_PROT_ARGS); | ||
int macro_constant_scoped(MACRO_PROT_ARGS); | |||
int macro_constant_delimited(MACRO_PROT_ARGS); | int macro_constant_delimited(MACRO_PROT_ARGS); | ||
int macro_text(MACRO_PROT_ARGS); | int macro_text(MACRO_PROT_ARGS); | ||
int macro_scoped_implicit(MACRO_PROT_ARGS); | int macro_scoped(MACRO_PROT_ARGS); | ||
int macro_scoped_explicit(MACRO_PROT_ARGS); | int macro_scoped_close(MACRO_PROT_ARGS); | ||
int macro_scoped_line(MACRO_PROT_ARGS); | int macro_scoped_line(MACRO_PROT_ARGS); | ||
int macro_scoped_pline(MACRO_PROT_ARGS); | int macro_prologue(MACRO_PROT_ARGS); | ||
int macro_prologue_ddate(MACRO_PROT_ARGS); | int macro_end(struct mdoc *); | ||
int macro_prologue_dtitle(MACRO_PROT_ARGS); | |||
int macro_prologue_os(MACRO_PROT_ARGS); | |||
__END_DECLS | __END_DECLS | ||