=================================================================== RCS file: /cvs/mandoc/mdoc.h,v retrieving revision 1.20 retrieving revision 1.25 diff -u -p -r1.20 -r1.25 --- mandoc/mdoc.h 2009/01/12 12:52:21 1.20 +++ mandoc/mdoc.h 2009/01/17 16:15:27 1.25 @@ -1,4 +1,4 @@ -/* $Id: mdoc.h,v 1.20 2009/01/12 12:52:21 kristaps Exp $ */ +/* $Id: mdoc.h,v 1.25 2009/01/17 16:15:27 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -19,7 +19,7 @@ #ifndef MDOC_H #define MDOC_H -#define MDOC_LINEARG_MAX 12 +/* What follows is a list of ALL possible macros. */ #define MDOC___ 0 #define MDOC_Dd 1 @@ -129,6 +129,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 @@ -193,42 +195,12 @@ #define MDOC_Symbolic 61 #define MDOC_ARG_MAX 62 -enum mdoc_err { - ERR_SYNTAX_QUOTE, /* NOTUSED */ - ERR_SYNTAX_UNQUOTE, - ERR_SYNTAX_NOPUNCT, - ERR_SYNTAX_WS, - ERR_SYNTAX_ARG, - ERR_SYNTAX_ARGFORM, - ERR_SYNTAX_ARGVAL, - ERR_SYNTAX_ARGBAD, - ERR_SYNTAX_ARGMISS, - ERR_SYNTAX_ARGMANY, - ERR_MACRO_NOTSUP, - ERR_MACRO_NOTCALL, - ERR_SCOPE_BREAK, - ERR_SCOPE_NOCTX, - ERR_SCOPE_NONEST, - ERR_SEC_PROLOGUE, - ERR_SEC_NPROLOGUE, - ERR_SEC_PROLOGUE_OO, - ERR_SEC_PROLOGUE_REP, - ERR_SEC_NAME, - ERR_ARGS_EQ0, - ERR_ARGS_EQ1, - ERR_ARGS_GE1, - ERR_ARGS_LE2, - ERR_ARGS_LE8, - ERR_ARGS_MANY, - ERR_SYNTAX_CHILDBAD, - ERR_SYNTAX_PARENTBAD, - ERR_SYNTAX_CHILDHEAD, - ERR_SYNTAX_CHILDBODY, - ERR_SYNTAX_EMPTYBODY, - ERR_SYNTAX_EMPTYHEAD, - ERR_SYNTAX_NOTEXT +enum mdoc_warn { + WARN_SYNTAX, /* Syntax warn (at line/col). */ + WARN_COMPAT /* Groff compat warn (at line/col). */ }; +/* Possible values for the `At' macro. */ enum mdoc_att { ATT_DEFAULT = 0, ATT_v1, @@ -245,24 +217,7 @@ enum mdoc_att { ATT_V4 }; -enum mdoc_warn { - WARN_SYNTAX_WS_EOLN, - WARN_SYNTAX_MACLIKE, - WARN_SYNTAX_ARGLIKE, - WARN_SYNTAX_QUOTED, - WARN_SYNTAX_EMPTYHEAD, - WARN_SYNTAX_EMPTYBODY, - WARN_SYNTAX_NOBODY, - WARN_IGN_AFTER_BLK, - WARN_IGN_BEFORE_BLK, - WARN_IGN_OBSOLETE, - WARN_SEC_OO, - WARN_SEC_REP, - WARN_ARGS_GE1, - WARN_ARGS_EQ0, - WARN_COMPAT_TROFF -}; - +/* An argument to a macro (multiple values = `It -column'). */ struct mdoc_arg { int arg; int line; @@ -271,6 +226,20 @@ struct mdoc_arg { char **value; }; +/* + * Simplified grammar of syntax tree: + * + * MDOC_ROOT: root of tree + * MDOC_TEXT: free-form text + * MDOC_ELEM: elem [args] MDOC_TEXT... + * MDOC_BLOCK, MDOC_HEAD, MDOC_BODY, MDOC_TAIL: + * MDOC_BLOCK: + * MDOC_HEAD [args] (MDOC_TEXT|MDOC_ELEM|MDOC_BLOCK)... + * MDOC_BODY (MDOC_TEXT|MDOC_ELEM|MDOC_BLOCK)... + * MDOC_TAIL (optional) (MDOC_TEXT|MDOC_ELEM|MDOC_BLOCK)... + */ + +/* Type of a syntax node. */ enum mdoc_type { MDOC_TEXT, MDOC_ELEM, @@ -281,6 +250,7 @@ enum mdoc_type { MDOC_ROOT }; +/* Manual section. */ enum mdoc_msec { MSEC_DEFAULT = 0, MSEC_1, @@ -303,6 +273,7 @@ enum mdoc_msec { MSEC_paper }; +/* Section (named/unnamed) of `Ss'. */ enum mdoc_sec { SEC_PROLOGUE = 0, SEC_BODY, @@ -324,6 +295,7 @@ enum mdoc_sec { SEC_CUSTOM }; +/* Volume of `Dt'. */ enum mdoc_vol { VOL_DEFAULT = 0, VOL_AMD, @@ -337,12 +309,14 @@ enum mdoc_vol { VOL_USD }; +/* Architecture of `Dt'. */ enum mdoc_arch { ARCH_DEFAULT = 0, ARCH_alpha, ARCH_amd64, ARCH_amiga, ARCH_arc, + ARCH_arm, ARCH_armish, ARCH_aviion, ARCH_hp300, @@ -366,15 +340,15 @@ enum mdoc_arch { ARCH_zaurus }; +/* Meta-information from prologue. */ struct mdoc_meta { enum mdoc_msec msec; enum mdoc_vol vol; enum mdoc_arch arch; time_t date; -#define META_TITLE_SZ (64) - char title[META_TITLE_SZ]; -#define META_OS_SZ (64) - char os[META_OS_SZ]; + char *title; + char *os; + char *name; }; struct mdoc_text { @@ -402,6 +376,7 @@ union mdoc_data { struct mdoc_block block; }; +/* Syntax node in parse tree. */ struct mdoc_node { struct mdoc_node *parent; struct mdoc_node *child; @@ -414,10 +389,12 @@ struct mdoc_node { union mdoc_data data; }; +/* Call-backs for parse messages. */ 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, 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; @@ -427,11 +404,19 @@ __BEGIN_DECLS struct mdoc; +/* Free memory allocated with mdoc_alloc. */ void mdoc_free(struct mdoc *); + +/* Allocate a new parser instance. */ struct mdoc *mdoc_alloc(void *data, const struct mdoc_cb *); + +/* Parse a single line (boolean retval). */ int mdoc_parseln(struct mdoc *, int, char *buf); -const struct mdoc_node - *mdoc_result(struct mdoc *); + +/* Get parse result or NULL. */ +const struct mdoc_node *mdoc_result(struct mdoc *); + +/* Signal end of parse sequence (boolean retval). */ int mdoc_endparse(struct mdoc *); __END_DECLS