=================================================================== RCS file: /cvs/mandoc/mdoc.h,v retrieving revision 1.2 retrieving revision 1.22 diff -u -p -r1.2 -r1.22 --- mandoc/mdoc.h 2008/12/15 03:13:01 1.2 +++ mandoc/mdoc.h 2009/01/15 17:38:57 1.22 @@ -1,4 +1,4 @@ -/* $Id: mdoc.h,v 1.2 2008/12/15 03:13:01 kristaps Exp $ */ +/* $Id: mdoc.h,v 1.22 2009/01/15 17:38:57 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -19,8 +19,12 @@ #ifndef MDOC_H #define MDOC_H -#define MDOC_LINEARG_MAX 9 +/* FIXME: move this elsewhere (it's 9, too). */ +#define MDOC_LINEARG_MAX 12 + +/* What follows is a list of ALL possible macros. */ + #define MDOC___ 0 #define MDOC_Dd 1 #define MDOC_Dt 2 @@ -129,6 +133,8 @@ #define MDOC_Ud 105 #define MDOC_MAX 106 +/* What follows is a list of ALL possible macro arguments. */ + #define MDOC_Split 0 #define MDOC_Nosplit 1 #define MDOC_Ragged 2 @@ -189,25 +195,35 @@ #define MDOC_svid4 57 #define MDOC_Filled 58 #define MDOC_Words 59 -#define MDOC_ARG_MAX 60 +#define MDOC_Emphasis 60 +#define MDOC_Symbolic 61 +#define MDOC_ARG_MAX 62 -enum mdoc_err { - ERR_SYNTAX_QUOTE, - ERR_SYNTAX_WS, - ERR_MACRO_NOTSUP, - ERR_MACRO_NOTCALL, - ERR_SCOPE_BREAK, - ERR_ARGS_GE1 +enum mdoc_warn { + WARN_SYNTAX, /* Syntax warn (at line/col). */ + WARN_COMPAT /* Groff compat warn (at line/col). */ }; -enum mdoc_warn { - WARN_SYNTAX_WS_EOLN, - WARN_SYNTAX_MACLIKE, - WARN_ARGS_GE1 +enum mdoc_att { + ATT_DEFAULT = 0, + ATT_v1, + ATT_v2, + ATT_v3, + ATT_v4, + ATT_v5, + ATT_v6, + ATT_v7, + ATT_32v, + ATT_V1, + ATT_V2, + ATT_V3, + ATT_V4 }; struct mdoc_arg { int arg; + int line; + int pos; size_t sz; char **value; }; @@ -216,11 +232,14 @@ enum mdoc_type { MDOC_TEXT, MDOC_ELEM, MDOC_HEAD, + MDOC_TAIL, MDOC_BODY, - MDOC_BLOCK + MDOC_BLOCK, + MDOC_ROOT }; enum mdoc_msec { + MSEC_DEFAULT = 0, MSEC_1, MSEC_2, MSEC_3, @@ -238,12 +257,12 @@ enum mdoc_msec { MSEC_n, MSEC_unass, MSEC_draft, - MSEC_paper, - MSEC_NONE + MSEC_paper }; enum mdoc_sec { - SEC_PROLOGUE, + SEC_PROLOGUE = 0, + SEC_BODY, SEC_NAME, SEC_SYNOPSIS, SEC_DESCRIPTION, @@ -263,6 +282,7 @@ enum mdoc_sec { }; enum mdoc_vol { + VOL_DEFAULT = 0, VOL_AMD, VOL_IND, VOL_KM, @@ -271,11 +291,11 @@ enum mdoc_vol { VOL_PS1, VOL_SMM, VOL_URM, - VOL_USD, - VOL_DEFAULT + VOL_USD }; enum mdoc_arch { + ARCH_DEFAULT = 0, ARCH_alpha, ARCH_amd64, ARCH_amiga, @@ -300,15 +320,18 @@ enum mdoc_arch { ARCH_sparc64, ARCH_sun3, ARCH_vax, - ARCH_zaurus, - ARCH_DEFAULT + ARCH_zaurus }; struct mdoc_meta { enum mdoc_msec msec; enum mdoc_vol vol; enum mdoc_arch arch; - struct tm tm; + time_t date; +#define META_TITLE_SZ (64) + char title[META_TITLE_SZ]; +#define META_OS_SZ (64) + char os[META_OS_SZ]; }; struct mdoc_text { @@ -316,25 +339,16 @@ struct mdoc_text { }; struct mdoc_block { - int tok; size_t argc; struct mdoc_arg *argv; + struct mdoc_node *head; + struct mdoc_node *body; + struct mdoc_node *tail; }; -struct mdoc_head { - size_t sz; - char **args; - int tok; -}; - -struct mdoc_body { - int tok; -}; - struct mdoc_elem { size_t sz; char **args; - int tok; size_t argc; struct mdoc_arg *argv; }; @@ -342,8 +356,6 @@ struct mdoc_elem { union mdoc_data { struct mdoc_text text; struct mdoc_elem elem; - struct mdoc_body body; - struct mdoc_head head; struct mdoc_block block; }; @@ -351,14 +363,19 @@ struct mdoc_node { struct mdoc_node *parent; struct mdoc_node *child; struct mdoc_node *next; + struct mdoc_node *prev; + int line; + int pos; + int tok; enum mdoc_type type; union mdoc_data data; }; struct mdoc_cb { - int (*mdoc_err)(void *, int, int, enum mdoc_err); - int (*mdoc_warn)(void *, int, int, enum mdoc_warn); - void (*mdoc_msg)(void *, int, const char *); + void (*mdoc_msg)(void *, int, int, const char *); + int (*mdoc_err)(void *, int, int, const char *); + int (*mdoc_warn)(void *, int, int, + enum mdoc_warn, const char *); }; extern const char *const *mdoc_macronames; @@ -370,9 +387,12 @@ struct mdoc; void mdoc_free(struct mdoc *); struct mdoc *mdoc_alloc(void *data, const struct mdoc_cb *); -int mdoc_parseln(struct mdoc *, char *buf); +int mdoc_parseln(struct mdoc *, int, char *buf); const struct mdoc_node *mdoc_result(struct mdoc *); +int mdoc_endparse(struct mdoc *); + +char *mdoc_type2a(enum mdoc_type); __END_DECLS