summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-12-25 13:50:37 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-12-25 13:50:37 +0000
commit97ea338f64152142a27642d6ee10c3a0ae63be1e (patch)
tree1b2d5de6e555a424a34af16bcbfcd0dd5015c9ba /mdoc_term.c
parent7e94ba8189f4be23fa521d65778589feb5655811 (diff)
downloadmandoc-97ea338f64152142a27642d6ee10c3a0ae63be1e.tar.gz
mandoc-97ea338f64152142a27642d6ee10c3a0ae63be1e.tar.zst
mandoc-97ea338f64152142a27642d6ee10c3a0ae63be1e.zip
Specifying both %T and %J in an `Rs' block causes the title to be quoted
instead of underlined. This only happens in -Tascii, as -T[x]html both underlines and italicises.
Diffstat (limited to 'mdoc_term.c')
-rw-r--r--mdoc_term.c47
1 files changed, 43 insertions, 4 deletions
diff --git a/mdoc_term.c b/mdoc_term.c
index 87ec8df8..55d7ef4b 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -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 <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -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):
@@ -2134,6 +2140,39 @@ termp_bk_post(DECL_ARGS)
}
/* 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 */
static int
termp_under_pre(DECL_ARGS)
{