From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com [209.85.222.179]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id bdd13f9f for ; Mon, 27 May 2019 01:34:33 -0500 (EST) Received: by mail-qk1-f179.google.com with SMTP id a132so16206928qkb.13 for ; Sun, 26 May 2019 23:34:33 -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=6KBy2ay7B/PQWtvN52hLzkz2+GM0m2Hrmra6dd/Kso8=; b=hh0eOkICcjSmTrzFqz6N38uHkizfPiVLi21XlxoLp1XvGGHEtZufVYt8xeVj7qD2N1 tNofvSJNMqY/KVd1ICGErgI6NbSggnczKil0xW/L9liEoY4zofTo82FAh3FUWKp0h+M4 +FlIocd+e2vGASYwT7fFtn+5l6btTGiaFX4Fjd0VOJjCy80wOQYgerAruq2VSBynagVs XLY5pYkU2METC3nsHzKduPJ3SPhHreu7lJEhW4s1PjKgClK/qAtsA59eCIa9FbfSK35e 7ZmKqdJo0SaxJZGozkW6wG/XZOb8y8eITG2oGJQiv2y4d9PBN24Spitq4HWM2TYkggbu sEwQ== X-Gm-Message-State: APjAAAViWNi50xrFPwX0dD5edX4tj2SZDGJdVl9PwbrTXfXAk0Ri5V0T G/YhH/v44eC8IoT7i9ICT9dNLda3fWG8GXrghG403w== X-Google-Smtp-Source: APXvYqzDaMMmnx8ZLn6VK5dzQfXu9gDnupf2SGuwu1aPoiJwHxYXLp6fdgJxg5UPkyfpsJqF5hgoOLmXN9L1NpJd6qE= X-Received: by 2002:a0c:9826:: with SMTP id c35mr77760966qvd.240.1558938873054; Sun, 26 May 2019 23:34:33 -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: From: Michael Stapelberg Date: Mon, 27 May 2019 08:34:21 +0200 Message-ID: Subject: Re: mandoc-1.14.5 released To: Ingo Schwarze Cc: discuss@mandoc.bsd.lv Content-Type: multipart/alternative; boundary="000000000000c172ce0589d8bd58" --000000000000c172ce0589d8bd58 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I have encountered one more issue: % curl -s https://manpages.debian.org/testing/mysql-server-5.6/mysqlbinlog.1.en.gz | ./mandoc -Thtml [=E2=80=A6] free(): invalid pointer Could you take a look at that, too, please? Thank you, On Sat, May 25, 2019 at 5:22 PM Michael Stapelberg wrote: > 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.g= z >> | >> > mandoc -Thtml >> > mandoc: html.c:809: print_text: Assertion `NULL =3D=3D h->metaf' faile= d. >> >> 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 >> =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) >> * Close out scope of font prior to opening a macro >> * scope. >> */ >> - if (HTMLFONT_NONE !=3D h->metac) { >> + if (h->metac !=3D ESCAPE_FONTROMAN) { >> h->metal =3D h->metac; >> - h->metac =3D HTMLFONT_NONE; >> + h->metac =3D ESCAPE_FONTROMAN; >> } >> >> /* >> 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 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 =3D h->metal; >> break; >> case ESCAPE_FONTITALIC: >> - font =3D HTMLFONT_ITALIC; >> - break; >> case ESCAPE_FONTBOLD: >> - font =3D HTMLFONT_BOLD; >> - break; >> case ESCAPE_FONTBI: >> - font =3D HTMLFONT_BI; >> - break; >> case ESCAPE_FONTCW: >> - font =3D HTMLFONT_CW; >> + case ESCAPE_FONTROMAN: >> break; >> case ESCAPE_FONT: >> - case ESCAPE_FONTROMAN: >> - font =3D HTMLFONT_NONE; >> + font =3D ESCAPE_FONTROMAN; >> break; >> default: >> - return; >> + return 0; >> } >> + h->metal =3D h->metac; >> + h->metac =3D font; >> + return 1; >> +} >> >> +static void >> +print_metaf(struct html *h) >> +{ >> if (h->metaf) { >> print_tagq(h, h->metaf); >> h->metaf =3D NULL; >> } >> - >> - h->metal =3D h->metac; >> - h->metac =3D font; >> - >> - switch (font) { >> - case HTMLFONT_ITALIC: >> + switch (h->metac) { >> + case ESCAPE_FONTITALIC: >> h->metaf =3D print_otag(h, TAG_I, ""); >> break; >> - case HTMLFONT_BOLD: >> + case ESCAPE_FONTBOLD: >> h->metaf =3D print_otag(h, TAG_B, ""); >> break; >> - case HTMLFONT_BI: >> + case ESCAPE_FONTBI: >> h->metaf =3D print_otag(h, TAG_B, ""); >> print_otag(h, TAG_I, ""); >> break; >> - case HTMLFONT_CW: >> + case ESCAPE_FONTCW: >> h->metaf =3D 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 =3D=3D norecurse) { >> h->flags |=3D HTML_NOSPACE; >> - print_metaf(h, esc); >> + if (html_setfont(h, esc)) >> + print_metaf(h); >> h->flags &=3D ~HTML_NOSPACE; >> } >> continue; >> @@ -806,27 +802,9 @@ print_text(struct html *h, const char *w >> print_word(h, " "); >> } >> >> - assert(NULL =3D=3D h->metaf); >> - switch (h->metac) { >> - case HTMLFONT_ITALIC: >> - h->metaf =3D print_otag(h, TAG_I, ""); >> - break; >> - case HTMLFONT_BOLD: >> - h->metaf =3D print_otag(h, TAG_B, ""); >> - break; >> - case HTMLFONT_BI: >> - h->metaf =3D print_otag(h, TAG_B, ""); >> - print_otag(h, TAG_I, ""); >> - break; >> - case HTMLFONT_CW: >> - h->metaf =3D print_otag(h, TAG_SPAN, "c", "Li"); >> - break; >> - default: >> - print_indent(h); >> - break; >> - } >> - >> - assert(word); >> + assert(h->metaf =3D=3D NULL); >> + print_metaf(h); >> + print_indent(h); >> if ( ! print_encode(h, word, NULL, 0)) { >> if ( ! (h->flags & HTML_NONOSPACE)) >> h->flags &=3D ~HTML_NOSPACE; >> @@ -834,7 +812,7 @@ print_text(struct html *h, const char *w >> } else >> h->flags |=3D HTML_NOSPACE | HTML_NONEWLINE; >> >> - if (h->metaf) { >> + if (h->metaf !=3D NULL) { >> print_tagq(h, h->metaf); >> h->metaf =3D NULL; >> } >> 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) >> const char *cp; >> >> cp =3D 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 >> =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 { >> TAG_MAX >> }; >> >> -enum htmlfont { >> - HTMLFONT_NONE =3D 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 *, c= on >> 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 >> =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 @@ >> 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 > --=20 Best regards, Michael --000000000000c172ce0589d8bd58 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I have encountered one more issue:

[=E2=80=A6]
fre= e(): invalid pointer

Could you take a look at = that, too, please?

Thank you,

On Sat, May 25,= 2019 at 5:22 PM Michael Stapelberg <stapelberg@debian.org> wrote:
Yeah, that commit indeed fixes = it. Thank you!

On Tue, Apr 30, 2019 at 6:08 PM Ingo Schwarze <schwarze@usta.de> wro= te:
Hi Michael,<= br>
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,
Mic= hael


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