From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from scc-mailout-kit-01.scc.kit.edu (scc-mailout-kit-01.scc.kit.edu [129.13.231.81]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTP id 11ee1d5f for ; Mon, 20 May 2019 15:38:55 -0500 (EST) Received: from asta-nat.asta.uni-karlsruhe.de ([172.22.63.82] helo=hekate.usta.de) by scc-mailout-kit-01.scc.kit.edu with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (envelope-from ) id 1hSp3d-0003jA-QG; Mon, 20 May 2019 22:38:54 +0200 Received: from donnerwolke.usta.de ([172.24.96.3]) by hekate.usta.de with esmtp (Exim 4.77) (envelope-from ) id 1hSp3d-00000S-4D; Mon, 20 May 2019 22:38:53 +0200 Received: from athene.usta.de ([172.24.96.10]) by donnerwolke.usta.de with esmtp (Exim 4.84_2) (envelope-from ) id 1hSp3c-0007LD-UC; Mon, 20 May 2019 22:38:53 +0200 Received: from localhost (athene.usta.de [local]) by athene.usta.de (OpenSMTPD) with ESMTPA id 283c725e; Mon, 20 May 2019 22:38:52 +0200 (CEST) Date: Mon, 20 May 2019 22:38:52 +0200 From: Ingo Schwarze To: "Anthony J. Bentley" Cc: tech@mandoc.bsd.lv Subject: Re: docbook2mdoc(1) sometimes mishandles   Message-ID: <20190520203852.GA10196@athene.usta.de> References: <3491.1558341259@desktop.ajb.soy> X-Mailinglist: mandoc-tech Reply-To: tech@mandoc.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3491.1558341259@desktop.ajb.soy> User-Agent: Mutt/1.8.0 (2017-02-23) Hi Anthony, Anthony J. Bentley wrote on Mon, May 20, 2019 at 02:34:19AM -0600: > From fonts.xml: > > > Standard Type 1 fonts > > docbook2mdoc turns this into: > > .Pp > .Sy Standard Type\e1 fonts > > It happens again near the end of the document: > > > The IETF RFC documents, available from a number of sites throughout > the world, often provide interesting information about character set > issues; see for example url="https://datatracker.ietf.org/doc/rfc373/">RFC 373. > > > becomes: > > .Pp > The IETF RFC documents, available from a number of sites throughout > the world, often provide interesting information about character set > issues; see for example > .Lk https://datatracker.ietf.org/doc/rfc373/ "RFC\e373" . Thanks for reporting, fxied with the following commit. Strangely, the file fonts.7 in the Xenocara tree is already correct... Yours, Ingo Log Message: ----------- When rendering XML entities, skip escaping in macro_addarg(). Fixing a bug which bentley@ found in fonts(7). Modified Files: -------------- docbook2mdoc: macro.c macro.h Revision Data ------------- Index: macro.h =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/macro.h,v retrieving revision 1.7 retrieving revision 1.8 diff -Lmacro.h -Lmacro.h -u -p -r1.7 -r1.8 --- macro.h +++ macro.h @@ -44,10 +44,11 @@ struct format { enum parastate parastate; }; -#define ARG_SPACE 1 /* Insert whitespace before this argument. */ -#define ARG_SINGLE 2 /* Quote argument if it contains whitespace. */ -#define ARG_QUOTED 4 /* We are already in a quoted argument. */ -#define ARG_UPPER 8 /* Covert argument to upper case. */ +#define ARG_SPACE (1 << 0) /* Insert whitespace before this argument. */ +#define ARG_SINGLE (1 << 1) /* Quote arg if it contains whitespace. */ +#define ARG_QUOTED (1 << 2) /* We are already in a quoted argument. */ +#define ARG_RAW (1 << 3) /* Skip macro and backslash escaping. */ +#define ARG_UPPER (1 << 4) /* Convert argument to upper case. */ void macro_open(struct format *, const char *); Index: macro.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/macro.c,v retrieving revision 1.20 retrieving revision 1.21 diff -Lmacro.c -Lmacro.c -u -p -r1.20 -r1.21 --- macro.c +++ macro.c @@ -130,6 +130,13 @@ macro_addarg(struct format *f, const cha flags &= ~ ARG_SPACE; } + /* For XML entities, skip escaping. */ + + if (flags & ARG_RAW) { + fputs(arg, stdout); + break; + } + /* Escape us if we look like a macro. */ if ((flags & (ARG_QUOTED | ARG_UPPER)) == 0 && @@ -186,10 +193,16 @@ macro_addnode(struct format *f, struct p TAILQ_NEXT(nc, child) == NULL) n = nc; - if (n->node == NODE_TEXT || n->node == NODE_ESCAPE) { + switch (n->node) { + case NODE_ESCAPE: + flags |= ARG_RAW; + /* FALLTHROUGH */ + case NODE_TEXT: macro_addarg(f, n->b, flags); f->parastate = PARA_MID; return; + default: + break; } /* -- To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv