=================================================================== RCS file: /cvs/mandoc/libmdoc.h,v retrieving revision 1.69 retrieving revision 1.73 diff -u -p -r1.69 -r1.73 --- mandoc/libmdoc.h 2011/03/20 16:02:05 1.69 +++ mandoc/libmdoc.h 2011/04/17 09:08:19 1.73 @@ -1,4 +1,4 @@ -/* $Id: libmdoc.h,v 1.69 2011/03/20 16:02:05 kristaps Exp $ */ +/* $Id: libmdoc.h,v 1.73 2011/04/17 09:08:19 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * @@ -17,8 +17,6 @@ #ifndef LIBMDOC_H #define LIBMDOC_H -#include "mdoc.h" - enum mdoc_next { MDOC_NEXT_SIBLING = 0, MDOC_NEXT_CHILD @@ -64,22 +62,39 @@ struct mdoc_macro { enum margserr { ARGS_ERROR, - ARGS_EOLN, - ARGS_WORD, - ARGS_PUNCT, - ARGS_QWORD, - ARGS_PHRASE, - ARGS_PPHRASE, - ARGS_PEND + ARGS_EOLN, /* end-of-line */ + ARGS_WORD, /* normal word */ + ARGS_PUNCT, /* series of punctuation */ + ARGS_QWORD, /* quoted word */ + ARGS_PHRASE, /* Ta'd phrase (-column) */ + ARGS_PPHRASE, /* tabbed phrase (-column) */ + ARGS_PEND /* last phrase (-column) */ }; enum margverr { ARGV_ERROR, - ARGV_EOLN, - ARGV_ARG, - ARGV_WORD + ARGV_EOLN, /* end of line */ + ARGV_ARG, /* valid argument */ + ARGV_WORD /* normal word (or bad argument---same thing) */ }; +/* + * A punctuation delimiter is opening, closing, or "middle mark" + * punctuation. These govern spacing. + * Opening punctuation (e.g., the opening parenthesis) suppresses the + * following space; closing punctuation (e.g., the closing parenthesis) + * suppresses the leading space; middle punctuation (e.g., the vertical + * bar) can do either. The middle punctuation delimiter bends the rules + * depending on usage. + */ +enum mdelim { + DELIM_NONE = 0, + DELIM_OPEN, + DELIM_MIDDLE, + DELIM_CLOSE, + DELIM_MAX +}; + extern const struct mdoc_macro *const mdoc_macros; __BEGIN_DECLS @@ -115,7 +130,6 @@ int mdoc_valid_post(struct mdoc *); enum margverr mdoc_argv(struct mdoc *, int, enum mdoct, struct mdoc_arg **, int *, char *); void mdoc_argv_free(struct mdoc_arg *); -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, @@ -125,6 +139,9 @@ enum margserr mdoc_zargs(struct mdoc *, int, #define ARGS_NOWARN (1 << 3) int mdoc_macroend(struct mdoc *); + +#define DELIMSZ 6 /* hint: max possible size of a delimiter */ +enum mdelim mdoc_isdelim(const char *); __END_DECLS