]> git.cameronkatri.com Git - mandoc.git/commitdiff
Removed TERMP_BOLD, TERMP_UNDER, TERMP_STYLE in favour of recursive-friendly increments.
authorKristaps Dzonsons <kristaps@bsd.lv>
Tue, 15 Sep 2009 08:16:20 +0000 (08:16 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Tue, 15 Sep 2009 08:16:20 +0000 (08:16 +0000)
Cleaned up confusing behaviour of p->flags.

Makefile
man_term.c
mandoc.1
mdoc_term.c
term.c
term.h

index 844cd786eda4a2788b7c6d07361d564ec25b5981..db17bd2235ffad38f01ea8cc85ae114d85b63397 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -156,6 +156,9 @@ compat.o: compat.c
 term.ln: term.c term.h man.h mdoc.h
 term.o: term.c term.h man.h mdoc.h
 
+tree.ln: tree.c man.h mdoc.h
+tree.o: tree.c man.h mdoc.h
+
 mdoc_argv.ln: mdoc_argv.c libmdoc.h
 mdoc_argv.o: mdoc_argv.c libmdoc.h
 
index 3e10d34c1426030e714bb272d63a44863646806f..bf67ed1e3833fe6f73185cf368ec5a7d04570b54 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.29 2009/08/22 09:10:38 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.30 2009/09/15 08:16:20 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -18,7 +18,6 @@
 
 #include <assert.h>
 #include <ctype.h>
-#include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -130,11 +129,11 @@ extern    size_t            strlcpy(char *, const char *, size_t);
 extern size_t            strlcat(char *, const char *, size_t);
 #endif
 
-static void              print_head(struct termp *, 
+static int               print_head(struct termp *, 
                                const struct man_meta *);
 static void              print_body(DECL_ARGS);
 static void              print_node(DECL_ARGS);
-static void              print_foot(struct termp *, 
+static int               print_foot(struct termp *, 
                                const struct man_meta *);
 static void              fmt_block_vspace(struct termp *, 
                                const struct man_node *);
@@ -146,7 +145,8 @@ man_run(struct termp *p, const struct man *m)
 {
        struct mtermp    mt;
 
-       print_head(p, man_meta(m));
+       if ( ! print_head(p, man_meta(m)))
+               return(0);
        p->flags |= TERMP_NOSPACE;
        assert(man_node(m));
        assert(MAN_ROOT == man_node(m)->type);
@@ -157,7 +157,8 @@ man_run(struct termp *p, const struct man *m)
 
        if (man_node(m)->child)
                print_body(p, &mt, man_node(m)->child, man_meta(m));
-       print_foot(p, man_meta(m));
+       if ( ! print_foot(p, man_meta(m)))
+               return(0);
 
        return(1);
 }
@@ -222,7 +223,7 @@ static int
 pre_I(DECL_ARGS)
 {
 
-       p->flags |= TERMP_UNDER;
+       p->under++;
        return(1);
 }
 
@@ -232,8 +233,7 @@ static int
 pre_r(DECL_ARGS)
 {
 
-       p->flags &= ~TERMP_UNDER;
-       p->flags &= ~TERMP_BOLD;
+       p->bold = p->under = 0;
        return(1);
 }
 
@@ -244,7 +244,7 @@ post_i(DECL_ARGS)
 {
 
        if (n->nchild)
-               p->flags &= ~TERMP_UNDER;
+               p->under--;
 }
 
 
@@ -253,7 +253,7 @@ static void
 post_I(DECL_ARGS)
 {
 
-       p->flags &= ~TERMP_UNDER;
+       p->under--;
 }
 
 
@@ -287,12 +287,12 @@ pre_IR(DECL_ARGS)
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
                if ( ! (i % 2))
-                       p->flags |= TERMP_UNDER;
+                       p->under++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
                if ( ! (i % 2))
-                       p->flags &= ~TERMP_UNDER;
+                       p->under--;
        }
        return(0);
 }
@@ -306,11 +306,17 @@ pre_IB(DECL_ARGS)
        int              i;
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
-               p->flags |= i % 2 ? TERMP_BOLD : TERMP_UNDER;
+               if (i % 2)
+                       p->bold++;
+               else
+                       p->under++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
-               p->flags &= i % 2 ? ~TERMP_BOLD : ~TERMP_UNDER;
+               if (i % 2)
+                       p->bold--;
+               else
+                       p->under--;
        }
        return(0);
 }
@@ -325,12 +331,12 @@ pre_RB(DECL_ARGS)
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
                if (i % 2)
-                       p->flags |= TERMP_BOLD;
+                       p->bold++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
                if (i % 2)
-                       p->flags &= ~TERMP_BOLD;
+                       p->bold--;
        }
        return(0);
 }
@@ -345,12 +351,12 @@ pre_RI(DECL_ARGS)
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
                if ( ! (i % 2))
-                       p->flags |= TERMP_UNDER;
+                       p->under++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
                if ( ! (i % 2))
-                       p->flags &= ~TERMP_UNDER;
+                       p->under--;
        }
        return(0);
 }
@@ -365,12 +371,12 @@ pre_BR(DECL_ARGS)
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
                if ( ! (i % 2))
-                       p->flags |= TERMP_BOLD;
+                       p->bold++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
                if ( ! (i % 2))
-                       p->flags &= ~TERMP_BOLD;
+                       p->bold--;
        }
        return(0);
 }
@@ -384,11 +390,17 @@ pre_BI(DECL_ARGS)
        int              i;
 
        for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
-               p->flags |= i % 2 ? TERMP_UNDER : TERMP_BOLD;
+               if (i % 2)
+                       p->under++;
+               else
+                       p->bold++;
                if (i > 0)
                        p->flags |= TERMP_NOSPACE;
                print_node(p, mt, nn, m);
-               p->flags &= i % 2 ? ~TERMP_UNDER : ~TERMP_BOLD;
+               if (i % 2)
+                       p->under--;
+               else
+                       p->bold--;
        }
        return(0);
 }
@@ -399,7 +411,7 @@ static int
 pre_B(DECL_ARGS)
 {
 
-       p->flags |= TERMP_BOLD;
+       p->bold++;
        return(1);
 }
 
@@ -409,7 +421,7 @@ static void
 post_B(DECL_ARGS)
 {
 
-       p->flags &= ~TERMP_BOLD;
+       p->bold--;
 }
 
 
@@ -720,7 +732,7 @@ pre_SS(DECL_ARGS)
                term_vspace(p);
                break;
        case (MAN_HEAD):
-               p->flags |= TERMP_BOLD;
+               p->bold++;
                p->offset = HALFINDENT;
                break;
        case (MAN_BODY):
@@ -742,7 +754,7 @@ post_SS(DECL_ARGS)
        switch (n->type) {
        case (MAN_HEAD):
                term_newln(p);
-               p->flags &= ~TERMP_BOLD;
+               p->bold--;
                break;
        case (MAN_BODY):
                term_newln(p);
@@ -769,7 +781,7 @@ pre_SH(DECL_ARGS)
                term_vspace(p);
                break;
        case (MAN_HEAD):
-               p->flags |= TERMP_BOLD;
+               p->bold++;
                p->offset = 0;
                break;
        case (MAN_BODY):
@@ -791,7 +803,7 @@ post_SH(DECL_ARGS)
        switch (n->type) {
        case (MAN_HEAD):
                term_newln(p);
-               p->flags &= ~TERMP_BOLD;
+               p->bold--;
                break;
        case (MAN_BODY):
                term_newln(p);
@@ -908,19 +920,19 @@ print_body(DECL_ARGS)
 }
 
 
-static void
+static int
 print_foot(struct termp *p, const struct man_meta *meta)
 {
        struct tm       *tm;
        char            *buf;
 
        if (NULL == (buf = malloc(p->rmargin)))
-               err(1, "malloc");
+               return(0);
 
        tm = localtime(&meta->date);
 
        if (0 == strftime(buf, p->rmargin, "%B %d, %Y", tm))
-               err(1, "strftime");
+               buf[0] = 0;
 
        term_vspace(p);
 
@@ -943,10 +955,11 @@ print_foot(struct termp *p, const struct man_meta *meta)
        term_flushln(p);
 
        free(buf);
+       return(1);
 }
 
 
-static void
+static int
 print_head(struct termp *p, const struct man_meta *meta)
 {
        char            *buf, *title;
@@ -955,9 +968,9 @@ print_head(struct termp *p, const struct man_meta *meta)
        p->offset = 0;
 
        if (NULL == (buf = malloc(p->rmargin)))
-               err(1, "malloc");
+               return(0);
        if (NULL == (title = malloc(p->rmargin)))
-               err(1, "malloc");
+               return(0);
 
        if (meta->vol)
                (void)strlcpy(buf, meta->vol, p->rmargin);
@@ -995,5 +1008,6 @@ print_head(struct termp *p, const struct man_meta *meta)
 
        free(title);
        free(buf);
+       return(1);
 }
 
index 00951beeab44ae58f13c55fb48a387c21b8de6aa..9596d5edd2f87482d5fe630a476e33a23fbdfc83 100644 (file)
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\"    $Id: mandoc.1,v 1.35 2009/09/05 10:30:51 kristaps Exp $
+.\"    $Id: mandoc.1,v 1.36 2009/09/15 08:16:20 kristaps Exp $
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 .\"
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: September 5 2009 $
+.Dd $Mdocdate: September 15 2009 $
 .Dt MANDOC 1
 .Os
 .
@@ -275,7 +275,7 @@ Each input and output format is separately noted.
 .
 .
 .Ss ASCII output
-.Bl -bullet -compact
+.Bl -bullet -compact -width Ds
 .It
 The 
 .Sq \e~
index 2bd7cd2f3027be0ce252749125f34d51d398086a..d1ed5135f1548124109a4e51b0b4945aee806233 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.68 2009/08/20 13:22:48 kristaps Exp $ */
+/*     $Id: mdoc_term.c,v 1.69 2009/09/15 08:16:20 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
 #define        INDENT            5
 #define        HALFINDENT        3
 
-#define        TTYPE_PROG        0
-#define        TTYPE_CMD_FLAG    1
-#define        TTYPE_CMD_ARG     2
-#define        TTYPE_SECTION     3
-#define        TTYPE_FUNC_DECL   4
-#define        TTYPE_VAR_DECL    5
-#define        TTYPE_FUNC_TYPE   6
-#define        TTYPE_FUNC_NAME   7
-#define        TTYPE_FUNC_ARG    8
-#define        TTYPE_LINK        9
-#define        TTYPE_SSECTION    10
-#define        TTYPE_FILE        11
-#define        TTYPE_EMPH        12
-#define        TTYPE_CONFIG      13
-#define        TTYPE_CMD         14
-#define        TTYPE_INCLUDE     15
-#define        TTYPE_SYMB        16
-#define        TTYPE_SYMBOL      17
-#define        TTYPE_DIAG        18
-#define        TTYPE_LINK_ANCHOR 19
-#define        TTYPE_LINK_TEXT   20
-#define        TTYPE_REF_JOURNAL 21
-#define        TTYPE_REF_TITLE   22
-#define        TTYPE_LIST        23
-#define        TTYPE_NMAX        24
-
-const  int ttypes[TTYPE_NMAX] = {
-       TERMP_BOLD,             /* TTYPE_PROG */
-       TERMP_BOLD,             /* TTYPE_CMD_FLAG */
-       TERMP_UNDER,            /* TTYPE_CMD_ARG */
-       TERMP_BOLD,             /* TTYPE_SECTION */
-       TERMP_BOLD,             /* TTYPE_FUNC_DECL */
-       TERMP_UNDER,            /* TTYPE_VAR_DECL */
-       TERMP_UNDER,            /* TTYPE_FUNC_TYPE */
-       TERMP_BOLD,             /* TTYPE_FUNC_NAME */
-       TERMP_UNDER,            /* TTYPE_FUNC_ARG */
-       TERMP_UNDER,            /* TTYPE_LINK */
-       TERMP_BOLD,             /* TTYPE_SSECTION */
-       TERMP_UNDER,            /* TTYPE_FILE */
-       TERMP_UNDER,            /* TTYPE_EMPH */
-       TERMP_BOLD,             /* TTYPE_CONFIG */
-       TERMP_BOLD,             /* TTYPE_CMD */
-       TERMP_BOLD,             /* TTYPE_INCLUDE */
-       TERMP_BOLD,             /* TTYPE_SYMB */
-       TERMP_BOLD,             /* TTYPE_SYMBOL */
-       TERMP_BOLD,             /* TTYPE_DIAG */
-       TERMP_UNDER,            /* TTYPE_LINK_ANCHOR */
-       TERMP_BOLD,             /* TTYPE_LINK_TEXT */
-       TERMP_UNDER,            /* TTYPE_REF_JOURNAL */
-       TERMP_UNDER,            /* TTYPE_REF_TITLE */
-       TERMP_BOLD              /* TTYPE_LIST */
-};
-
 struct termpair {
        struct termpair  *ppair;
        int               flag; 
@@ -124,41 +71,32 @@ static     void      termp_sq_post(DECL_ARGS);
 static void      termp_ss_post(DECL_ARGS);
 static void      termp_vt_post(DECL_ARGS);
 
-static int       termp__j_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_aq_pre(DECL_ARGS);
-static int       termp_ar_pre(DECL_ARGS);
 static int       termp_bd_pre(DECL_ARGS);
 static int       termp_bf_pre(DECL_ARGS);
+static int       termp_bold_pre(DECL_ARGS);
 static int       termp_bq_pre(DECL_ARGS);
 static int       termp_br_pre(DECL_ARGS);
 static int       termp_brq_pre(DECL_ARGS);
 static int       termp_bt_pre(DECL_ARGS);
 static int       termp_cd_pre(DECL_ARGS);
-static int       termp_cm_pre(DECL_ARGS);
 static int       termp_d1_pre(DECL_ARGS);
 static int       termp_dq_pre(DECL_ARGS);
-static int       termp_em_pre(DECL_ARGS);
 static int       termp_ex_pre(DECL_ARGS);
 static int       termp_fa_pre(DECL_ARGS);
-static int       termp_fd_pre(DECL_ARGS);
 static int       termp_fl_pre(DECL_ARGS);
 static int       termp_fn_pre(DECL_ARGS);
 static int       termp_fo_pre(DECL_ARGS);
 static int       termp_ft_pre(DECL_ARGS);
-static int       termp_ic_pre(DECL_ARGS);
 static int       termp_in_pre(DECL_ARGS);
 static int       termp_it_pre(DECL_ARGS);
 static int       termp_lk_pre(DECL_ARGS);
-static int       termp_ms_pre(DECL_ARGS);
-static int       termp_mt_pre(DECL_ARGS);
 static int       termp_nd_pre(DECL_ARGS);
 static int       termp_nm_pre(DECL_ARGS);
 static int       termp_ns_pre(DECL_ARGS);
 static int       termp_op_pre(DECL_ARGS);
-static int       termp_pa_pre(DECL_ARGS);
 static int       termp_pf_pre(DECL_ARGS);
 static int       termp_pp_pre(DECL_ARGS);
 static int       termp_pq_pre(DECL_ARGS);
@@ -170,11 +108,8 @@ static     int       termp_sm_pre(DECL_ARGS);
 static int       termp_sp_pre(DECL_ARGS);
 static int       termp_sq_pre(DECL_ARGS);
 static int       termp_ss_pre(DECL_ARGS);
-static int       termp_sx_pre(DECL_ARGS);
-static int       termp_sy_pre(DECL_ARGS);
+static int       termp_under_pre(DECL_ARGS);
 static int       termp_ud_pre(DECL_ARGS);
-static int       termp_va_pre(DECL_ARGS);
-static int       termp_vt_pre(DECL_ARGS);
 static int       termp_xr_pre(DECL_ARGS);
 static int       termp_xx_pre(DECL_ARGS);
 
@@ -195,41 +130,41 @@ static const struct termact termacts[MDOC_MAX] = {
        { termp_it_pre, termp_it_post }, /* It */
        { NULL, NULL }, /* Ad */ 
        { termp_an_pre, termp_an_post }, /* An */
-       { termp_ar_pre, NULL }, /* Ar */
+       { termp_under_pre, NULL }, /* Ar */
        { termp_cd_pre, NULL }, /* Cd */
-       { termp_cm_pre, NULL }, /* Cm */
+       { termp_bold_pre, NULL }, /* Cm */
        { NULL, NULL }, /* Dv */ 
        { NULL, NULL }, /* Er */ 
        { NULL, NULL }, /* Ev */ 
        { termp_ex_pre, NULL }, /* Ex */
        { termp_fa_pre, NULL }, /* Fa */ 
-       { termp_fd_pre, termp_fd_post }, /* Fd */ 
+       { termp_bold_pre, termp_fd_post }, /* Fd */ 
        { termp_fl_pre, NULL }, /* Fl */
        { termp_fn_pre, termp_fn_post }, /* Fn */ 
        { termp_ft_pre, termp_ft_post }, /* Ft */ 
-       { termp_ic_pre, NULL }, /* Ic */ 
+       { termp_bold_pre, NULL }, /* Ic */ 
        { termp_in_pre, termp_in_post }, /* In */ 
        { NULL, NULL }, /* Li */
        { termp_nd_pre, NULL }, /* Nd */ 
        { termp_nm_pre, NULL }, /* Nm */ 
        { termp_op_pre, termp_op_post }, /* Op */
        { NULL, NULL }, /* Ot */
-       { termp_pa_pre, NULL }, /* Pa */
+       { termp_under_pre, NULL }, /* Pa */
        { termp_rv_pre, NULL }, /* Rv */
        { NULL, NULL }, /* St */ 
-       { termp_va_pre, NULL }, /* Va */
-       { termp_vt_pre, termp_vt_post }, /* Vt */ 
+       { termp_under_pre, NULL }, /* Va */
+       { termp_under_pre, termp_vt_post }, /* Vt */  /* FIXME: type name */
        { termp_xr_pre, NULL }, /* Xr */
        { NULL, termp____post }, /* %A */
        { NULL, termp____post }, /* %B */
        { NULL, termp____post }, /* %D */
        { NULL, termp____post }, /* %I */
-       { termp__j_pre, termp____post }, /* %J */
+       { termp_under_pre, termp____post }, /* %J */
        { NULL, termp____post }, /* %N */
        { NULL, termp____post }, /* %O */
        { NULL, termp____post }, /* %P */
        { NULL, termp____post }, /* %R */
-       { termp__t_pre, termp____post }, /* %T */
+       { termp_under_pre, termp____post }, /* %T */
        { NULL, termp____post }, /* %V */
        { NULL, NULL }, /* Ac */
        { termp_aq_pre, termp_aq_post }, /* Ao */
@@ -247,10 +182,10 @@ static const struct termact termacts[MDOC_MAX] = {
        { termp_dq_pre, termp_dq_post }, /* Dq */
        { NULL, NULL }, /* Ec */
        { NULL, NULL }, /* Ef */
-       { termp_em_pre, NULL }, /* Em */ 
+       { termp_under_pre, NULL }, /* Em */ 
        { NULL, NULL }, /* Eo */
        { termp_xx_pre, NULL }, /* Fx */
-       { termp_ms_pre, NULL }, /* Ms */
+       { termp_bold_pre, NULL }, /* Ms */
        { NULL, NULL }, /* No */
        { termp_ns_pre, NULL }, /* Ns */
        { termp_xx_pre, NULL }, /* Nx */
@@ -269,8 +204,8 @@ static const struct termact termacts[MDOC_MAX] = {
        { termp_sq_pre, termp_sq_post }, /* So */
        { termp_sq_pre, termp_sq_post }, /* Sq */
        { termp_sm_pre, NULL }, /* Sm */
-       { termp_sx_pre, NULL }, /* Sx */
-       { termp_sy_pre, NULL }, /* Sy */
+       { termp_under_pre, NULL }, /* Sx */
+       { termp_bold_pre, NULL }, /* Sy */
        { NULL, NULL }, /* Tn */
        { termp_xx_pre, NULL }, /* Ux */
        { NULL, NULL }, /* Xc */
@@ -288,7 +223,7 @@ static const struct termact termacts[MDOC_MAX] = {
        { NULL, termp_lb_post }, /* Lb */
        { termp_pp_pre, NULL }, /* Lp */ 
        { termp_lk_pre, NULL }, /* Lk */ 
-       { termp_mt_pre, NULL }, /* Mt */ 
+       { termp_under_pre, NULL }, /* Mt */ 
        { termp_brq_pre, termp_brq_post }, /* Brq */ 
        { termp_brq_pre, termp_brq_post }, /* Bro */ 
        { NULL, NULL }, /* Brc */ 
@@ -355,13 +290,15 @@ print_body(DECL_ARGS)
 static void
 print_node(DECL_ARGS)
 {
-       int              dochild;
+       int              dochild, bold, under;
        struct termpair  npair;
        size_t           offset, rmargin;
 
        dochild = 1;
        offset = p->offset;
        rmargin = p->rmargin;
+       bold = p->bold;
+       under = p->under;
 
        npair.ppair = pair;
        npair.flag = 0;
@@ -383,12 +320,11 @@ print_node(DECL_ARGS)
 
        /* Children. */
 
-       p->flags |= npair.flag;
-
        if (dochild && node->child)
                print_body(p, &npair, meta, node->child);
 
-       p->flags &= ~npair.flag;
+       p->bold = bold;
+       p->under = under;
 
        /* Post-processing. */
 
@@ -873,14 +809,10 @@ termp_it_pre(DECL_ARGS)
 
        p->flags |= TERMP_NOSPACE;
 
-       /*
-        * Style flags.  Diagnostic heads need TTYPE_DIAG.
-        */
-
        switch (type) {
        case (MDOC_Diag):
                if (MDOC_HEAD == node->type)
-                       p->flags |= ttypes[TTYPE_DIAG];
+                       p->bold++;
                break;
        default:
                break;
@@ -1018,16 +950,16 @@ termp_it_pre(DECL_ARGS)
        if (MDOC_HEAD == node->type)
                switch (type) {
                case (MDOC_Bullet):
-                       p->flags |= TERMP_BOLD;
+                       p->bold++;
                        term_word(p, "\\[bu]");
-                       p->flags &= ~TERMP_BOLD;
+                       p->bold--;
                        break;
                case (MDOC_Dash):
                        /* FALLTHROUGH */
                case (MDOC_Hyphen):
-                       p->flags |= TERMP_BOLD;
+                       p->bold++;
                        term_word(p, "\\(hy");
-                       p->flags &= ~TERMP_BOLD;
+                       p->bold--;
                        break;
                case (MDOC_Enum):
                        (pair->ppair->ppair->count)++;
@@ -1109,13 +1041,9 @@ termp_nm_pre(DECL_ARGS)
 
        if (SEC_SYNOPSIS == node->sec)
                term_newln(p);
-
-       pair->flag |= ttypes[TTYPE_PROG];
-       p->flags |= ttypes[TTYPE_PROG];
-
+       p->bold++;
        if (NULL == node->child)
                term_word(p, meta->name);
-
        return(1);
 }
 
@@ -1125,8 +1053,7 @@ static int
 termp_fl_pre(DECL_ARGS)
 {
 
-       pair->flag |= ttypes[TTYPE_CMD_FLAG];
-       p->flags |= ttypes[TTYPE_CMD_FLAG];
+       p->bold++;
        term_word(p, "\\-");
        p->flags |= TERMP_NOSPACE;
        return(1);
@@ -1192,16 +1119,6 @@ termp_an_post(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_ar_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_CMD_ARG];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_ns_pre(DECL_ARGS)
@@ -1245,9 +1162,9 @@ termp_rv_pre(DECL_ARGS)
        nn = node->child;
        assert(nn);
        for ( ; nn; nn = nn->next) {
-               p->flags |= ttypes[TTYPE_FUNC_NAME];
+               p->bold++;
                term_word(p, nn->string);
-               p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+               p->bold--;
                p->flags |= TERMP_NOSPACE;
                if (nn->next && NULL == nn->next->next)
                        term_word(p, "(), and");
@@ -1265,9 +1182,9 @@ termp_rv_pre(DECL_ARGS)
                term_word(p, "the value 0 if successful; otherwise the value "
                        "-1 is returned and the global variable");
 
-       p->flags |= ttypes[TTYPE_VAR_DECL];
+       p->under++;
        term_word(p, "errno");
-       p->flags &= ~ttypes[TTYPE_VAR_DECL];
+       p->under--;
 
                term_word(p, "is set to indicate the error.");
 
@@ -1286,9 +1203,9 @@ termp_ex_pre(DECL_ARGS)
        nn = node->child;
        assert(nn);
        for ( ; nn; nn = nn->next) {
-               p->flags |= ttypes[TTYPE_PROG];
+               p->bold++;
                term_word(p, nn->string);
-               p->flags &= ~ttypes[TTYPE_PROG];
+               p->bold--;
                p->flags |= TERMP_NOSPACE;
                if (nn->next && NULL == nn->next->next)
                        term_word(p, ", and");
@@ -1370,17 +1287,6 @@ termp_xr_pre(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_vt_pre(DECL_ARGS)
-{
-
-       /* FIXME: this can be "type name". */
-       pair->flag |= ttypes[TTYPE_VAR_DECL];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static void
 termp_vt_post(DECL_ARGS)
@@ -1397,10 +1303,10 @@ termp_vt_post(DECL_ARGS)
 
 /* ARGSUSED */
 static int
-termp_fd_pre(DECL_ARGS)
+termp_bold_pre(DECL_ARGS)
 {
 
-       pair->flag |= ttypes[TTYPE_FUNC_DECL];
+       p->bold++;
        return(1);
 }
 
@@ -1435,7 +1341,7 @@ termp_sh_pre(DECL_ARGS)
                term_vspace(p);
                break;
        case (MDOC_HEAD):
-               pair->flag |= ttypes[TTYPE_SECTION];
+               p->bold++;
                break;
        case (MDOC_BODY):
                p->offset = INDENT;
@@ -1569,7 +1475,7 @@ termp_ft_pre(DECL_ARGS)
        if (SEC_SYNOPSIS == node->sec)
                if (node->prev && MDOC_Fo == node->prev->tok)
                        term_vspace(p);
-       pair->flag |= ttypes[TTYPE_FUNC_TYPE];
+       p->under++;
        return(1);
 }
 
@@ -1594,17 +1500,17 @@ termp_fn_pre(DECL_ARGS)
 
        /* FIXME: can be "type funcname" "type varname"... */
 
-       p->flags |= ttypes[TTYPE_FUNC_NAME];
+       p->bold++;
        term_word(p, node->child->string);
-       p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+       p->bold--;
 
        p->flags |= TERMP_NOSPACE;
        term_word(p, "(");
 
        for (n = node->child->next; n; n = n->next) {
-               p->flags |= ttypes[TTYPE_FUNC_ARG];
+               p->under++;
                term_word(p, n->string);
-               p->flags &= ~ttypes[TTYPE_FUNC_ARG];
+               p->under--;
                if (n->next)
                        term_word(p, ",");
        }
@@ -1628,16 +1534,6 @@ termp_fn_post(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_sx_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_LINK];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_fa_pre(DECL_ARGS)
@@ -1645,14 +1541,14 @@ termp_fa_pre(DECL_ARGS)
        struct mdoc_node *n;
 
        if (node->parent->tok != MDOC_Fo) {
-               pair->flag |= ttypes[TTYPE_FUNC_ARG];
+               p->under++;
                return(1);
        }
 
        for (n = node->child; n; n = n->next) {
-               p->flags |= ttypes[TTYPE_FUNC_ARG];
+               p->under++;
                term_word(p, n->string);
-               p->flags &= ~ttypes[TTYPE_FUNC_ARG];
+               p->under--;
                if (n->next)
                        term_word(p, ",");
        }
@@ -1664,16 +1560,6 @@ termp_fa_pre(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_va_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_VAR_DECL];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_bd_pre(DECL_ARGS)
@@ -1851,16 +1737,6 @@ termp_sq_post(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_pa_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_FILE];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_pf_pre(DECL_ARGS)
@@ -1893,7 +1769,7 @@ termp_ss_pre(DECL_ARGS)
                        term_vspace(p);
                break;
        case (MDOC_HEAD):
-               pair->flag |= ttypes[TTYPE_SSECTION];
+               p->bold++;
                p->offset = HALFINDENT;
                break;
        default:
@@ -1914,55 +1790,23 @@ termp_ss_post(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp_em_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_EMPH];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_cd_pre(DECL_ARGS)
 {
 
-       pair->flag |= ttypes[TTYPE_CONFIG];
+       p->bold++;
        term_newln(p);
        return(1);
 }
 
 
-/* ARGSUSED */
-static int
-termp_cm_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_CMD_FLAG];
-       return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp_ic_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_CMD];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static int
 termp_in_pre(DECL_ARGS)
 {
 
-       pair->flag |= ttypes[TTYPE_INCLUDE];
-       p->flags |= ttypes[TTYPE_INCLUDE];
-
+       p->bold++;
        if (SEC_SYNOPSIS == node->sec)
                term_word(p, "#include");
 
@@ -1977,9 +1821,9 @@ static void
 termp_in_post(DECL_ARGS)
 {
 
-       p->flags |= TERMP_NOSPACE | ttypes[TTYPE_INCLUDE];
+       p->bold++;
        term_word(p, ">");
-       p->flags &= ~ttypes[TTYPE_INCLUDE];
+       p->bold--;
 
        if (SEC_SYNOPSIS != node->sec)
                return;
@@ -2115,12 +1959,12 @@ termp_fo_pre(DECL_ARGS)
        } else if (MDOC_HEAD != node->type) 
                return(1);
 
-       p->flags |= ttypes[TTYPE_FUNC_NAME];
+       p->bold++;
        for (n = node->child; n; n = n->next) {
                assert(MDOC_TEXT == n->type);
                term_word(p, n->string);
        }
-       p->flags &= ~ttypes[TTYPE_FUNC_NAME];
+       p->bold--;
 
        return(0);
 }
@@ -2154,44 +1998,23 @@ termp_bf_pre(DECL_ARGS)
 
        if (NULL == (n = node->head->child)) {
                if (arg_hasattr(MDOC_Emphasis, node))
-                       pair->flag |= ttypes[TTYPE_EMPH];
+                       p->under++;
                else if (arg_hasattr(MDOC_Symbolic, node))
-                       pair->flag |= ttypes[TTYPE_SYMB];
+                       p->bold++;
 
                return(1);
        } 
 
        assert(MDOC_TEXT == n->type);
        if (0 == strcmp("Em", n->string))
-               pair->flag |= ttypes[TTYPE_EMPH];
+               p->under++;
        else if (0 == strcmp("Sy", n->string))
-               pair->flag |= ttypes[TTYPE_SYMB];
-
-       return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp_sy_pre(DECL_ARGS)
-{
+               p->bold++;
 
-       pair->flag |= ttypes[TTYPE_SYMB];
        return(1);
 }
 
 
-/* ARGSUSED */
-static int
-termp_ms_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_SYMBOL];
-       return(1);
-}
-
-
-
 /* ARGSUSED */
 static int
 termp_sm_pre(DECL_ARGS)
@@ -2220,26 +2043,6 @@ termp_ap_pre(DECL_ARGS)
 }
 
 
-/* ARGSUSED */
-static int
-termp__j_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_REF_JOURNAL];
-       return(1);
-}
-
-
-/* ARGSUSED */
-static int
-termp__t_pre(DECL_ARGS)
-{
-
-       pair->flag |= ttypes[TTYPE_REF_TITLE];
-       return(1);
-}
-
-
 /* ARGSUSED */
 static void
 termp____post(DECL_ARGS)
@@ -2260,32 +2063,30 @@ termp_lk_pre(DECL_ARGS)
        n = node->child;
 
        if (NULL == n->next) {
-               pair->flag |= ttypes[TTYPE_LINK_ANCHOR];
+               p->under++;
                return(1);
        }
 
-       p->flags |= ttypes[TTYPE_LINK_ANCHOR];
+       p->under++;
        term_word(p, n->string);
        p->flags |= TERMP_NOSPACE;
        term_word(p, ":");
-       p->flags &= ~ttypes[TTYPE_LINK_ANCHOR];
+       p->under--;
 
-       p->flags |= ttypes[TTYPE_LINK_TEXT];
+       p->bold++;
        for (n = n->next; n; n = n->next) 
                term_word(p, n->string);
+       p->bold--;
 
-       p->flags &= ~ttypes[TTYPE_LINK_TEXT];
        return(0);
 }
 
 
 /* ARGSUSED */
 static int
-termp_mt_pre(DECL_ARGS)
+termp_under_pre(DECL_ARGS)
 {
 
-       pair->flag |= ttypes[TTYPE_LINK_ANCHOR];
+       p->under++;
        return(1);
 }
-
-
diff --git a/term.c b/term.c
index f8bc308da71de33a71f8dbb84d54696e6f440505..064409923b602169a734cae25beed91f229645c0 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/*     $Id: term.c,v 1.97 2009/07/28 10:15:12 kristaps Exp $ */
+/*     $Id: term.c,v 1.98 2009/09/15 08:16:20 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -104,7 +104,7 @@ term_alloc(enum termenc enc)
        struct termp *p;
 
        if (NULL == (p = malloc(sizeof(struct termp))))
-               err(1, "malloc");
+               return(NULL);
        bzero(p, sizeof(struct termp));
        p->maxrmargin = 78;
        p->enc = enc;
@@ -492,15 +492,15 @@ do_escaped(struct termp *p, const char **word)
 
                switch (*wp) {
                case ('B'):
-                       p->flags |= TERMP_BOLD;
+                       p->bold++;
                        break;
                case ('I'):
-                       p->flags |= TERMP_UNDER;
+                       p->under++;
                        break;
                case ('P'):
                        /* FALLTHROUGH */
                case ('R'):
-                       p->flags &= ~TERMP_STYLE;
+                       p->bold = p->under = 0;
                        break;
                default:
                        break;
@@ -579,7 +579,7 @@ buffer(struct termp *p, char c)
                s = p->maxcols * 2;
                p->buf = realloc(p->buf, s);
                if (NULL == p->buf)
-                       err(1, "realloc");
+                       err(1, "realloc"); /* FIXME: shouldn't be here! */
                p->maxcols = s;
        }
        p->buf[(int)(p->col)++] = c;
@@ -590,12 +590,12 @@ static void
 encode(struct termp *p, char c)
 {
        
-       if (' ' != c && TERMP_STYLE & p->flags) {
-               if (TERMP_BOLD & p->flags) {
+       if (' ' != c) {
+               if (p->bold) {
                        buffer(p, c);
                        buffer(p, 8);
                }
-               if (TERMP_UNDER & p->flags) {
+               if (p->under) {
                        buffer(p, '_');
                        buffer(p, 8);
                }
diff --git a/term.h b/term.h
index 6cc77daed9de168cafcff3cfe4394e7c8772888d..6b8e5e7c02dd6fa0f7019e3f8f199d7acdae0656 100644 (file)
--- a/term.h
+++ b/term.h
@@ -1,4 +1,4 @@
-/*     $Id: term.h,v 1.44 2009/08/10 10:09:51 kristaps Exp $ */
+/*     $Id: term.h,v 1.45 2009/09/15 08:16:20 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -32,9 +32,6 @@ struct        termp {
        size_t            offset;       /* Margin offest. */
        size_t            col;          /* Bytes in buf. */
        int               flags;
-#define        TERMP_STYLE       0x3           /* Style mask. */
-#define        TERMP_BOLD       (1 << 0)       /* Styles... */
-#define        TERMP_UNDER      (1 << 1)
 #define        TERMP_NOSPACE    (1 << 2)       /* No space before words. */
 #define        TERMP_NOLPAD     (1 << 3)       /* See term_flushln(). */
 #define        TERMP_NOBREAK    (1 << 4)       /* See term_flushln(). */
@@ -46,6 +43,8 @@ struct        termp {
 #define        TERMP_NOSPLIT    (1 << 11)      /* See termp_an_pre/post(). */
 #define        TERMP_SPLIT      (1 << 12)      /* See termp_an_pre/post(). */
 #define        TERMP_ANPREC     (1 << 13)      /* See termp_an_pre(). */
+       int               bold;
+       int               under;
        char             *buf;          /* Output buffer. */
        enum termenc      enc;          /* Type of encoding. */
        void             *symtab;       /* Encoded-symbol table. */