-/* $Id: macro.c,v 1.51 2009/02/23 12:45:19 kristaps Exp $ */
+/* $Id: macro.c,v 1.56 2009/03/05 12:08:53 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
* macro.
*/
+/*
+ * FIXME: don't use static mdoc_argv values, as they require us to do a
+ * complicated copy-over when actually assigning them to dynamic memory.
+ */
+
#include "private.h"
static int macro_obsolete(MACRO_PROT_ARGS);
{ macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Xo */
/* XXX - .Fo supposed to be (but isn't) callable. */
{ macro_scoped, MDOC_EXPLICIT }, /* Fo */
- /* XXX - .Fc supposed to be (but isn't) callable. */
- { macro_scoped_close, MDOC_EXPLICIT }, /* Fc */
+ { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Fc */
{ macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Oo */
{ macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Oc */
{ macro_scoped, MDOC_EXPLICIT }, /* Bk */
return(perr(mdoc, line, ppos, EARGVLIM));
}
- c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos,
+ tok, (size_t)argc, argv);
if (0 == c) {
mdoc_argv_free(argc, argv);
return(0);
}
+ /* FIXME: .Fl and .Ar handling of `|'. */
+
if (ARGS_QWORD != w && mdoc_isdelim(p)) {
if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {
mdoc_argv_free(argc, argv);
}
lastpunct = 1;
} else if (lastpunct) {
- c = mdoc_elem_alloc(mdoc, line,
- ppos, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos,
+ tok, (size_t)argc, argv);
if (0 == c) {
mdoc_argv_free(argc, argv);
return(0);
if (ARGS_ERROR == c)
return(0);
- if (ARGS_PUNCT == c)
- break;
if (ARGS_EOLN == c)
break;
-
if (ARGS_PHRASE == c) {
/*
if ( ! mdoc_phrase(mdoc, line, lastarg, buf))
break;
}
- if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
- return(0);
if (1 == ppos && ! append_delims(mdoc, line, pos, buf))
return(0);
+ if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
+ return(0);
if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
return(0);
return(perr(mdoc, line, ppos, EARGVLIM));
}
- c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos,
+ tok, (size_t)argc, argv);
+
mdoc_argv_free(argc, argv);
if (0 == c)
return(perr(mdoc, line, ppos, EARGVLIM));
}
- c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos,
+ tok, (size_t)argc, argv);
+
mdoc_argv_free(argc, argv);
if (0 == c)