Print this page
9718 update mandoc to 1.14.4

@@ -1,9 +1,9 @@
-/*      $Id: man_html.c,v 1.145 2017/06/25 11:42:02 schwarze Exp $ */
+/*      $Id: man_html.c,v 1.153 2018/07/27 17:49:31 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013,2014,2015,2017,2018 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
  * copyright notice and this permission notice appear in all copies.
  *

@@ -33,12 +33,10 @@
 #include "html.h"
 #include "main.h"
 
 /* FIXME: have PD set the default vspace width. */
 
-#define INDENT            5
-
 #define MAN_ARGS          const struct roff_meta *man, \
                           const struct roff_node *n, \
                           struct html *h
 
 struct  htmlman {

@@ -46,16 +44,15 @@
         int             (*post)(MAN_ARGS);
 };
 
 static  void              print_bvspace(struct html *,
                                 const struct roff_node *);
-static  void              print_man_head(MAN_ARGS);
+static  void              print_man_head(const struct roff_meta *,
+                                struct html *);
 static  void              print_man_nodelist(MAN_ARGS);
 static  void              print_man_node(MAN_ARGS);
 static  int               fillmode(struct html *, int);
-static  int               a2width(const struct roff_node *,
-                                struct roffsu *);
 static  int               man_B_pre(MAN_ARGS);
 static  int               man_HP_pre(MAN_ARGS);
 static  int               man_IP_pre(MAN_ARGS);
 static  int               man_I_pre(MAN_ARGS);
 static  int               man_OP_pre(MAN_ARGS);

@@ -66,12 +63,14 @@
 static  int               man_SS_pre(MAN_ARGS);
 static  int               man_UR_pre(MAN_ARGS);
 static  int               man_alt_pre(MAN_ARGS);
 static  int               man_ign_pre(MAN_ARGS);
 static  int               man_in_pre(MAN_ARGS);
-static  void              man_root_post(MAN_ARGS);
-static  void              man_root_pre(MAN_ARGS);
+static  void              man_root_post(const struct roff_meta *,
+                                struct html *);
+static  void              man_root_pre(const struct roff_meta *,
+                                struct html *);
 
 static  const struct htmlman __mans[MAN_MAX - MAN_TH] = {
         { NULL, NULL }, /* TH */
         { man_SH_pre, NULL }, /* SH */
         { man_SS_pre, NULL }, /* SS */

@@ -137,33 +136,37 @@
 
 void
 html_man(void *arg, const struct roff_man *man)
 {
         struct html     *h;
+        struct roff_node        *n;
         struct tag      *t;
 
         h = (struct html *)arg;
+        n = man->first->child;
 
         if ((h->oflags & HTML_FRAGMENT) == 0) {
                 print_gen_decls(h);
                 print_otag(h, TAG_HTML, "");
+                if (n->type == ROFFT_COMMENT)
+                        print_gen_comment(h, n);
                 t = print_otag(h, TAG_HEAD, "");
-                print_man_head(&man->meta, man->first, h);
+                print_man_head(&man->meta, h);
                 print_tagq(h, t);
                 print_otag(h, TAG_BODY, "");
         }
 
-        man_root_pre(&man->meta, man->first, h);
+        man_root_pre(&man->meta, h);
         t = print_otag(h, TAG_DIV, "c", "manual-text");
-        print_man_nodelist(&man->meta, man->first->child, h);
+        print_man_nodelist(&man->meta, n, h);
         print_tagq(h, t);
-        man_root_post(&man->meta, man->first, h);
+        man_root_post(&man->meta, h);
         print_tagq(h, NULL);
 }
 
 static void
-print_man_head(MAN_ARGS)
+print_man_head(const struct roff_meta *man, struct html *h)
 {
         char    *cp;
 
         print_gen_head(h);
         mandoc_asprintf(&cp, "%s(%s)", man->title, man->msec);

@@ -260,10 +263,12 @@
                         print_otag(h, TAG_BR, "");
                 if (*n->string != '\0')
                         break;
                 print_paragraph(h);
                 return;
+        case ROFFT_COMMENT:
+                return;
         default:
                 break;
         }
 
         /* Produce output for this node. */

@@ -357,20 +362,12 @@
                         print_tagq(h, pre);
         }
         return had;
 }
 
-static int
-a2width(const struct roff_node *n, struct roffsu *su)
-{
-        if (n->type != ROFFT_TEXT)
-                return 0;
-        return a2roffsu(n->string, su, SCALE_EN) != NULL;
-}
-
 static void
-man_root_pre(MAN_ARGS)
+man_root_pre(const struct roff_meta *man, struct html *h)
 {
         struct tag      *t, *tt;
         char            *title;
 
         assert(man->title);

@@ -394,11 +391,11 @@
         print_tagq(h, t);
         free(title);
 }
 
 static void
-man_root_post(MAN_ARGS)
+man_root_post(const struct roff_meta *man, struct html *h)
 {
         struct tag      *t, *tt;
 
         t = print_otag(h, TAG_TABLE, "c", "foot");
         tt = print_otag(h, TAG_TR, "");

@@ -417,15 +414,14 @@
 man_SH_pre(MAN_ARGS)
 {
         char    *id;
 
         if (n->type == ROFFT_HEAD) {
-                id = html_make_id(n);
+                id = html_make_id(n, 1);
                 print_otag(h, TAG_H1, "cTi", "Sh", id);
                 if (id != NULL)
-                        print_otag(h, TAG_A, "chR", "selflink", id);
-                free(id);
+                        print_otag(h, TAG_A, "chR", "permalink", id);
         }
         return 1;
 }
 
 static int

@@ -487,15 +483,14 @@
 man_SS_pre(MAN_ARGS)
 {
         char    *id;
 
         if (n->type == ROFFT_HEAD) {
-                id = html_make_id(n);
+                id = html_make_id(n, 1);
                 print_otag(h, TAG_H2, "cTi", "Ss", id);
                 if (id != NULL)
-                        print_otag(h, TAG_A, "chR", "selflink", id);
-                free(id);
+                        print_otag(h, TAG_A, "chR", "permalink", id);
         }
         return 1;
 }
 
 static int

@@ -514,20 +509,20 @@
 man_IP_pre(MAN_ARGS)
 {
         const struct roff_node  *nn;
 
         if (n->type == ROFFT_BODY) {
-                print_otag(h, TAG_DD, "c", "It-tag");
+                print_otag(h, TAG_DD, "");
                 return 1;
         } else if (n->type != ROFFT_HEAD) {
                 print_otag(h, TAG_DL, "c", "Bl-tag");
                 return 1;
         }
 
         /* FIXME: width specification. */
 
-        print_otag(h, TAG_DT, "c", "It-tag");
+        print_otag(h, TAG_DT, "");
 
         /* For IP, only print the first header element. */
 
         if (MAN_IP == n->tok && n->child)
                 print_man_node(man, n->child, h);

@@ -548,28 +543,17 @@
 }
 
 static int
 man_HP_pre(MAN_ARGS)
 {
-        struct roffsu    sum, sui;
-        const struct roff_node *np;
-
         if (n->type == ROFFT_HEAD)
                 return 0;
-        else if (n->type != ROFFT_BLOCK)
-                return 1;
 
-        np = n->head->child;
-
-        if (np == NULL || !a2width(np, &sum))
-                SCALE_HS_INIT(&sum, INDENT);
-
-        sui.unit = sum.unit;
-        sui.scale = -sum.scale;
-
+        if (n->type == ROFFT_BLOCK) {
         print_bvspace(h, n);
-        print_otag(h, TAG_DIV, "csului", "Pp", &sum, &sui);
+                print_otag(h, TAG_DIV, "c", "HP");
+        }
         return 1;
 }
 
 static int
 man_OP_pre(MAN_ARGS)

@@ -627,23 +611,15 @@
 }
 
 static int
 man_RS_pre(MAN_ARGS)
 {
-        struct roffsu    su;
-
         if (n->type == ROFFT_HEAD)
                 return 0;
-        else if (n->type == ROFFT_BODY)
+        if (n->type == ROFFT_BLOCK)
+                print_otag(h, TAG_DIV, "c", "Bd-indent");
                 return 1;
-
-        SCALE_HS_INIT(&su, INDENT);
-        if (n->head->child)
-                a2width(n->head->child, &su);
-
-        print_otag(h, TAG_DIV, "sul", &su);
-        return 1;
 }
 
 static int
 man_UR_pre(MAN_ARGS)
 {