discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: Michael Stapelberg <stapelberg@debian.org>
To: discuss@mandoc.bsd.lv
Subject: Re: In HTML output literal blocks should strip newline before closing pre
Date: Sun, 25 Oct 2020 21:45:56 +0100	[thread overview]
Message-ID: <CANnVG6mrqCrjV8bzVmGYUaPJdu_Wh5wP+oMvpsM2UnW9CyJXug@mail.gmail.com> (raw)
In-Reply-To: <20201016174636.GA5947@athene.usta.de>

[-- Attachment #1: Type: text/plain, Size: 14247 bytes --]

Thanks for this fix!

Ingo, would you be willing to cut a new release anytime soon?
There have been a number of fixes, I think, that have not yet made it into
any release version.

Thanks,

On Fri, Oct 16, 2020 at 7:46 PM Ingo Schwarze <schwarze@usta.de> wrote:

> Hello Aman,
>
> Aman Verma wrote on Thu, Oct 15, 2020 at 04:48:50PM -0400:
>
> > The problem with `.Bd -literal` blocks in HTML output is that
> > mandoc doesn't output the closing pre tag on the same line.
> > If the element is indented, browsers will display an extra
> > line since pre is telling them to preserve whitespace.
> >
> > A good example of the issue is
> > <https://mandoc.bsd.lv/man/mdoc.7.html#NAME>.
> > The extra space is clearly visible. The source is
> >
> >         <pre>.Nm name0 ,
> >     .Nm name1 ,
> >     .Nm name2
> >     .Nd a one line description
> >         </pre>
> >
> > What I'm proposing is that it should look like
> >
> >         <pre>.Nm name0 ,
> >     .Nm name1 ,
> >     .Nm name2
> >     .Nd a one line description</pre>
> >
> > This is what most Markdown processors do to solve the issue.
>
> I think your analysis and proposed solution are both correct,
> so i committed the following fix and installed the corrected
> version in these locations:
>
>   https://mandoc.bsd.lv/man/
>   https://man.bsd.lv/mdoc.7
>   https://man.openbsd.org/mdoc.7
>
> Thank you for the bug report,
>   Ingo
>
>
> Log Message:
> -----------
> In HTML output, avoid printing a newline right after <pre>
> and right before </pre> because that resulted in vertical
> whitespace not requested by the manual page author.
>
> Formatting bug reported by
> Aman Verma <amanraoverma plus vim at gmail dot com> on discuss@.
>
> Modified Files:
> --------------
>     mandoc:
>         html.c
>         man_html.c
>         mdoc_html.c
>     mandoc/regress/man/HP:
>         literal.out_html
>     mandoc/regress/man/IP:
>         literal.out_html
>     mandoc/regress/man/RS:
>         literal.out_html
>     mandoc/regress/man/SY:
>         literal.out_html
>     mandoc/regress/man/TP:
>         literal.out_html
>     mandoc/regress/mdoc/Bd:
>         nf.out_html
>         paragraph.out_html
>     mandoc/regress/mdoc/Rs:
>         paragraph.out_html
>     mandoc/regress/roff/sp:
>         fill-man.out_html
>     mandoc/regress/roff/string:
>         dotT.out_html
>
> Revision Data
> -------------
> Index: paragraph.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Rs/paragraph.out_html,v
> retrieving revision 1.4
> retrieving revision 1.5
> diff -Lregress/mdoc/Rs/paragraph.out_html
> -Lregress/mdoc/Rs/paragraph.out_html -u -p -r1.4 -r1.5
> --- regress/mdoc/Rs/paragraph.out_html
> +++ regress/mdoc/Rs/paragraph.out_html
> @@ -13,4 +13,3 @@
>  <p class="Pp">in a paragraph:</p>
>  <p class="Pp"><cite class="Rs"><span class="RsA">another author</span>,
>      <i class="RsB">another book</i>.</cite></p>
> -<pre>
> Index: mdoc_html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/mdoc_html.c,v
> retrieving revision 1.340
> retrieving revision 1.341
> diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.340 -r1.341
> --- mdoc_html.c
> +++ mdoc_html.c
> @@ -349,12 +349,11 @@ print_mdoc_node(MDOC_ARGS)
>         if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
>                 return;
>
> -       if (n->flags & NODE_NOFILL) {
> -               html_fillmode(h, ROFF_nf);
> -               if (n->flags & NODE_LINE)
> -                       print_endline(h);
> -       } else
> +       if ((n->flags & NODE_NOFILL) == 0)
>                 html_fillmode(h, ROFF_fi);
> +       else if (html_fillmode(h, ROFF_nf) == ROFF_nf &&
> +           n->tok != ROFF_fi && n->flags & NODE_LINE)
> +               print_endline(h);
>
>         child = 1;
>         n->flags &= ~NODE_ENDED;
> Index: man_html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/man_html.c,v
> retrieving revision 1.178
> retrieving revision 1.179
> diff -Lman_html.c -Lman_html.c -u -p -r1.178 -r1.179
> --- man_html.c
> +++ man_html.c
> @@ -169,7 +169,12 @@ print_man_node(MAN_ARGS)
>         if (n->type == ROFFT_COMMENT || n->flags & NODE_NOPRT)
>                 return;
>
> -       html_fillmode(h, n->flags & NODE_NOFILL ? ROFF_nf : ROFF_fi);
> +       if ((n->flags & NODE_NOFILL) == 0)
> +               html_fillmode(h, ROFF_fi);
> +       else if (html_fillmode(h, ROFF_nf) == ROFF_nf &&
> +           n->tok != ROFF_fi && n->flags & NODE_LINE &&
> +           (n->prev == NULL || n->prev->tok != MAN_YS))
> +               print_endline(h);
>
>         child = 1;
>         switch (n->type) {
> @@ -253,13 +258,6 @@ print_man_node(MAN_ARGS)
>         }
>         if (t != NULL)
>                 print_stagq(h, t);
> -
> -       if (n->flags & NODE_NOFILL && n->tok != MAN_YS &&
> -           (n->next != NULL && n->next->flags & NODE_LINE)) {
> -               /* In .nf = <pre>, print even empty lines. */
> -               h->col++;
> -               print_endline(h);
> -       }
>  }
>
>  static void
> Index: html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/html.c,v
> retrieving revision 1.270
> retrieving revision 1.271
> diff -Lhtml.c -Lhtml.c -u -p -r1.270 -r1.271
> --- html.c
> +++ html.c
> @@ -81,7 +81,7 @@ static        const struct htmldata htmltags[TA
>         {"h1",          HTML_TOPHRASE | HTML_NLAROUND},
>         {"h2",          HTML_TOPHRASE | HTML_NLAROUND},
>         {"p",           HTML_TOPHRASE | HTML_NLAROUND | HTML_INDENT},
> -       {"pre",         HTML_TOPHRASE | HTML_NLALL | HTML_NOINDENT},
> +       {"pre",         HTML_TOPHRASE | HTML_NLAROUND | HTML_NOINDENT},
>         {"a",           HTML_INPHRASE | HTML_TOPHRASE},
>         {"b",           HTML_INPHRASE | HTML_TOPHRASE},
>         {"cite",        HTML_INPHRASE | HTML_TOPHRASE},
> Index: literal.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/man/HP/literal.out_html,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -Lregress/man/HP/literal.out_html -Lregress/man/HP/literal.out_html
> -u -p -r1.2 -r1.3
> --- regress/man/HP/literal.out_html
> +++ regress/man/HP/literal.out_html
> @@ -1,18 +1,12 @@
>  <p class="Pp HP">tag indented text</p>
>  <p class="Pp">regular paragraph</p>
> -<pre>
> -literal
> -text
> -</pre>
> -<pre>
> -tag
> +<pre>literal
> +text</pre>
> +<pre>tag
>  literal
>  hanged
> -paragraph
> -</pre>
> -<pre>
> -literal
> -paragraph
> -</pre>
> +paragraph</pre>
> +<pre>literal
> +paragraph</pre>
>  regular text
>  <br/>
> Index: literal.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/man/IP/literal.out_html,v
> retrieving revision 1.6
> retrieving revision 1.7
> diff -Lregress/man/IP/literal.out_html -Lregress/man/IP/literal.out_html
> -u -p -r1.6 -r1.7
> --- regress/man/IP/literal.out_html
> +++ regress/man/IP/literal.out_html
> @@ -3,42 +3,32 @@
>    <dd>indented regular text</dd>
>  </dl>
>  <p class="Pp">new regular paragraph</p>
> -<pre>
> -literal
> -text
> -</pre>
> +<pre>literal
> +text</pre>
>  <dl class="Bl-tag">
>    <dt id="tag~2"><a class="permalink" href="#tag~2">tag</a></dt>
>    <dd>
> -    <pre>
> -indented
> +    <pre>indented
>  literal
> -text
> -    </pre>
> +text</pre>
>    </dd>
>  </dl>
> -<pre>
> -new
> +<pre>new
>  literal
> -paragraph
> -</pre>
> +paragraph</pre>
>  regular text
>  <section class="Ss">
>  <h2 class="Ss" id="literal_into_indented_paragraph"><a class="permalink"
> href="#literal_into_indented_paragraph">literal
>    into indented paragraph</a></h2>
>  <p class="Pp">regular text</p>
> -<pre>
> -literal
> -text
> -</pre>
> +<pre>literal
> +text</pre>
>  <dl class="Bl-tag">
>    <dt id="tag~3"><a class="permalink" href="#tag~3">tag</a></dt>
>    <dd>
> -    <pre>
> -indented
> +    <pre>indented
>  literal
> -text
> -    </pre>
> +text</pre>
>      indented regular text</dd>
>  </dl>
>  <p class="Pp">new regular paragraph</p>
> @@ -50,17 +40,13 @@ text
>  <dl class="Bl-tag">
>    <dt id="tag~4"><a class="permalink" href="#tag~4">tag</a></dt>
>    <dd>indented regular text
> -    <pre>
> -indented
> +    <pre>indented
>  literal
> -text
> -    </pre>
> +text</pre>
>    </dd>
>  </dl>
> -<pre>
> -new
> +<pre>new
>  literal
> -paragraph
> -</pre>
> +paragraph</pre>
>  regular text
>  <br/>
> Index: literal.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/man/RS/literal.out_html,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -Lregress/man/RS/literal.out_html -Lregress/man/RS/literal.out_html
> -u -p -r1.2 -r1.3
> --- regress/man/RS/literal.out_html
> +++ regress/man/RS/literal.out_html
> @@ -1,18 +1,12 @@
>    <br/>
>    initial regular text</p>
> -<pre>
> -literal text
> -before display
> -</pre>
> +<pre>literal text
> +before display</pre>
>  <div class="Bd-indent">
> -<pre>
> -This is a short line.
> -This is a very long line that would wrap if it weren't in literal context.
> -</pre>
> +<pre>This is a short line.
> +This is a very long line that would wrap if it weren't in literal
> context.</pre>
>  </div>
> -<pre>
> -literal text
> -after display
> -</pre>
> +<pre>literal text
> +after display</pre>
>  <p class="Pp">final regular text
>    <br/>
> Index: literal.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/man/SY/literal.out_html,v
> retrieving revision 1.3
> retrieving revision 1.4
> diff -Lregress/man/SY/literal.out_html -Lregress/man/SY/literal.out_html
> -u -p -r1.3 -r1.4
> --- regress/man/SY/literal.out_html
> +++ regress/man/SY/literal.out_html
> @@ -7,23 +7,17 @@
>    </tr>
>  </table>
>  middle regular text
> -<pre>
> -literal text
> -before display
> -</pre>
> +<pre>literal text
> +before display</pre>
>  <table class="Nm">
>    <tr>
>      <td><code class="Nm">command</code></td>
>      <td>
> -    <pre>
> -<i>arguments</i>
> -    </pre>
> +    <pre><i>arguments</i></pre>
>      </td>
>    </tr>
>  </table>
> -<pre>
> -literal text
> -after display
> -</pre>
> +<pre>literal text
> +after display</pre>
>  <p class="Pp">final regular text
>    <br/>
> Index: literal.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/man/TP/literal.out_html,v
> retrieving revision 1.4
> retrieving revision 1.5
> diff -Lregress/man/TP/literal.out_html -Lregress/man/TP/literal.out_html
> -u -p -r1.4 -r1.5
> --- regress/man/TP/literal.out_html
> +++ regress/man/TP/literal.out_html
> @@ -3,23 +3,17 @@
>    <dd>regular indented text</dd>
>  </dl>
>  <p class="Pp">regular paragraph</p>
> -<pre>
> -literal
> -text
> -</pre>
> +<pre>literal
> +text</pre>
>  <dl class="Bl-tag">
>    <dt id="tag~2"><a class="permalink" href="#tag~2">tag</a></dt>
>    <dd>
> -    <pre>
> -indented
> +    <pre>indented
>  literal
> -text
> -    </pre>
> +text</pre>
>    </dd>
>  </dl>
> -<pre>
> -literal
> -paragraph
> -</pre>
> +<pre>literal
> +paragraph</pre>
>  regular text
>  <br/>
> Index: paragraph.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Bd/paragraph.out_html,v
> retrieving revision 1.5
> retrieving revision 1.6
> diff -Lregress/mdoc/Bd/paragraph.out_html
> -Lregress/mdoc/Bd/paragraph.out_html -u -p -r1.5 -r1.6
> --- regress/mdoc/Bd/paragraph.out_html
> +++ regress/mdoc/Bd/paragraph.out_html
> @@ -8,13 +8,11 @@
>  back to normal
>  <p class="Pp">another paragraph</p>
>  <div class="Bd Pp" id="unfilled">
> -<pre>
> -<a class="permalink" href="#unfilled">unfilled</a> literal
> +<pre><a class="permalink" href="#unfilled">unfilled</a> literal
>  display
>  <mark id="upara"></mark>
>  <a class="permalink" href="#upara">unfilled</a> literal
> -paragraph
> -</pre>
> +paragraph</pre>
>  </div>
>  again back to normal
>  <br/>
> Index: nf.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/mdoc/Bd/nf.out_html,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -Lregress/mdoc/Bd/nf.out_html -Lregress/mdoc/Bd/nf.out_html -u -p
> -r1.2 -r1.3
> --- regress/mdoc/Bd/nf.out_html
> +++ regress/mdoc/Bd/nf.out_html
> @@ -1,20 +1,14 @@
> -<pre>
> -after .nf
> -request
> -</pre>
> +<pre>after .nf
> +request</pre>
>  <p class="Pp">after .fi request</p>
>  <div class="Bd Pp">
> -<pre>
> -in unfilled
> -block
> -</pre>
> +<pre>in unfilled
> +block</pre>
>  after .fi request in unfilled block</div>
>  after end of unfilled block
>  <div class="Bd Pp">in filled block
> -<pre>
> -after .nf request
> -in filled block
> -</pre>
> +<pre>after .nf request
> +in filled block</pre>
>  </div>
>  after end of filled block
>  <br/>
> Index: fill-man.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/roff/sp/fill-man.out_html,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -Lregress/roff/sp/fill-man.out_html
> -Lregress/roff/sp/fill-man.out_html -u -p -r1.2 -r1.3
> --- regress/roff/sp/fill-man.out_html
> +++ regress/roff/sp/fill-man.out_html
> @@ -1,7 +1,5 @@
>  <p class="Pp">switch to no-fill mode:</p>
> -<pre>
> -in no-fill mode:
> +<pre>in no-fill mode:
>
>  back to
> -fill mode:
> -</pre>
> +fill mode:</pre>
> Index: dotT.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/roff/string/dotT.out_html,v
> retrieving revision 1.3
> retrieving revision 1.4
> diff -Lregress/roff/string/dotT.out_html
> -Lregress/roff/string/dotT.out_html -u -p -r1.3 -r1.4
> --- regress/roff/string/dotT.out_html
> +++ regress/roff/string/dotT.out_html
> @@ -1,3 +1,2 @@
>  <p class="Pp">We are using the html device.</p>
>  <p class="Pp">The device name can be overridden.</p>
> -<pre>
> --
>  To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv
>
>

-- 
Best regards,
Michael

[-- Attachment #2: Type: text/html, Size: 19268 bytes --]

  reply	other threads:[~2020-10-25 20:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-15 20:48 Aman Verma
2020-10-16 17:46 ` Ingo Schwarze
2020-10-25 20:45   ` Michael Stapelberg [this message]
2020-10-26 13:26     ` Ingo Schwarze
2020-10-26 13:42       ` Michael Stapelberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANnVG6mrqCrjV8bzVmGYUaPJdu_Wh5wP+oMvpsM2UnW9CyJXug@mail.gmail.com \
    --to=stapelberg@debian.org \
    --cc=discuss@mandoc.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).