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, " ");
> }
>
> - 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 --]
next prev parent 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).