From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id c87791e4 for ; Sat, 25 May 2019 10:23:05 -0500 (EST) Received: by mail-qk1-f178.google.com with SMTP id p18so11899358qkk.0 for ; Sat, 25 May 2019 08:23:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Y94lE1Scn6gZ1V+hYBq3Q0/LzljANRmol0vRKFv7z7M=; b=GpM7FZ+9iVjlVdv1mUZVnN/Fq2VRsrVy22PQfktnbQBYs5X24qcLsxlPdZPg+pOqgT EWV86j9+rPnwhwZ4MGLeuczdSHkXbtpizhuGhya72lp2OLziq9vXGd4si9OkIiiU32Zh I1i7AVpmT921JQfWM9Pi1VVEV1MPGHfOFX8T411hwJqnX6Z7yp9WiDraH5pD8BQsvD7p sMrP5jnVVjfwm41vhsVez64ppRcC2O/tr7BHII94KZ6YOLfo8+vA0OcGUaMAHoiKYKI5 C1VAgrFKSj84dMtnn+qt/V2GceWEWmmKN0Vwqi+wMWaPEzpp97i28+Rc9Ut3ccJj5xKs xkWQ== X-Gm-Message-State: APjAAAX7rKhD8JGIN60y9mBo2rsy4Hx/0Cj+Nril37zChGe63M1t5qKY Th7CsOd2QweUHB6kD/joue3KHutl6ys/yWMOtZz9nA== X-Google-Smtp-Source: APXvYqyCrw/gO1ggJr4Vb6ZfAU06lIhamksDdWDihI1zjmlMQy6fTj3UbC+WFNfiPeiLKTLfdRdBGqWeRU6kM2ldvy8= X-Received: by 2002:ac8:4509:: with SMTP id q9mr83333181qtn.151.1558797784148; Sat, 25 May 2019 08:23:04 -0700 (PDT) X-Mailinglist: mandoc-discuss Reply-To: discuss@mandoc.bsd.lv MIME-Version: 1.0 References: <20190310113237.GE23000@athene.usta.de> <20190430160827.GG37599@athene.usta.de> In-Reply-To: <20190430160827.GG37599@athene.usta.de> From: Michael Stapelberg Date: Sat, 25 May 2019 17:22:52 +0200 Message-ID: Subject: Re: mandoc-1.14.5 released To: Ingo Schwarze Cc: discuss@mandoc.bsd.lv Content-Type: multipart/alternative; boundary="0000000000003383ce0589b7e4b0" --0000000000003383ce0589b7e4b0 Content-Type: text/plain; charset="UTF-8" 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 --0000000000003383ce0589b7e4b0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Yeah, that commit indeed fixes it. Thank you!

On Tue, Apr 3= 0, 2019 at 6:08 PM Ingo Schwarze <sc= hwarze@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.debia= n.org/testing/libpcp3-dev/pmRegisterDerived.3.en.gz |
> mandoc -Thtml
> mandoc: html.c:809: print_text: Assertion `NULL =3D=3D 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,
=C2=A0 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.=C2=A0 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:
--------------
=C2=A0 =C2=A0 mandoc:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 html.c
=C2=A0 =C2=A0 =C2=A0 =C2=A0 html.h
=C2=A0 =C2=A0 =C2=A0 =C2=A0 man_html.c
=C2=A0 =C2=A0 =C2=A0 =C2=A0 roff_html.c
=C2=A0 =C2=A0 mandoc/regress/roff/ft:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 badargs.out_html

Revision Data
-------------
Index: man_html.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* Close out s= cope of font prior to opening a macro
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* scope.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (HTMLFONT_NONE != =3D h->metac) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (h->metac != =3D ESCAPE_FONTROMAN) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 h->metal =3D h->metac;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0h->metac =3D HTMLFONT_NONE;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0h->metac =3D ESCAPE_FONTROMAN;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /*
Index: html.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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=C2=A0 =C2=A0 =C2=A0 void=C2=A0 =C2=A0 =C2=A0prin= t_ctag(struct html *, s
=C2=A0static int=C2=A0 =C2=A0 =C2=A0 print_escape(struct html *, char);
=C2=A0static int=C2=A0 =C2=A0 =C2=A0 print_encode(struct html *, const char= *, const char *, int);
=C2=A0static void=C2=A0 =C2=A0 =C2=A0print_href(struct html *, const char *= , const char *, int);
+static void=C2=A0 =C2=A0 =C2=A0print_metaf(struct html *);


=C2=A0void *
@@ -222,55 +223,49 @@ print_gen_head(struct html *h)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 print_tagq(h, t);
=C2=A0}

-void
-print_metaf(struct html *h, enum mandoc_esc deco)
+int
+html_setfont(struct html *h, enum mandoc_esc font)
=C2=A0{
-=C2=A0 =C2=A0 =C2=A0 =C2=A0enum htmlfont=C2=A0 =C2=A0 font;
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (deco) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (font) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTPREV:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 font =3D h->meta= l;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTITALIC:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D HTMLFONT_I= TALIC;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTBOLD:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D HTMLFONT_B= OLD;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTBI:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D HTMLFONT_B= I;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTCW:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D HTMLFONT_C= W;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTROMAN:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONT:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTROMAN:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D HTMLFONT_N= ONE;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0font =3D ESCAPE_FON= TROMAN;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 default:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 =C2=A0 =C2=A0h->metal =3D h->metac;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0h->metac =3D font;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0return 1;
+}

+static void
+print_metaf(struct html *h)
+{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (h->metaf) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print_tagq(h, h->= ;metaf);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D NUL= L;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0h->metal =3D h->metac;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0h->metac =3D font;
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (font) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_ITALIC:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (h->metac) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTITALIC:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D pri= nt_otag(h, TAG_I, "");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_BOLD:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTBOLD:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D pri= nt_otag(h, TAG_B, "");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_BI:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTBI:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D pri= nt_otag(h, TAG_B, "");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print_otag(h, TAG_I= , "");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_CW:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case ESCAPE_FONTCW:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D pri= nt_otag(h, TAG_SPAN, "c", "Li");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 default:
@@ -479,7 +474,8 @@ print_encode(struct html *h, const char
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 case ESCAPE_FONTROM= AN:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 if (0 =3D=3D norecurse) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->flags |=3D HTML_NOSPACE;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_metaf(h, esc);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (html_setfont(h, esc))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_met= af(h);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->flags &=3D ~HTML_NOSPACE;<= br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 continue;
@@ -806,27 +802,9 @@ print_text(struct html *h, const char *w
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 print_word(h, "&#x00A0;");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }

-=C2=A0 =C2=A0 =C2=A0 =C2=A0assert(NULL =3D=3D h->metaf);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0switch (h->metac) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_ITALIC:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0h->metaf =3D pri= nt_otag(h, TAG_I, "");
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_BOLD:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0h->metaf =3D pri= nt_otag(h, TAG_B, "");
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_BI:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0h->metaf =3D pri= nt_otag(h, TAG_B, "");
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_otag(h, TAG_I= , "");
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0case HTMLFONT_CW:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0h->metaf =3D pri= nt_otag(h, TAG_SPAN, "c", "Li");
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0default:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_indent(h); -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0}
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0assert(word);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0assert(h->metaf =3D=3D NULL);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0print_metaf(h);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0print_indent(h);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if ( ! print_encode(h, word, NULL, 0)) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if ( ! (h->flags= & HTML_NONOSPACE))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 h->flags &=3D ~HTML_NOSPACE;
@@ -834,7 +812,7 @@ print_text(struct html *h, const char *w
=C2=A0 =C2=A0 =C2=A0 =C2=A0 } else
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->flags |=3D HT= ML_NOSPACE | HTML_NONEWLINE;

-=C2=A0 =C2=A0 =C2=A0 =C2=A0if (h->metaf) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (h->metaf !=3D NULL) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print_tagq(h, h->= ;metaf);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 h->metaf =3D NUL= L;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
Index: roff_html.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 const char=C2=A0 =C2=A0 =C2=A0 *cp;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 cp =3D n->child->string;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0print_metaf(h, mandoc_font(cp, (int)strlen(cp))= );
+=C2=A0 =C2=A0 =C2=A0 =C2=A0html_setfont(h, mandoc_font(cp, (int)strlen(cp)= ));
=C2=A0}

=C2=A0static void
Index: html.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 TAG_MAX
=C2=A0};

-enum=C2=A0 =C2=A0htmlfont {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_NONE =3D 0,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_BOLD,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_ITALIC,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_BI,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_CW,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0HTMLFONT_MAX
-};
-
=C2=A0struct tag {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct tag=C2=A0 =C2=A0 =C2=A0 =C2=A0*next;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0refcnt;
@@ -111,8 +102,8 @@ struct=C2=A0 =C2=A0 =C2=A0 html {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 char=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0*base_includes; /* base for include href */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 char=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0*style; /* style-sheet URI */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct tag=C2=A0 =C2=A0 =C2=A0 =C2=A0*metaf; /*= current open font scope */
-=C2=A0 =C2=A0 =C2=A0 =C2=A0enum htmlfont=C2=A0 =C2=A0 =C2=A0metal; /* last= used font */
-=C2=A0 =C2=A0 =C2=A0 =C2=A0enum htmlfont=C2=A0 =C2=A0 =C2=A0metac; /* curr= ent font mode */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0enum mandoc_esc=C2=A0 =C2=A0metal; /* last used= font */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0enum mandoc_esc=C2=A0 =C2=A0metac; /* current f= ont mode */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0oflags; /* output options */
=C2=A0#define=C2=A0 =C2=A0 =C2=A0 =C2=A0 HTML_FRAGMENT=C2=A0 =C2=A0 (1 <= < 0) /* don't emit HTML/HEAD/BODY */
=C2=A0#define=C2=A0 =C2=A0 =C2=A0 =C2=A0 HTML_TOC=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(1 << 1) /* emit a table of contents */
@@ -128,7 +119,6 @@ void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 roff_html_pre(struct html *, con
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_gen_comment= (struct html *, struct roff_node *);
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_gen_decls(s= truct html *);
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_gen_head(st= ruct html *);
-void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_metaf(struct htm= l *, enum mandoc_esc);
=C2=A0struct tag=C2=A0 =C2=A0 =C2=A0 *print_otag(struct html *, enum htmlta= g, const char *, ...);
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_tagq(struct= html *, const struct tag *);
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print_stagq(struc= t html *, const struct tag *);
@@ -141,3 +131,4 @@ void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 print_endline(struct html *);
=C2=A0void=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0html_close_paragr= aph(struct html *);
=C2=A0enum roff_tok=C2=A0 =C2=A0 html_fillmode(struct html *, enum roff_tok= );
=C2=A0char=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *html_make_id(const str= uct roff_node *, int);
+int=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 html_setfont(struct ht= ml *, enum mandoc_esc);
Index: badargs.out_html
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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 @@
=C2=A0BEGINTEST
=C2=A0<br/>
-default font <i></i><i>italic</i> <b><i&g= t;</i></b><b><i>bold italic</i></b>
-=C2=A0 <span class=3D"Li"></span><span class=3D&q= uot;Li">typeqriter</span>
-=C2=A0 <span class=3D"Li"></span> <span class=3D&= quot;Li">roman</span> <b></b><b>bold</b&= gt;
-=C2=A0 <i></i> <i>italic</i> <b></b>&l= t;b>bold</b> <b>still bold</b>
-=C2=A0 <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>
+=C2=A0 <span class=3D"Li">typeqriter</span> <span= class=3D"Li">roman</span> <b>bold</b>
+=C2=A0 <i>italic</i> <b>bold</b> <b>still bo= ld</b> <i>italic</i> <i>back to bold</i>
+=C2=A0 <i>back to italic</i>
=C2=A0<br/>
=C2=A0ENDTEST


--
Best regards,
Michael
--0000000000003383ce0589b7e4b0-- -- To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv