=================================================================== RCS file: /cvs/docbook2mdoc/macro.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -p -r1.20 -r1.21 --- docbook2mdoc/macro.c 2019/05/02 12:40:42 1.20 +++ docbook2mdoc/macro.c 2019/05/20 20:08:26 1.21 @@ -1,4 +1,4 @@ -/* $Id: macro.c,v 1.20 2019/05/02 12:40:42 schwarze Exp $ */ +/* $Id: macro.c,v 1.21 2019/05/20 20:08:26 schwarze Exp $ */ /* * Copyright (c) 2019 Ingo Schwarze * @@ -130,6 +130,13 @@ macro_addarg(struct format *f, const char *arg, int fl 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 pnode *n, int f 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; } /*