]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_html.c
Autodetect if -lrt is needed for nanosleep(3).
[mandoc.git] / mdoc_html.c
index eb2893980a1f977e660c3389298d8c6c6507a0e3..8e21bc79630db9731bc965ad9d6a8fa4df9a5908 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mdoc_html.c,v 1.236 2015/09/26 00:54:04 schwarze Exp $ */
+/*     $Id: mdoc_html.c,v 1.240 2016/01/08 17:48:09 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -299,13 +299,9 @@ synopsis_pre(struct html *h, const struct roff_node *n)
 
        switch (n->prev->tok) {
        case MDOC_Fd:
-               /* FALLTHROUGH */
        case MDOC_Fn:
-               /* FALLTHROUGH */
        case MDOC_Fo:
-               /* FALLTHROUGH */
        case MDOC_In:
-               /* FALLTHROUGH */
        case MDOC_Vt:
                print_paragraph(h);
                break;
@@ -524,7 +520,7 @@ mdoc_root_pre(MDOC_ARGS)
 
        free(title);
        free(volume);
-       return(1);
+       return 1;
 }
 
 static int
@@ -536,17 +532,16 @@ mdoc_sh_pre(MDOC_ARGS)
        case ROFFT_BLOCK:
                PAIR_CLASS_INIT(&tag, "section");
                print_otag(h, TAG_DIV, 1, &tag);
-               return(1);
+               return 1;
        case ROFFT_BODY:
                if (n->sec == SEC_AUTHORS)
                        h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT);
-               return(1);
+               return 1;
        default:
                break;
        }
 
        bufinit(h);
-       bufcat(h, "x");
 
        for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {
                bufcat_id(h, n->string);
@@ -560,7 +555,7 @@ mdoc_sh_pre(MDOC_ARGS)
        } else
                print_otag(h, TAG_H1, 0, NULL);
 
-       return(1);
+       return 1;
 }
 
 static int
@@ -571,12 +566,11 @@ mdoc_ss_pre(MDOC_ARGS)
        if (n->type == ROFFT_BLOCK) {
                PAIR_CLASS_INIT(&tag, "subsection");
                print_otag(h, TAG_DIV, 1, &tag);
-               return(1);
+               return 1;
        } else if (n->type == ROFFT_BODY)
-               return(1);
+               return 1;
 
        bufinit(h);
-       bufcat(h, "x");
 
        for (n = n->child; n != NULL && n->type == ROFFT_TEXT; ) {
                bufcat_id(h, n->string);
@@ -590,7 +584,7 @@ mdoc_ss_pre(MDOC_ARGS)
        } else
                print_otag(h, TAG_H2, 0, NULL);
 
-       return(1);
+       return 1;
 }
 
 static int
@@ -604,17 +598,17 @@ mdoc_fl_pre(MDOC_ARGS)
        /* `Cm' has no leading hyphen. */
 
        if (MDOC_Cm == n->tok)
-               return(1);
+               return 1;
 
        print_text(h, "\\-");
 
-       if ( ! (n->nchild == 0 &&
+       if (!(n->child == NULL &&
            (n->next == NULL ||
             n->next->type == ROFFT_TEXT ||
             n->next->flags & MDOC_LINE)))
                h->flags |= HTML_NOSPACE;
 
-       return(1);
+       return 1;
 }
 
 static int
@@ -623,14 +617,14 @@ mdoc_nd_pre(MDOC_ARGS)
        struct htmlpair  tag;
 
        if (n->type != ROFFT_BODY)
-               return(1);
+               return 1;
 
        /* XXX: this tag in theory can contain block elements. */
 
        print_text(h, "\\(em");
        PAIR_CLASS_INIT(&tag, "desc");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -649,10 +643,10 @@ mdoc_nm_pre(MDOC_ARGS)
                print_otag(h, TAG_B, 1, &tag);
                if (n->child == NULL && meta->name != NULL)
                        print_text(h, meta->name);
-               return(1);
+               return 1;
        case ROFFT_BODY:
                print_otag(h, TAG_TD, 0, NULL);
-               return(1);
+               return 1;
        default:
                break;
        }
@@ -676,7 +670,7 @@ mdoc_nm_pre(MDOC_ARGS)
        print_otag(h, TAG_COL, 0, NULL);
        print_otag(h, TAG_TBODY, 0, NULL);
        print_otag(h, TAG_TR, 0, NULL);
-       return(1);
+       return 1;
 }
 
 static int
@@ -685,7 +679,7 @@ mdoc_xr_pre(MDOC_ARGS)
        struct htmlpair  tag[2];
 
        if (NULL == n->child)
-               return(0);
+               return 0;
 
        PAIR_CLASS_INIT(&tag[0], "link-man");
 
@@ -702,7 +696,7 @@ mdoc_xr_pre(MDOC_ARGS)
        print_text(h, n->string);
 
        if (NULL == (n = n->next))
-               return(0);
+               return 0;
 
        h->flags |= HTML_NOSPACE;
        print_text(h, "(");
@@ -710,7 +704,7 @@ mdoc_xr_pre(MDOC_ARGS)
        print_text(h, n->string);
        h->flags |= HTML_NOSPACE;
        print_text(h, ")");
-       return(0);
+       return 0;
 }
 
 static int
@@ -719,7 +713,7 @@ mdoc_ns_pre(MDOC_ARGS)
 
        if ( ! (MDOC_LINE & n->flags))
                h->flags |= HTML_NOSPACE;
-       return(1);
+       return 1;
 }
 
 static int
@@ -729,7 +723,7 @@ mdoc_ar_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "arg");
        print_otag(h, TAG_I, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -759,7 +753,7 @@ mdoc_xx_pre(MDOC_ARGS)
                pp = "UNIX";
                break;
        default:
-               return(1);
+               return 1;
        }
 
        PAIR_CLASS_INIT(&tag, "unix");
@@ -772,7 +766,7 @@ mdoc_xx_pre(MDOC_ARGS)
                print_text(h, n->child->string);
                h->flags = flags;
        }
-       return(0);
+       return 0;
 }
 
 static int
@@ -789,7 +783,7 @@ mdoc_bx_pre(MDOC_ARGS)
                print_text(h, "BSD");
        } else {
                print_text(h, "BSD");
-               return(0);
+               return 0;
        }
 
        if (NULL != (n = n->next)) {
@@ -799,7 +793,7 @@ mdoc_bx_pre(MDOC_ARGS)
                print_text(h, n->string);
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -826,23 +820,15 @@ mdoc_it_pre(MDOC_ARGS)
        if (n->type == ROFFT_HEAD) {
                switch (type) {
                case LIST_bullet:
-                       /* FALLTHROUGH */
                case LIST_dash:
-                       /* FALLTHROUGH */
                case LIST_item:
-                       /* FALLTHROUGH */
                case LIST_hyphen:
-                       /* FALLTHROUGH */
                case LIST_enum:
-                       return(0);
+                       return 0;
                case LIST_diag:
-                       /* FALLTHROUGH */
                case LIST_hang:
-                       /* FALLTHROUGH */
                case LIST_inset:
-                       /* FALLTHROUGH */
                case LIST_ohang:
-                       /* FALLTHROUGH */
                case LIST_tag:
                        SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);
                        bufcat_su(h, "margin-top", &su);
@@ -861,13 +847,9 @@ mdoc_it_pre(MDOC_ARGS)
        } else if (n->type == ROFFT_BODY) {
                switch (type) {
                case LIST_bullet:
-                       /* FALLTHROUGH */
                case LIST_hyphen:
-                       /* FALLTHROUGH */
                case LIST_dash:
-                       /* FALLTHROUGH */
                case LIST_enum:
-                       /* FALLTHROUGH */
                case LIST_item:
                        SCALE_VS_INIT(&su, ! bl->norm->Bl.comp);
                        bufcat_su(h, "margin-top", &su);
@@ -875,13 +857,9 @@ mdoc_it_pre(MDOC_ARGS)
                        print_otag(h, TAG_LI, 2, tag);
                        break;
                case LIST_diag:
-                       /* FALLTHROUGH */
                case LIST_hang:
-                       /* FALLTHROUGH */
                case LIST_inset:
-                       /* FALLTHROUGH */
                case LIST_ohang:
-                       /* FALLTHROUGH */
                case LIST_tag:
                        if (NULL == bl->norm->Bl.width) {
                                print_otag(h, TAG_DD, 1, tag);
@@ -911,7 +889,7 @@ mdoc_it_pre(MDOC_ARGS)
                }
        }
 
-       return(1);
+       return 1;
 }
 
 static int
@@ -925,12 +903,12 @@ mdoc_bl_pre(MDOC_ARGS)
        if (n->type == ROFFT_BODY) {
                if (LIST_column == n->norm->Bl.type)
                        print_otag(h, TAG_TBODY, 0, NULL);
-               return(1);
+               return 1;
        }
 
        if (n->type == ROFFT_HEAD) {
                if (LIST_column != n->norm->Bl.type)
-                       return(0);
+                       return 0;
 
                /*
                 * For each column, print out the <COL> tag with our
@@ -950,7 +928,7 @@ mdoc_bl_pre(MDOC_ARGS)
                        print_otag(h, TAG_COL, 1, tag);
                }
 
-               return(0);
+               return 0;
        }
 
        SCALE_VS_INIT(&su, 0);
@@ -973,11 +951,8 @@ mdoc_bl_pre(MDOC_ARGS)
 
        switch (n->norm->Bl.type) {
        case LIST_bullet:
-               /* FALLTHROUGH */
        case LIST_dash:
-               /* FALLTHROUGH */
        case LIST_hyphen:
-               /* FALLTHROUGH */
        case LIST_item:
                print_otag(h, TAG_UL, 2, tag);
                break;
@@ -985,13 +960,9 @@ mdoc_bl_pre(MDOC_ARGS)
                print_otag(h, TAG_OL, 2, tag);
                break;
        case LIST_diag:
-               /* FALLTHROUGH */
        case LIST_hang:
-               /* FALLTHROUGH */
        case LIST_inset:
-               /* FALLTHROUGH */
        case LIST_ohang:
-               /* FALLTHROUGH */
        case LIST_tag:
                print_otag(h, TAG_DL, 2, tag);
                break;
@@ -1002,15 +973,15 @@ mdoc_bl_pre(MDOC_ARGS)
                abort();
        }
 
-       return(1);
+       return 1;
 }
 
 static int
 mdoc_ex_pre(MDOC_ARGS)
 {
-       struct tag      *t;
-       struct htmlpair  tag;
-       int              nchild;
+       struct htmlpair   tag;
+       struct tag       *t;
+       struct roff_node *nch;
 
        if (n->prev)
                print_otag(h, TAG_BR, 0, NULL);
@@ -1019,30 +990,32 @@ mdoc_ex_pre(MDOC_ARGS)
 
        print_text(h, "The");
 
-       nchild = n->nchild;
-       for (n = n->child; n; n = n->next) {
-               assert(n->type == ROFFT_TEXT);
+       for (nch = n->child; nch != NULL; nch = nch->next) {
+               assert(nch->type == ROFFT_TEXT);
 
                t = print_otag(h, TAG_B, 1, &tag);
-               print_text(h, n->string);
+               print_text(h, nch->string);
                print_tagq(h, t);
 
-               if (nchild > 2 && n->next) {
+               if (nch->next == NULL)
+                       continue;
+
+               if (nch->prev != NULL || nch->next->next != NULL) {
                        h->flags |= HTML_NOSPACE;
                        print_text(h, ",");
                }
 
-               if (n->next && NULL == n->next->next)
+               if (nch->next->next == NULL)
                        print_text(h, "and");
        }
 
-       if (nchild > 1)
+       if (n->child != NULL && n->child->next != NULL)
                print_text(h, "utilities exit\\~0");
        else
                print_text(h, "utility exits\\~0");
 
        print_text(h, "on success, and\\~>0 if an error occurs.");
-       return(0);
+       return 0;
 }
 
 static int
@@ -1052,7 +1025,7 @@ mdoc_em_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "emph");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1062,7 +1035,7 @@ mdoc_d1_pre(MDOC_ARGS)
        struct roffsu    su;
 
        if (n->type != ROFFT_BLOCK)
-               return(1);
+               return 1;
 
        SCALE_VS_INIT(&su, 0);
        bufinit(h);
@@ -1081,7 +1054,7 @@ mdoc_d1_pre(MDOC_ARGS)
                print_otag(h, TAG_CODE, 1, tag);
        }
 
-       return(1);
+       return 1;
 }
 
 static int
@@ -1090,7 +1063,7 @@ mdoc_sx_pre(MDOC_ARGS)
        struct htmlpair  tag[2];
 
        bufinit(h);
-       bufcat(h, "#x");
+       bufcat(h, "#");
 
        for (n = n->child; n; ) {
                bufcat_id(h, n->string);
@@ -1103,7 +1076,7 @@ mdoc_sx_pre(MDOC_ARGS)
 
        print_otag(h, TAG_I, 1, tag);
        print_otag(h, TAG_A, 2, tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1115,7 +1088,7 @@ mdoc_bd_pre(MDOC_ARGS)
        struct roffsu            su;
 
        if (n->type == ROFFT_HEAD)
-               return(0);
+               return 0;
 
        if (n->type == ROFFT_BLOCK) {
                comp = n->norm->Bd.comp;
@@ -1129,7 +1102,7 @@ mdoc_bd_pre(MDOC_ARGS)
                }
                if ( ! comp)
                        print_paragraph(h);
-               return(1);
+               return 1;
        }
 
        /* Handle the -offset argument. */
@@ -1152,7 +1125,7 @@ mdoc_bd_pre(MDOC_ARGS)
            DISP_literal != n->norm->Bd.type) {
                PAIR_CLASS_INIT(&tag[1], "display");
                print_otag(h, TAG_DIV, 2, tag);
-               return(1);
+               return 1;
        }
 
        PAIR_CLASS_INIT(&tag[1], "lit display");
@@ -1173,19 +1146,12 @@ mdoc_bd_pre(MDOC_ARGS)
                 */
                switch (nn->tok) {
                case MDOC_Sm:
-                       /* FALLTHROUGH */
                case MDOC_br:
-                       /* FALLTHROUGH */
                case MDOC_sp:
-                       /* FALLTHROUGH */
                case MDOC_Bl:
-                       /* FALLTHROUGH */
                case MDOC_D1:
-                       /* FALLTHROUGH */
                case MDOC_Dl:
-                       /* FALLTHROUGH */
                case MDOC_Lp:
-                       /* FALLTHROUGH */
                case MDOC_Pp:
                        continue;
                default:
@@ -1203,7 +1169,7 @@ mdoc_bd_pre(MDOC_ARGS)
        if (0 == sv)
                h->flags &= ~HTML_LITERAL;
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1213,7 +1179,7 @@ mdoc_pa_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "file");
        print_otag(h, TAG_I, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1223,7 +1189,7 @@ mdoc_ad_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "addr");
        print_otag(h, TAG_I, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1234,12 +1200,12 @@ mdoc_an_pre(MDOC_ARGS)
        if (n->norm->An.auth == AUTH_split) {
                h->flags &= ~HTML_NOSPLIT;
                h->flags |= HTML_SPLIT;
-               return(0);
+               return 0;
        }
        if (n->norm->An.auth == AUTH_nosplit) {
                h->flags &= ~HTML_SPLIT;
                h->flags |= HTML_NOSPLIT;
-               return(0);
+               return 0;
        }
 
        if (h->flags & HTML_SPLIT)
@@ -1250,7 +1216,7 @@ mdoc_an_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "author");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1261,7 +1227,7 @@ mdoc_cd_pre(MDOC_ARGS)
        synopsis_pre(h, n);
        PAIR_CLASS_INIT(&tag, "config");
        print_otag(h, TAG_B, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1271,7 +1237,7 @@ mdoc_dv_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "define");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1281,7 +1247,7 @@ mdoc_ev_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "env");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1291,7 +1257,7 @@ mdoc_er_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "errno");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1304,7 +1270,7 @@ mdoc_fa_pre(MDOC_ARGS)
        PAIR_CLASS_INIT(&tag, "farg");
        if (n->parent->tok != MDOC_Fo) {
                print_otag(h, TAG_I, 1, &tag);
-               return(1);
+               return 1;
        }
 
        for (nn = n->child; nn; nn = nn->next) {
@@ -1322,7 +1288,7 @@ mdoc_fa_pre(MDOC_ARGS)
                print_text(h, ",");
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1337,14 +1303,14 @@ mdoc_fd_pre(MDOC_ARGS)
        synopsis_pre(h, n);
 
        if (NULL == (n = n->child))
-               return(0);
+               return 0;
 
        assert(n->type == ROFFT_TEXT);
 
        if (strcmp(n->string, "#include")) {
                PAIR_CLASS_INIT(&tag[0], "macro");
                print_otag(h, TAG_B, 1, tag);
-               return(1);
+               return 1;
        }
 
        PAIR_CLASS_INIT(&tag[0], "includes");
@@ -1390,7 +1356,7 @@ mdoc_fd_pre(MDOC_ARGS)
                print_text(h, n->string);
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1400,15 +1366,15 @@ mdoc_vt_pre(MDOC_ARGS)
 
        if (n->type == ROFFT_BLOCK) {
                synopsis_pre(h, n);
-               return(1);
+               return 1;
        } else if (n->type == ROFFT_ELEM) {
                synopsis_pre(h, n);
        } else if (n->type == ROFFT_HEAD)
-               return(0);
+               return 0;
 
        PAIR_CLASS_INIT(&tag, "type");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1419,7 +1385,7 @@ mdoc_ft_pre(MDOC_ARGS)
        synopsis_pre(h, n);
        PAIR_CLASS_INIT(&tag, "ftype");
        print_otag(h, TAG_I, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1509,7 +1475,7 @@ mdoc_fn_pre(MDOC_ARGS)
                print_text(h, ";");
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1526,14 +1492,14 @@ mdoc_sm_pre(MDOC_ARGS)
        if ( ! (HTML_NONOSPACE & h->flags))
                h->flags &= ~HTML_NOSPACE;
 
-       return(0);
+       return 0;
 }
 
 static int
 mdoc_skip_pre(MDOC_ARGS)
 {
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1541,7 +1507,7 @@ mdoc_pp_pre(MDOC_ARGS)
 {
 
        print_paragraph(h);
-       return(0);
+       return 0;
 }
 
 static int
@@ -1570,7 +1536,7 @@ mdoc_sp_pre(MDOC_ARGS)
        /* So the div isn't empty: */
        print_text(h, "\\~");
 
-       return(0);
+       return 0;
 
 }
 
@@ -1580,7 +1546,7 @@ mdoc_lk_pre(MDOC_ARGS)
        struct htmlpair  tag[2];
 
        if (NULL == (n = n->child))
-               return(0);
+               return 0;
 
        assert(n->type == ROFFT_TEXT);
 
@@ -1595,7 +1561,7 @@ mdoc_lk_pre(MDOC_ARGS)
        for (n = n->next; n; n = n->next)
                print_text(h, n->string);
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1619,7 +1585,7 @@ mdoc_mt_pre(MDOC_ARGS)
                print_tagq(h, t);
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1632,21 +1598,21 @@ mdoc_fo_pre(MDOC_ARGS)
                h->flags |= HTML_NOSPACE;
                print_text(h, "(");
                h->flags |= HTML_NOSPACE;
-               return(1);
+               return 1;
        } else if (n->type == ROFFT_BLOCK) {
                synopsis_pre(h, n);
-               return(1);
+               return 1;
        }
 
        if (n->child == NULL)
-               return(0);
+               return 0;
 
        assert(n->child->string);
        PAIR_CLASS_INIT(&tag, "fname");
        t = print_otag(h, TAG_B, 1, &tag);
        print_text(h, n->child->string);
        print_tagq(h, t);
-       return(0);
+       return 0;
 }
 
 static void
@@ -1713,7 +1679,7 @@ mdoc_in_pre(MDOC_ARGS)
                print_text(h, n->string);
        }
 
-       return(0);
+       return 0;
 }
 
 static int
@@ -1723,7 +1689,7 @@ mdoc_ic_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "cmd");
        print_otag(h, TAG_B, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1731,37 +1697,36 @@ mdoc_rv_pre(MDOC_ARGS)
 {
        struct htmlpair  tag;
        struct tag      *t;
-       int              nchild;
+       struct roff_node *nch;
 
        if (n->prev)
                print_otag(h, TAG_BR, 0, NULL);
 
        PAIR_CLASS_INIT(&tag, "fname");
 
-       nchild = n->nchild;
-       if (nchild > 0) {
+       if (n->child != NULL) {
                print_text(h, "The");
 
-               for (n = n->child; n; n = n->next) {
+               for (nch = n->child; nch != NULL; nch = nch->next) {
                        t = print_otag(h, TAG_B, 1, &tag);
-                       print_text(h, n->string);
+                       print_text(h, nch->string);
                        print_tagq(h, t);
 
                        h->flags |= HTML_NOSPACE;
                        print_text(h, "()");
 
-                       if (n->next == NULL)
+                       if (nch->next == NULL)
                                continue;
 
-                       if (nchild > 2) {
+                       if (nch->prev != NULL || nch->next->next != NULL) {
                                h->flags |= HTML_NOSPACE;
                                print_text(h, ",");
                        }
-                       if (n->next->next == NULL)
+                       if (nch->next->next == NULL)
                                print_text(h, "and");
                }
 
-               if (nchild > 1)
+               if (n->child != NULL && n->child->next != NULL)
                        print_text(h, "functions return");
                else
                        print_text(h, "function returns");
@@ -1779,7 +1744,7 @@ mdoc_rv_pre(MDOC_ARGS)
        print_text(h, "errno");
        print_tagq(h, t);
        print_text(h, "is set to indicate the error.");
-       return(0);
+       return 0;
 }
 
 static int
@@ -1789,7 +1754,7 @@ mdoc_va_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "var");
        print_otag(h, TAG_B, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1799,7 +1764,7 @@ mdoc_ap_pre(MDOC_ARGS)
        h->flags |= HTML_NOSPACE;
        print_text(h, "\\(aq");
        h->flags |= HTML_NOSPACE;
-       return(1);
+       return 1;
 }
 
 static int
@@ -1809,9 +1774,9 @@ mdoc_bf_pre(MDOC_ARGS)
        struct roffsu    su;
 
        if (n->type == ROFFT_HEAD)
-               return(0);
+               return 0;
        else if (n->type != ROFFT_BODY)
-               return(1);
+               return 1;
 
        if (FONT_Em == n->norm->Bf.font)
                PAIR_CLASS_INIT(&tag[0], "emph");
@@ -1833,7 +1798,7 @@ mdoc_bf_pre(MDOC_ARGS)
        bufcat_su(h, "margin-left", &su);
        PAIR_STYLE_INIT(&tag[1], h);
        print_otag(h, TAG_DIV, 2, tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1843,7 +1808,7 @@ mdoc_ms_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "symb");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1851,7 +1816,7 @@ mdoc_igndelim_pre(MDOC_ARGS)
 {
 
        h->flags |= HTML_IGNDELIM;
-       return(1);
+       return 1;
 }
 
 static void
@@ -1868,14 +1833,14 @@ mdoc_rs_pre(MDOC_ARGS)
        struct htmlpair  tag;
 
        if (n->type != ROFFT_BLOCK)
-               return(1);
+               return 1;
 
        if (n->prev && SEC_SEE_ALSO == n->sec)
                print_paragraph(h);
 
        PAIR_CLASS_INIT(&tag, "ref");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1885,7 +1850,7 @@ mdoc_no_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "none");
        print_otag(h, TAG_CODE, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1895,7 +1860,7 @@ mdoc_li_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "lit");
        print_otag(h, TAG_CODE, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1905,7 +1870,7 @@ mdoc_sy_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "symb");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -1913,7 +1878,7 @@ mdoc_bt_pre(MDOC_ARGS)
 {
 
        print_text(h, "is currently in beta test.");
-       return(0);
+       return 0;
 }
 
 static int
@@ -1921,7 +1886,7 @@ mdoc_ud_pre(MDOC_ARGS)
 {
 
        print_text(h, "currently under development.");
-       return(0);
+       return 0;
 }
 
 static int
@@ -1934,7 +1899,7 @@ mdoc_lb_pre(MDOC_ARGS)
 
        PAIR_CLASS_INIT(&tag, "lib");
        print_otag(h, TAG_SPAN, 1, &tag);
-       return(1);
+       return 1;
 }
 
 static int
@@ -2000,13 +1965,13 @@ mdoc__x_pre(MDOC_ARGS)
 
        if (MDOC__U != n->tok) {
                print_otag(h, t, 1, tag);
-               return(1);
+               return 1;
        }
 
        PAIR_HREF_INIT(&tag[1], n->child->string);
        print_otag(h, TAG_A, 2, tag);
 
-       return(1);
+       return 1;
 }
 
 static void
@@ -2035,16 +2000,16 @@ mdoc_bk_pre(MDOC_ARGS)
        case ROFFT_BLOCK:
                break;
        case ROFFT_HEAD:
-               return(0);
+               return 0;
        case ROFFT_BODY:
-               if (n->parent->args || 0 == n->prev->nchild)
+               if (n->parent->args != NULL || n->prev->child == NULL)
                        h->flags |= HTML_PREKEEP;
                break;
        default:
                abort();
        }
 
-       return(1);
+       return 1;
 }
 
 static void
@@ -2061,27 +2026,23 @@ mdoc_quote_pre(MDOC_ARGS)
        struct htmlpair tag;
 
        if (n->type != ROFFT_BODY)
-               return(1);
+               return 1;
 
        switch (n->tok) {
        case MDOC_Ao:
-               /* FALLTHROUGH */
        case MDOC_Aq:
-               print_text(h, n->nchild == 1 &&
+               print_text(h, n->child != NULL && n->child->next == NULL &&
                    n->child->tok == MDOC_Mt ?  "<" : "\\(la");
                break;
        case MDOC_Bro:
-               /* FALLTHROUGH */
        case MDOC_Brq:
                print_text(h, "\\(lC");
                break;
        case MDOC_Bo:
-               /* FALLTHROUGH */
        case MDOC_Bq:
                print_text(h, "\\(lB");
                break;
        case MDOC_Oo:
-               /* FALLTHROUGH */
        case MDOC_Op:
                print_text(h, "\\(lB");
                h->flags |= HTML_NOSPACE;
@@ -2091,20 +2052,16 @@ mdoc_quote_pre(MDOC_ARGS)
        case MDOC_En:
                if (NULL == n->norm->Es ||
                    NULL == n->norm->Es->child)
-                       return(1);
+                       return 1;
                print_text(h, n->norm->Es->child->string);
                break;
        case MDOC_Do:
-               /* FALLTHROUGH */
        case MDOC_Dq:
-               /* FALLTHROUGH */
        case MDOC_Qo:
-               /* FALLTHROUGH */
        case MDOC_Qq:
                print_text(h, "\\(lq");
                break;
        case MDOC_Po:
-               /* FALLTHROUGH */
        case MDOC_Pq:
                print_text(h, "(");
                break;
@@ -2115,7 +2072,6 @@ mdoc_quote_pre(MDOC_ARGS)
                print_otag(h, TAG_CODE, 1, &tag);
                break;
        case MDOC_So:
-               /* FALLTHROUGH */
        case MDOC_Sq:
                print_text(h, "\\(oq");
                break;
@@ -2124,7 +2080,7 @@ mdoc_quote_pre(MDOC_ARGS)
        }
 
        h->flags |= HTML_NOSPACE;
-       return(1);
+       return 1;
 }
 
 static void
@@ -2138,22 +2094,17 @@ mdoc_quote_post(MDOC_ARGS)
 
        switch (n->tok) {
        case MDOC_Ao:
-               /* FALLTHROUGH */
        case MDOC_Aq:
-               print_text(h, n->nchild == 1 &&
+               print_text(h, n->child != NULL && n->child->next == NULL &&
                    n->child->tok == MDOC_Mt ?  ">" : "\\(ra");
                break;
        case MDOC_Bro:
-               /* FALLTHROUGH */
        case MDOC_Brq:
                print_text(h, "\\(rC");
                break;
        case MDOC_Oo:
-               /* FALLTHROUGH */
        case MDOC_Op:
-               /* FALLTHROUGH */
        case MDOC_Bo:
-               /* FALLTHROUGH */
        case MDOC_Bq:
                print_text(h, "\\(rB");
                break;
@@ -2166,23 +2117,17 @@ mdoc_quote_post(MDOC_ARGS)
                        print_text(h, n->norm->Es->child->next->string);
                break;
        case MDOC_Qo:
-               /* FALLTHROUGH */
        case MDOC_Qq:
-               /* FALLTHROUGH */
        case MDOC_Do:
-               /* FALLTHROUGH */
        case MDOC_Dq:
                print_text(h, "\\(rq");
                break;
        case MDOC_Po:
-               /* FALLTHROUGH */
        case MDOC_Pq:
                print_text(h, ")");
                break;
        case MDOC_Ql:
-               /* FALLTHROUGH */
        case MDOC_So:
-               /* FALLTHROUGH */
        case MDOC_Sq:
                print_text(h, "\\(cq");
                break;
@@ -2196,7 +2141,7 @@ mdoc_eo_pre(MDOC_ARGS)
 {
 
        if (n->type != ROFFT_BODY)
-               return(1);
+               return 1;
 
        if (n->end == ENDBODY_NOT &&
            n->parent->head->child == NULL &&
@@ -2207,7 +2152,7 @@ mdoc_eo_pre(MDOC_ARGS)
            n->parent->head->child != NULL && (n->child != NULL ||
            (n->parent->tail != NULL && n->parent->tail->child != NULL)))
                h->flags |= HTML_NOSPACE;
-       return(1);
+       return 1;
 }
 
 static void