=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.215 retrieving revision 1.219 diff -u -p -r1.215 -r1.219 --- mandoc/mdoc_term.c 2011/02/02 21:40:45 1.215 +++ mandoc/mdoc_term.c 2011/02/09 09:52:47 1.219 @@ -1,6 +1,6 @@ -/* $Id: mdoc_term.c,v 1.215 2011/02/02 21:40:45 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.219 2011/02/09 09:52:47 kristaps Exp $ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any @@ -312,22 +312,6 @@ print_mdoc_node(DECL_ARGS) memset(&npair, 0, sizeof(struct termpair)); npair.ppair = pair; - - switch (n->type) { - case (MDOC_TEXT): - if (' ' == *n->string && MDOC_LINE & n->flags) - term_newln(p); - term_word(p, n->string); - break; - case (MDOC_TBL): - term_tbl(p, n->span); - break; - default: - if (termacts[n->tok].pre && ENDBODY_NOT == n->end) - chld = (*termacts[n->tok].pre) - (p, &npair, m, n); - break; - } /* * Keeps only work until the end of a line. If a keep was @@ -359,6 +343,30 @@ print_mdoc_node(DECL_ARGS) (n->parent && MDOC_SYNPRETTY & n->parent->flags))) p->flags &= ~(TERMP_KEEP | TERMP_PREKEEP); + /* + * After the keep flags have been set up, we may now + * produce output. Note that some pre-handlers do so. + */ + + switch (n->type) { + case (MDOC_TEXT): + if (' ' == *n->string && MDOC_LINE & n->flags) + term_newln(p); + term_word(p, n->string); + break; + case (MDOC_EQN): + term_word(p, n->eqn->data); + break; + case (MDOC_TBL): + term_tbl(p, n->span); + break; + default: + if (termacts[n->tok].pre && ENDBODY_NOT == n->end) + chld = (*termacts[n->tok].pre) + (p, &npair, m, n); + break; + } + if (chld && n->child) print_mdoc_nodelist(p, &npair, m, n->child); @@ -369,6 +377,8 @@ print_mdoc_node(DECL_ARGS) break; case (MDOC_TBL): break; + case (MDOC_EQN): + break; default: if ( ! termacts[n->tok].post || MDOC_ENDED & n->flags) break; @@ -1704,6 +1714,7 @@ static int termp_xx_pre(DECL_ARGS) { const char *pp; + int flags; pp = NULL; switch (n->tok) { @@ -1731,9 +1742,10 @@ termp_xx_pre(DECL_ARGS) term_word(p, pp); if (n->child) { + flags = p->flags; p->flags |= TERMP_KEEP; term_word(p, n->child->string); - p->flags &= ~TERMP_KEEP; + p->flags = flags; } return(0); } @@ -2187,7 +2199,7 @@ termp__t_post(DECL_ARGS) * If we're in an `Rs' and there's a journal present, then quote * us instead of underlining us (for disambiguation). */ - if (n->parent && MDOC_Rs == n->parent->tok && + if (n->parent && MDOC_Rs == n->parent->tok && n->parent->norm->Rs.quote_T) termp_quote_post(p, pair, m, n);