=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.202 retrieving revision 1.203 diff -u -p -r1.202 -r1.203 --- mandoc/mdoc_term.c 2010/12/24 14:00:40 1.202 +++ mandoc/mdoc_term.c 2010/12/25 13:50:37 1.203 @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.202 2010/12/24 14:00:40 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.203 2010/12/25 13:50:37 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -68,6 +68,7 @@ static void synopsis_pre(struct termp *, const struct mdoc_node *); static void termp____post(DECL_ARGS); +static void termp__t_post(DECL_ARGS); static void termp_an_post(DECL_ARGS); static void termp_bd_post(DECL_ARGS); static void termp_bk_post(DECL_ARGS); @@ -85,6 +86,7 @@ static void termp_sh_post(DECL_ARGS); static void termp_ss_post(DECL_ARGS); static int termp__a_pre(DECL_ARGS); +static int termp__t_pre(DECL_ARGS); static int termp_an_pre(DECL_ARGS); static int termp_ap_pre(DECL_ARGS); static int termp_bd_pre(DECL_ARGS); @@ -174,7 +176,7 @@ static const struct termact termacts[MDOC_MAX] = { { NULL, termp____post }, /* %O */ { NULL, termp____post }, /* %P */ { NULL, termp____post }, /* %R */ - { termp_under_pre, termp____post }, /* %T */ + { termp__t_pre, termp__t_post }, /* %T */ { NULL, termp____post }, /* %V */ { NULL, NULL }, /* Ac */ { termp_quote_pre, termp_quote_post }, /* Ao */ @@ -1830,7 +1832,7 @@ static int termp_quote_pre(DECL_ARGS) { - if (MDOC_BODY != n->type) + if (MDOC_BODY != n->type && MDOC_ELEM != n->type) return(1); switch (n->tok) { @@ -1853,6 +1855,8 @@ termp_quote_pre(DECL_ARGS) case (MDOC_Bq): term_word(p, "["); break; + case (MDOC__T): + /* FALLTHROUGH */ case (MDOC_Do): /* FALLTHROUGH */ case (MDOC_Dq): @@ -1890,7 +1894,7 @@ static void termp_quote_post(DECL_ARGS) { - if (MDOC_BODY != n->type) + if (MDOC_BODY != n->type && MDOC_ELEM != n->type) return; p->flags |= TERMP_NOSPACE; @@ -1915,6 +1919,8 @@ termp_quote_post(DECL_ARGS) case (MDOC_Bq): term_word(p, "]"); break; + case (MDOC__T): + /* FALLTHROUGH */ case (MDOC_Do): /* FALLTHROUGH */ case (MDOC_Dq): @@ -2131,6 +2137,39 @@ termp_bk_post(DECL_ARGS) if (MDOC_BODY == n->type) p->flags &= ~(TERMP_KEEP | TERMP_PREKEEP); +} + +/* ARGSUSED */ +static void +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 && + n->parent->norm->Rs.titlejournal) + termp_quote_post(p, pair, m, n); + + termp____post(p, pair, m, n); +} + +/* ARGSUSED */ +static int +termp__t_pre(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 && + n->parent->norm->Rs.titlejournal) + return(termp_quote_pre(p, pair, m, n)); + + term_fontpush(p, TERMFONT_UNDER); + return(1); } /* ARGSUSED */