discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: Michael Stapelberg <stapelberg@debian.org>
To: Ingo Schwarze <schwarze@usta.de>
Cc: discuss@mandoc.bsd.lv
Subject: Re: mandoc-1.14.5 released
Date: Sat, 25 May 2019 17:22:52 +0200	[thread overview]
Message-ID: <CANnVG6noc7xYD0XvEKaWwTi97Gu8Yb7LpE89KXwh9614ri4yQQ@mail.gmail.com> (raw)
In-Reply-To: <20190430160827.GG37599@athene.usta.de>

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

Yeah, that commit indeed fixes it. Thank you!

On Tue, Apr 30, 2019 at 6:08 PM Ingo Schwarze <schwarze@usta.de> wrote:

> Hi Michael,
>
> Michael Stapelberg wrote on Sun, Apr 28, 2019 at 03:24:51PM +0200:
>
> > Sorry for the late reply on this,
>
> I appreciate that you are testing mandoc quite regularly.
> It is only natural that not every point in time can be convenient
> for doing such work.
>
> > but I only now got a chance to (try to)
> > update manpages.debian.org to mandoc-1.14.5.
> >
> > Unfortunately, I encounter an assertion failure when running:
> > % curl -s
> >
> https://manpages.debian.org/testing/libpcp3-dev/pmRegisterDerived.3.en.gz
> |
> > mandoc -Thtml
> > mandoc: html.c:809: print_text: Assertion `NULL == h->metaf' failed.
>
> I fear i broke that as a side effect of the changes made for this
> NEWS entry: "roff(7) .ft request: handle the CB, CI, and CR fonts".
>
> The fix is slightly larger than i would like for a regression fix,
> but it can't be helped because it requires splitting the function
> print_metaf() into two parts.
>
> Then again, i like bugfixes that reduce the amount of code,
> and this one shortens the code by about 25 lines...
>
> I believe the commit below fixes the regression.
> Does it work for you, too?
>
> Thanks,
>   Ingo
>
>
> Log Message:
> -----------
> In HTML output, allow switching the desired font for subsequent
> text without printing an opening tag right away, and use that in
> the .ft request handler.  While here, garbage collect redundant
> enum htmlfont and reduce code duplication in print_text().
> Fixing an assertion failure reported by Michael <Stapelberg at Debian>
> in pmRegisterDerived(3) from libpcp3-dev.
>
> Modified Files:
> --------------
>     mandoc:
>         html.c
>         html.h
>         man_html.c
>         roff_html.c
>     mandoc/regress/roff/ft:
>         badargs.out_html
>
> Revision Data
> -------------
> Index: man_html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/man_html.c,v
> retrieving revision 1.173
> retrieving revision 1.174
> diff -Lman_html.c -Lman_html.c -u -p -r1.173 -r1.174
> --- man_html.c
> +++ man_html.c
> @@ -203,9 +203,9 @@ print_man_node(MAN_ARGS)
>                  * Close out scope of font prior to opening a macro
>                  * scope.
>                  */
> -               if (HTMLFONT_NONE != h->metac) {
> +               if (h->metac != ESCAPE_FONTROMAN) {
>                         h->metal = h->metac;
> -                       h->metac = HTMLFONT_NONE;
> +                       h->metac = ESCAPE_FONTROMAN;
>                 }
>
>                 /*
> Index: html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/html.c,v
> retrieving revision 1.254
> retrieving revision 1.255
> diff -Lhtml.c -Lhtml.c -u -p -r1.254 -r1.255
> --- html.c
> +++ html.c
> @@ -120,6 +120,7 @@ static      void     print_ctag(struct html *, s
>  static int      print_escape(struct html *, char);
>  static int      print_encode(struct html *, const char *, const char *,
> int);
>  static void     print_href(struct html *, const char *, const char *,
> int);
> +static void     print_metaf(struct html *);
>
>
>  void *
> @@ -222,55 +223,49 @@ print_gen_head(struct html *h)
>         print_tagq(h, t);
>  }
>
> -void
> -print_metaf(struct html *h, enum mandoc_esc deco)
> +int
> +html_setfont(struct html *h, enum mandoc_esc font)
>  {
> -       enum htmlfont    font;
> -
> -       switch (deco) {
> +       switch (font) {
>         case ESCAPE_FONTPREV:
>                 font = h->metal;
>                 break;
>         case ESCAPE_FONTITALIC:
> -               font = HTMLFONT_ITALIC;
> -               break;
>         case ESCAPE_FONTBOLD:
> -               font = HTMLFONT_BOLD;
> -               break;
>         case ESCAPE_FONTBI:
> -               font = HTMLFONT_BI;
> -               break;
>         case ESCAPE_FONTCW:
> -               font = HTMLFONT_CW;
> +       case ESCAPE_FONTROMAN:
>                 break;
>         case ESCAPE_FONT:
> -       case ESCAPE_FONTROMAN:
> -               font = HTMLFONT_NONE;
> +               font = ESCAPE_FONTROMAN;
>                 break;
>         default:
> -               return;
> +               return 0;
>         }
> +       h->metal = h->metac;
> +       h->metac = font;
> +       return 1;
> +}
>
> +static void
> +print_metaf(struct html *h)
> +{
>         if (h->metaf) {
>                 print_tagq(h, h->metaf);
>                 h->metaf = NULL;
>         }
> -
> -       h->metal = h->metac;
> -       h->metac = font;
> -
> -       switch (font) {
> -       case HTMLFONT_ITALIC:
> +       switch (h->metac) {
> +       case ESCAPE_FONTITALIC:
>                 h->metaf = print_otag(h, TAG_I, "");
>                 break;
> -       case HTMLFONT_BOLD:
> +       case ESCAPE_FONTBOLD:
>                 h->metaf = print_otag(h, TAG_B, "");
>                 break;
> -       case HTMLFONT_BI:
> +       case ESCAPE_FONTBI:
>                 h->metaf = print_otag(h, TAG_B, "");
>                 print_otag(h, TAG_I, "");
>                 break;
> -       case HTMLFONT_CW:
> +       case ESCAPE_FONTCW:
>                 h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
>                 break;
>         default:
> @@ -479,7 +474,8 @@ print_encode(struct html *h, const char
>                 case ESCAPE_FONTROMAN:
>                         if (0 == norecurse) {
>                                 h->flags |= HTML_NOSPACE;
> -                               print_metaf(h, esc);
> +                               if (html_setfont(h, esc))
> +                                       print_metaf(h);
>                                 h->flags &= ~HTML_NOSPACE;
>                         }
>                         continue;
> @@ -806,27 +802,9 @@ print_text(struct html *h, const char *w
>                         print_word(h, "&#x00A0;");
>         }
>
> -       assert(NULL == h->metaf);
> -       switch (h->metac) {
> -       case HTMLFONT_ITALIC:
> -               h->metaf = print_otag(h, TAG_I, "");
> -               break;
> -       case HTMLFONT_BOLD:
> -               h->metaf = print_otag(h, TAG_B, "");
> -               break;
> -       case HTMLFONT_BI:
> -               h->metaf = print_otag(h, TAG_B, "");
> -               print_otag(h, TAG_I, "");
> -               break;
> -       case HTMLFONT_CW:
> -               h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
> -               break;
> -       default:
> -               print_indent(h);
> -               break;
> -       }
> -
> -       assert(word);
> +       assert(h->metaf == NULL);
> +       print_metaf(h);
> +       print_indent(h);
>         if ( ! print_encode(h, word, NULL, 0)) {
>                 if ( ! (h->flags & HTML_NONOSPACE))
>                         h->flags &= ~HTML_NOSPACE;
> @@ -834,7 +812,7 @@ print_text(struct html *h, const char *w
>         } else
>                 h->flags |= HTML_NOSPACE | HTML_NONEWLINE;
>
> -       if (h->metaf) {
> +       if (h->metaf != NULL) {
>                 print_tagq(h, h->metaf);
>                 h->metaf = NULL;
>         }
> Index: roff_html.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/roff_html.c,v
> retrieving revision 1.19
> retrieving revision 1.20
> diff -Lroff_html.c -Lroff_html.c -u -p -r1.19 -r1.20
> --- roff_html.c
> +++ roff_html.c
> @@ -94,7 +94,7 @@ roff_html_pre_ft(ROFF_HTML_ARGS)
>         const char      *cp;
>
>         cp = n->child->string;
> -       print_metaf(h, mandoc_font(cp, (int)strlen(cp)));
> +       html_setfont(h, mandoc_font(cp, (int)strlen(cp)));
>  }
>
>  static void
> Index: html.h
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/html.h,v
> retrieving revision 1.102
> retrieving revision 1.103
> diff -Lhtml.h -Lhtml.h -u -p -r1.102 -r1.103
> --- html.h
> +++ html.h
> @@ -69,15 +69,6 @@ enum htmltag {
>         TAG_MAX
>  };
>
> -enum   htmlfont {
> -       HTMLFONT_NONE = 0,
> -       HTMLFONT_BOLD,
> -       HTMLFONT_ITALIC,
> -       HTMLFONT_BI,
> -       HTMLFONT_CW,
> -       HTMLFONT_MAX
> -};
> -
>  struct tag {
>         struct tag       *next;
>         int               refcnt;
> @@ -111,8 +102,8 @@ struct      html {
>         char             *base_includes; /* base for include href */
>         char             *style; /* style-sheet URI */
>         struct tag       *metaf; /* current open font scope */
> -       enum htmlfont     metal; /* last used font */
> -       enum htmlfont     metac; /* current font mode */
> +       enum mandoc_esc   metal; /* last used font */
> +       enum mandoc_esc   metac; /* current font mode */
>         int               oflags; /* output options */
>  #define        HTML_FRAGMENT    (1 << 0) /* don't emit HTML/HEAD/BODY */
>  #define        HTML_TOC         (1 << 1) /* emit a table of contents */
> @@ -128,7 +119,6 @@ void                  roff_html_pre(struct html *, con
>  void             print_gen_comment(struct html *, struct roff_node *);
>  void             print_gen_decls(struct html *);
>  void             print_gen_head(struct html *);
> -void             print_metaf(struct html *, enum mandoc_esc);
>  struct tag      *print_otag(struct html *, enum htmltag, const char *,
> ...);
>  void             print_tagq(struct html *, const struct tag *);
>  void             print_stagq(struct html *, const struct tag *);
> @@ -141,3 +131,4 @@ void                  print_endline(struct html *);
>  void             html_close_paragraph(struct html *);
>  enum roff_tok    html_fillmode(struct html *, enum roff_tok);
>  char            *html_make_id(const struct roff_node *, int);
> +int              html_setfont(struct html *, enum mandoc_esc);
> Index: badargs.out_html
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/regress/roff/ft/badargs.out_html,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -Lregress/roff/ft/badargs.out_html -Lregress/roff/ft/badargs.out_html
> -u -p -r1.2 -r1.3
> --- regress/roff/ft/badargs.out_html
> +++ regress/roff/ft/badargs.out_html
> @@ -1,9 +1,8 @@
>  BEGINTEST
>  <br/>
> -default font <i></i><i>italic</i> <b><i></i></b><b><i>bold italic</i></b>
> -  <span class="Li"></span><span class="Li">typeqriter</span>
> -  <span class="Li"></span> <span class="Li">roman</span>
> <b></b><b>bold</b>
> -  <i></i> <i>italic</i> <b></b><b>bold</b> <b>still bold</b>
> -  <i></i><i>italic</i> <i></i><i>back to bold</i> <i></i><i>back to
> italic</i>
> +default font <i>italic</i> <b><i>bold italic</i></b>
> +  <span class="Li">typeqriter</span> <span class="Li">roman</span>
> <b>bold</b>
> +  <i>italic</i> <b>bold</b> <b>still bold</b> <i>italic</i> <i>back to
> bold</i>
> +  <i>back to italic</i>
>  <br/>
>  ENDTEST
>


-- 
Best regards,
Michael

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

  reply	other threads:[~2019-05-25 15:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-10 11:32 Ingo Schwarze
2019-04-28 13:24 ` Michael Stapelberg
2019-04-30 16:08   ` Ingo Schwarze
2019-05-25 15:22     ` Michael Stapelberg [this message]
2019-05-27  6:34       ` Michael Stapelberg
2019-06-01 19:16         ` Ingo Schwarze
2019-06-03 17:01           ` 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=CANnVG6noc7xYD0XvEKaWwTi97Gu8Yb7LpE89KXwh9614ri4yQQ@mail.gmail.com \
    --to=stapelberg@debian.org \
    --cc=discuss@mandoc.bsd.lv \
    --cc=schwarze@usta.de \
    /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).