]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_term.c
Fix following the first: `Ft' is given special treatment if specified before
[mandoc.git] / mdoc_term.c
index ff04d3a2e9e0edc31e9be85906d9ad00de95b3d7..fec3bf483642edf869fb8525450ade1e42ffe1d5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.134 2010/05/30 22:56:02 kristaps Exp $ */
+/*     $Id: mdoc_term.c,v 1.140 2010/06/04 22:26:13 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -260,6 +260,7 @@ static      const struct termact termacts[MDOC_MAX] = {
        { termp_sp_pre, NULL }, /* br */
        { termp_sp_pre, NULL }, /* sp */ 
        { termp_under_pre, termp____post }, /* %U */ 
+       { NULL, NULL }, /* Ta */ 
 };
 
 
@@ -1357,12 +1358,7 @@ static void
 termp_fd_post(DECL_ARGS)
 {
 
-       if (n->sec != SEC_SYNOPSIS || ! (MDOC_LINE & n->flags))
-               return;
-
        term_newln(p);
-       if (n->next && MDOC_Fd != n->next->tok)
-               term_vspace(p);
 }
 
 
@@ -1540,6 +1536,14 @@ termp_fn_pre(DECL_ARGS)
 {
        const struct mdoc_node  *nn;
 
+       /* NB: MDOC_LINE has no effect on this macro! */
+       if (SEC_SYNOPSIS == n->sec) {
+               if (n->prev && MDOC_Ft == n->prev->tok)
+                       term_newln(p);
+               else if (n->prev)
+                       term_vspace(p);
+       }
+
        term_fontpush(p, TERMFONT_BOLD);
        term_word(p, n->child->string);
        term_fontpop(p);
@@ -1570,8 +1574,9 @@ static void
 termp_fn_post(DECL_ARGS)
 {
 
-       if (n->sec == SEC_SYNOPSIS && n->next && MDOC_LINE & n->flags)
-               term_vspace(p);
+       /* NB: MDOC_LINE has no effect on this macro! */
+       if (SEC_SYNOPSIS == n->sec)
+               term_newln(p);
 }
 
 
@@ -1851,11 +1856,15 @@ static int
 termp_in_pre(DECL_ARGS)
 {
 
-       term_fontpush(p, TERMFONT_BOLD);
-       if (SEC_SYNOPSIS == n->sec)
+       if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {
+               term_fontpush(p, TERMFONT_BOLD);
                term_word(p, "#include");
+               term_word(p, "<");
+       } else {
+               term_word(p, "<");
+               term_fontpush(p, TERMFONT_UNDER);
+       }
 
-       term_word(p, "<");
        p->flags |= TERMP_NOSPACE;
        return(1);
 }
@@ -1866,23 +1875,16 @@ static void
 termp_in_post(DECL_ARGS)
 {
 
-       term_fontpush(p, TERMFONT_BOLD);
+       if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags)
+               term_fontpush(p, TERMFONT_BOLD);
+
        p->flags |= TERMP_NOSPACE;
        term_word(p, ">");
-       term_fontpop(p);
-
-       if (SEC_SYNOPSIS != n->sec && ! (MDOC_LINE & n->flags))
-               return;
 
-       term_newln(p);
-       /* 
-        * XXX Not entirely correct.  If `.In foo bar' is specified in
-        * the SYNOPSIS section, then it produces a single break after
-        * the <foo>; mandoc asserts a vertical space.  Since this
-        * construction is rarely used, I think it's fine.
-        */
-       if (n->next && MDOC_In != n->next->tok)
-               term_vspace(p);
+       if (SEC_SYNOPSIS == n->sec && MDOC_LINE & n->flags) {
+               term_fontpop(p);
+               term_newln(p);
+       }
 }