=================================================================== RCS file: /cvs/mandoc/mdoc_macro.c,v retrieving revision 1.11 retrieving revision 1.15 diff -u -p -r1.11 -r1.15 --- mandoc/mdoc_macro.c 2009/06/11 20:02:37 1.11 +++ mandoc/mdoc_macro.c 2009/07/06 09:21:24 1.15 @@ -1,4 +1,4 @@ -/* $Id: mdoc_macro.c,v 1.11 2009/06/11 20:02:37 kristaps Exp $ */ +/* $Id: mdoc_macro.c,v 1.15 2009/07/06 09:21:24 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -22,8 +22,6 @@ #include "libmdoc.h" -/* FIXME: .Fl, .Ar, .Cd handling of `|'. */ - enum mwarn { WIGNE, WIMPBRK, @@ -74,7 +72,7 @@ static int swarn(struct mdoc *, enum mdoc_type, int, /* Central table of library: who gets parsed how. */ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { - { NULL, 0 }, /* \" */ + { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ap */ { in_line_eoln, MDOC_PROLOGUE }, /* Dd */ { in_line_eoln, MDOC_PROLOGUE }, /* Dt */ { in_line_eoln, MDOC_PROLOGUE }, /* Os */ @@ -181,10 +179,9 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { obsolete, 0 }, /* Fr */ { in_line_eoln, 0 }, /* Ud */ { in_line_eoln, 0 }, /* Lb */ - { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ap */ { in_line, 0 }, /* Lp */ - { in_line, MDOC_PARSED }, /* Lk */ - { in_line, MDOC_PARSED }, /* Mt */ + { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Lk */ + { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Mt */ { blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Brq */ { blk_part_exp, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Bro */ { blk_exp_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Brc */ @@ -244,7 +241,7 @@ pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn break; } assert(p); - return(mdoc_pwarn(mdoc, line, pos, WARN_SYNTAX, p)); + return(mdoc_pwarn(mdoc, line, pos, p)); } @@ -289,7 +286,7 @@ swarn(struct mdoc *mdoc, enum mdoc_type type, return(mdoc_perr(mdoc, line, pos, "%s scope breaks %s scope of %s", tt, t, n)); - return(mdoc_pwarn(mdoc, line, pos, WARN_SYNTAX, + return(mdoc_pwarn(mdoc, line, pos, "%s scope breaks %s scope of %s", tt, t, n)); } @@ -813,6 +810,8 @@ in_line(MACRO_PROT_ARGS) /* FALLTHROUGH */ case (MDOC_Fl): /* FALLTHROUGH */ + case (MDOC_Lk): + /* FALLTHROUGH */ case (MDOC_Ar): nc = 1; break; @@ -868,7 +867,8 @@ in_line(MACRO_PROT_ARGS) if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg)) return(0); - mdoc->next = MDOC_NEXT_SIBLING; + if ( ! rew_last(mdoc, mdoc->last)) + return(0); } else if ( ! nc && 0 == cnt) { mdoc_argv_free(arg); if ( ! pwarn(mdoc, line, ppos, WIGNE)) @@ -923,7 +923,8 @@ in_line(MACRO_PROT_ARGS) c = mdoc_elem_alloc(mdoc, line, ppos, tok, arg); if (0 == c) return(0); - mdoc->next = MDOC_NEXT_SIBLING; + if ( ! rew_last(mdoc, mdoc->last)) + return(0); } else if ( ! nc && 0 == cnt) { mdoc_argv_free(arg); if ( ! pwarn(mdoc, line, ppos, WIGNE))