-/* $Id: macro.c,v 1.38 2009/01/16 11:50:54 kristaps Exp $ */
+/* $Id: macro.c,v 1.40 2009/01/17 16:15:27 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
return(mdoc_perr(mdoc, line, ppos, "too many arguments"));
}
- c = mdoc_elem_alloc(mdoc, line, la, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
if (0 == c) {
mdoc_argv_free(argc, argv);
lastpunct = 1;
} else if (lastpunct) {
c = mdoc_elem_alloc(mdoc, line,
- la, tok, argc, argv);
+ ppos, tok, argc, argv);
if (0 == c) {
mdoc_argv_free(argc, argv);
return(0);
/* FALLTHROUGH */
case (MDOC_Ns):
/* FALLTHROUGH */
+ case (MDOC_Pf):
+ /* FALLTHROUGH */
case (MDOC_Ux):
/* FALLTHROUGH */
case (MDOC_St):
return(0);
}
- c = mdoc_elem_alloc(mdoc, line, lastarg, tok, argc, argv);
+ c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
mdoc_argv_free(argc, argv);
if (0 == c)
struct mdoc_arg argv[MDOC_LINEARG_MAX];
char *p;
- /* FIXME: parsing macros! */
-
fl = 0;
if (MDOC_QUOTABLE & mdoc_macros[tok].flags)
fl = ARGS_QUOTED;
if (ARGS_EOLN == c)
break;
+ if (-1 == (c = lookup(mdoc, line, lastarg, tok, p)))
+ return(0);
+ else if (MDOC_MAX != c) {
+ if ( ! rewind_elem(mdoc, tok))
+ return(0);
+ return(mdoc_macro(mdoc, c, line,
+ lastarg, pos, buf));
+ }
+
if ( ! mdoc_word_alloc(mdoc, line, lastarg, p))
return(0);
mdoc->next = MDOC_NEXT_SIBLING;