=================================================================== RCS file: /cvs/mandoc/Attic/macro.c,v retrieving revision 1.16 retrieving revision 1.18 diff -u -p -r1.16 -r1.18 --- mandoc/Attic/macro.c 2009/01/01 20:40:16 1.16 +++ mandoc/Attic/macro.c 2009/01/03 18:38:39 1.18 @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.16 2009/01/01 20:40:16 kristaps Exp $ */ +/* $Id: macro.c,v 1.18 2009/01/03 18:38:39 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -146,6 +146,15 @@ append_text_argv(struct mdoc *mdoc, int tok, int pos, if ( ! mdoc_valid_pre(mdoc, tok, pos, 0, NULL, argc, argv)) return(0); + + switch (tok) { + case (MDOC_Pf): + /* TODO: only use first two arguments in element. */ + break; + default: + break; + } + mdoc_elem_alloc(mdoc, pos, tok, (size_t)argc, argv, (size_t)sz, _CC(args)); mdoc->next = MDOC_NEXT_SIBLING; @@ -162,6 +171,9 @@ append_text(struct mdoc *mdoc, int tok, return(0); switch (tok) { + /* + * FIXME: deprecate this "feature" of mdoc(7). + */ case (MDOC_At): if (0 == sz) break; @@ -201,6 +213,7 @@ macro_text(MACRO_PROT_ARGS) /* Token pre-processing. */ switch (tok) { + /* FIXME: move to validate.c. */ case (MDOC_Pp): /* `.Pp' ignored when following `.Sh' or `.Ss'. */ assert(mdoc->last); @@ -332,11 +345,16 @@ macro_close_explicit(MACRO_PROT_ARGS) case (MDOC_Re): tt = MDOC_Rs; break; + case (MDOC_Ef): + tt = MDOC_Bf; + break; default: abort(); /* NOTREACHED */ } + if (0 != buf[*pos]) + return(mdoc_err(mdoc, tok, ppos, ERR_ARGS_EQ0)); return(scope_rewind_exp(mdoc, ppos, tok, tt)); } @@ -453,17 +471,19 @@ macro_scoped(MACRO_PROT_ARGS) mdoc_argv_free(argc, argv); - mdoc_head_alloc(mdoc, ppos, tok); - mdoc->next = MDOC_NEXT_CHILD; - - for (i = 0; i < sz; i++) { - mdoc_word_alloc(mdoc, ppos, args[i]); - mdoc->next = MDOC_NEXT_SIBLING; + if (sz > 0) { + mdoc_head_alloc(mdoc, ppos, tok); + mdoc->next = MDOC_NEXT_CHILD; + + for (i = 0; i < sz; i++) { + mdoc_word_alloc(mdoc, ppos, args[i]); + mdoc->next = MDOC_NEXT_SIBLING; + } + + if ( ! scope_rewind_line(mdoc, ppos, tok)) + return(0); } - if ( ! scope_rewind_line(mdoc, ppos, tok)) - return(0); - mdoc_body_alloc(mdoc, ppos, tok); mdoc->next = MDOC_NEXT_CHILD; @@ -542,6 +562,10 @@ again: } +/* + * FIXME: like in with macro_constant, have the append_ routine chop the + * number of requisite arguments (this is ugly when done in-line). + */ int macro_constant_delimited(MACRO_PROT_ARGS) {