]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_html.c
In mdoc(7), don't mistreat negative .sp arguments as large positive ones.
[mandoc.git] / man_html.c
index 78228d91912691fed0a6921f02d9ce018512c849..11094150258771648e647daae4017bf32a93665a 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: man_html.c,v 1.105 2014/12/01 08:05:52 schwarze Exp $ */
+/*     $Id: man_html.c,v 1.112 2015/03/03 21:11:34 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015 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
@@ -100,7 +100,6 @@ static      const struct htmlman mans[MAN_MAX] = {
        { man_I_pre, NULL }, /* I */
        { man_alt_pre, NULL }, /* IR */
        { man_alt_pre, NULL }, /* RI */
-       { man_ign_pre, NULL }, /* na */
        { man_br_pre, NULL }, /* sp */
        { man_literal_pre, NULL }, /* nf */
        { man_literal_pre, NULL }, /* fi */
@@ -193,9 +192,10 @@ static void
 print_man_nodelist(MAN_ARGS)
 {
 
-       print_man_node(man, n, mh, h);
-       if (n->next)
-               print_man_nodelist(man, n->next, mh, h);
+       while (n != NULL) {
+               print_man_node(man, n, mh, h);
+               n = n->next;
+       }
 }
 
 static void
@@ -212,24 +212,19 @@ print_man_node(MAN_ARGS)
                man_root_pre(man, n, mh, h);
                break;
        case MAN_TEXT:
-               /*
-                * If we have a blank line, output a vertical space.
-                * If we have a space as the first character, break
-                * before printing the line's data.
-                */
                if ('\0' == *n->string) {
                        print_paragraph(h);
                        return;
                }
-
-               if (' ' == *n->string && MAN_LINE & n->flags)
-                       print_otag(h, TAG_BR, 0, NULL);
-               else if (MANH_LITERAL & mh->fl && n->prev)
+               if (n->flags & MAN_LINE && (*n->string == ' ' ||
+                   (n->prev != NULL && mh->fl & MANH_LITERAL &&
+                    ! (h->flags & HTML_NONEWLINE))))
                        print_otag(h, TAG_BR, 0, NULL);
-
                print_text(h, n->string);
                return;
        case MAN_EQN:
+               if (n->flags & MAN_LINE)
+                       putchar('\n');
                print_eqn(h, n->eqn);
                break;
        case MAN_TBL:
@@ -289,7 +284,7 @@ a2width(const struct man_node *n, struct roffsu *su)
 
        if (MAN_TEXT != n->type)
                return(0);
-       if (a2roffsu(n->string, su, SCALE_BU))
+       if (a2roffsu(n->string, su, SCALE_EN))
                return(1);
 
        return(0);
@@ -369,7 +364,7 @@ man_br_pre(MAN_ARGS)
        if (MAN_sp == n->tok) {
                if (NULL != (n = n->child))
                        if ( ! a2roffsu(n->string, &su, SCALE_VS))
-                               SCALE_VS_INIT(&su, atoi(n->string));
+                               su.scale = 1.0;
        } else
                su.scale = 0.0;