Yeah, that commit indeed fixes it. Thank you! On Tue, Apr 30, 2019 at 6:08 PM Ingo Schwarze 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 > 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 >
> -default font italic bold italic > - typeqriter > - roman > bold > - italic bold still bold > - italic back to bold back to > italic > +default font italic bold italic > + typeqriter roman > bold > + italic bold still bold italic back to > bold > + back to italic >
> ENDTEST > -- Best regards, Michael