=================================================================== RCS file: /cvs/mandoc/Attic/macro.c,v retrieving revision 1.45 retrieving revision 1.48 diff -u -p -r1.45 -r1.48 --- mandoc/Attic/macro.c 2009/01/20 13:05:28 1.45 +++ mandoc/Attic/macro.c 2009/01/20 20:56:21 1.48 @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.45 2009/01/20 13:05:28 kristaps Exp $ */ +/* $Id: macro.c,v 1.48 2009/01/20 20:56:21 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -512,7 +512,7 @@ macro_scoped_close(MACRO_PROT_ARGS) flushed = 1; } - c = mdoc_args(mdoc, line, pos, buf, ARGS_DELIM, &p); + c = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == c) return(0); if (ARGS_PUNCT == c) @@ -574,7 +574,7 @@ macro_scoped_close(MACRO_PROT_ARGS) int macro_text(MACRO_PROT_ARGS) { - int la, lastpunct, c, w, fl, argc; + int la, lastpunct, c, w, argc; struct mdoc_arg argv[MDOC_LINEARG_MAX]; char *p; @@ -610,14 +610,10 @@ macro_text(MACRO_PROT_ARGS) mdoc->next = MDOC_NEXT_CHILD; - fl = ARGS_DELIM; - if (MDOC_QUOTABLE & mdoc_macros[tok].flags) - fl |= ARGS_QUOTED; - lastpunct = 0; for (;;) { la = *pos; - w = mdoc_args(mdoc, line, pos, buf, fl, &p); + w = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == w) { mdoc_argv_free(argc, argv); return(0); @@ -707,12 +703,14 @@ macro_text(MACRO_PROT_ARGS) int macro_scoped(MACRO_PROT_ARGS) { - int c, lastarg, argc, fl; + int c, lastarg, argc; struct mdoc_arg argv[MDOC_LINEARG_MAX]; char *p; assert ( ! (MDOC_CALLABLE & mdoc_macros[tok].flags)); + /* First rewind extant implicit scope. */ + if ( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags)) { if ( ! rewind_subblock(MDOC_BODY, mdoc, tok, line, ppos)) return(0); @@ -720,6 +718,8 @@ macro_scoped(MACRO_PROT_ARGS) return(0); } + /* Parse arguments. */ + for (argc = 0; argc < MDOC_LINEARG_MAX; argc++) { lastarg = *pos; c = mdoc_argv(mdoc, line, tok, &argv[argc], pos, buf); @@ -763,13 +763,9 @@ macro_scoped(MACRO_PROT_ARGS) return(0); mdoc->next = MDOC_NEXT_CHILD; - fl = ARGS_DELIM; - if (MDOC_TABSEP & mdoc_macros[tok].flags) - fl |= ARGS_TABSEP; - for (;;) { lastarg = *pos; - c = mdoc_args(mdoc, line, pos, buf, fl, &p); + c = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == c) return(0); @@ -777,10 +773,14 @@ macro_scoped(MACRO_PROT_ARGS) break; if (ARGS_EOLN == c) break; + + /* FIXME: if .It -column, the lookup must be for a + * sub-line component. BLAH. */ if (-1 == (c = lookup(mdoc, line, lastarg, tok, p))) return(0); - else if (MDOC_MAX == c) { + + if (MDOC_MAX == c) { if ( ! mdoc_word_alloc(mdoc, line, lastarg, p)) return(0); mdoc->next = MDOC_NEXT_SIBLING; @@ -791,7 +791,7 @@ macro_scoped(MACRO_PROT_ARGS) return(0); break; } - + if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos)) return(0); if (1 == ppos && ! append_delims(mdoc, line, pos, buf)) @@ -846,7 +846,7 @@ macro_scoped_line(MACRO_PROT_ARGS) lastarg = ppos; for (;;) { lastarg = *pos; - c = mdoc_args(mdoc, line, pos, buf, ARGS_DELIM, &p); + c = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == c) return(0); @@ -942,7 +942,7 @@ macro_constant_scoped(MACRO_PROT_ARGS) mdoc->next = MDOC_NEXT_CHILD; } - c = mdoc_args(mdoc, line, pos, buf, ARGS_DELIM, &p); + c = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == c) return(0); if (ARGS_PUNCT == c) @@ -1070,7 +1070,7 @@ macro_constant_delimited(MACRO_PROT_ARGS) flushed = 1; } - c = mdoc_args(mdoc, line, pos, buf, ARGS_DELIM, &p); + c = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == c) return(0); if (ARGS_PUNCT == c) @@ -1116,7 +1116,7 @@ macro_constant_delimited(MACRO_PROT_ARGS) int macro_constant(MACRO_PROT_ARGS) { - int c, w, la, argc, fl; + int c, w, la, argc; struct mdoc_arg argv[MDOC_LINEARG_MAX]; char *p; @@ -1150,13 +1150,9 @@ macro_constant(MACRO_PROT_ARGS) mdoc->next = MDOC_NEXT_CHILD; - fl = 0; - if (MDOC_QUOTABLE & mdoc_macros[tok].flags) - fl = ARGS_QUOTED; - for (;;) { la = *pos; - w = mdoc_args(mdoc, line, pos, buf, fl, &p); + w = mdoc_args(mdoc, line, pos, buf, tok, &p); if (ARGS_ERROR == w) return(0); if (ARGS_EOLN == w) @@ -1213,8 +1209,7 @@ macro_end(struct mdoc *mdoc) continue; if ( ! (MDOC_EXPLICIT & mdoc_macros[n->tok].flags)) continue; - mdoc_nerr(mdoc, n, "macro scope still open on exit"); - return(0); + return(mdoc_nerr(mdoc, n, "macro scope still open on exit")); } return(rewind_last(mdoc, mdoc->first));