From ad92e664dabe64a7f625ea4f57463e6bc8935da4 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Mon, 4 Apr 2011 16:15:58 +0000 Subject: Fully fix the `Rv' and `Ex' handlers for -T[x]html and -Tascii. This includes an unreported bug where `Ex' wasn't properly adding a newline. --- mdoc_html.c | 35 ++++++++++++++++++++--------------- mdoc_term.c | 29 ++++++++++++++++------------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/mdoc_html.c b/mdoc_html.c index a5ba2a1e..b33b82e6 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.159 2011/04/04 16:01:47 kristaps Exp $ */ +/* $Id: mdoc_html.c,v 1.160 2011/04/04 16:15:58 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * @@ -1086,9 +1086,9 @@ mdoc_bl_pre(MDOC_ARGS) static int mdoc_ex_pre(MDOC_ARGS) { - const struct mdoc_node *nn; - struct tag *t; - struct htmlpair tag; + struct tag *t; + struct htmlpair tag; + int nchild; if (n->prev) print_otag(h, TAG_BR, 0, NULL); @@ -1096,22 +1096,25 @@ mdoc_ex_pre(MDOC_ARGS) PAIR_CLASS_INIT(&tag, "utility"); print_text(h, "The"); - for (nn = n->child; nn; nn = nn->next) { + + nchild = n->nchild; + for (n = n->child; n; n = n->next) { + assert(MDOC_TEXT == n->type); + t = print_otag(h, TAG_B, 1, &tag); - print_text(h, nn->string); + print_text(h, n->string); print_tagq(h, t); - h->flags |= HTML_NOSPACE; - - if (nn->next && NULL == nn->next->next) - print_text(h, ", and"); - else if (nn->next) + if (nchild > 2 && n->next) { + h->flags |= HTML_NOSPACE; print_text(h, ","); - else - h->flags &= ~HTML_NOSPACE; + } + + if (n->next && NULL == n->next->next) + print_text(h, "and"); } - if (n->child && n->child->next) + if (nchild > 1) print_text(h, "utilities exit"); else print_text(h, "utility exits"); @@ -1775,16 +1778,18 @@ mdoc_rv_pre(MDOC_ARGS) if (n->prev) print_otag(h, TAG_BR, 0, NULL); + PAIR_CLASS_INIT(&tag, "fname"); + print_text(h, "The"); nchild = n->nchild; for (n = n->child; n; n = n->next) { assert(MDOC_TEXT == n->type); - PAIR_CLASS_INIT(&tag, "fname"); t = print_otag(h, TAG_B, 1, &tag); print_text(h, n->string); print_tagq(h, t); + h->flags |= HTML_NOSPACE; print_text(h, "()"); diff --git a/mdoc_term.c b/mdoc_term.c index d48e2396..f6f966a2 100644 --- a/mdoc_term.c +++ b/mdoc_term.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.223 2011/04/04 16:05:36 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.224 2011/04/04 16:15:58 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -1189,11 +1189,11 @@ termp_rv_pre(DECL_ARGS) term_word(p, "The"); nchild = n->nchild; - for (n = n->child; n; n = n->next) { term_fontpush(p, TERMFONT_BOLD); term_word(p, n->string); term_fontpop(p); + p->flags |= TERMP_NOSPACE; term_word(p, "()"); @@ -1229,31 +1229,34 @@ termp_rv_pre(DECL_ARGS) static int termp_ex_pre(DECL_ARGS) { - const struct mdoc_node *nn; + int nchild; + term_newln(p); term_word(p, "The"); - for (nn = n->child; nn; nn = nn->next) { + nchild = n->nchild; + for (n = n->child; n; n = n->next) { term_fontpush(p, TERMFONT_BOLD); - term_word(p, nn->string); + term_word(p, n->string); term_fontpop(p); - p->flags |= TERMP_NOSPACE; - if (nn->next && NULL == nn->next->next) - term_word(p, ", and"); - else if (nn->next) + + if (nchild > 2 && n->next) { + p->flags |= TERMP_NOSPACE; term_word(p, ","); - else - p->flags &= ~TERMP_NOSPACE; + } + + if (n->next && NULL == n->next->next) + term_word(p, "and"); } - if (n->child && n->child->next) + if (nchild > 1) term_word(p, "utilities exit"); else term_word(p, "utility exits"); term_word(p, "0 on success, and >0 if an error occurs."); - p->flags |= TERMP_SENTENCE; + p->flags |= TERMP_SENTENCE; return(0); } -- cgit v1.2.3-56-ge451