=================================================================== RCS file: /cvs/mandoc/mdoc_markdown.c,v retrieving revision 1.2 retrieving revision 1.4 diff -u -p -r1.2 -r1.4 --- mandoc/mdoc_markdown.c 2017/03/04 21:41:29 1.2 +++ mandoc/mdoc_markdown.c 2017/03/07 12:39:01 1.4 @@ -1,4 +1,4 @@ -/* $Id: mdoc_markdown.c,v 1.2 2017/03/04 21:41:29 schwarze Exp $ */ +/* $Id: mdoc_markdown.c,v 1.4 2017/03/07 12:39:01 schwarze Exp $ */ /* * Copyright (c) 2017 Ingo Schwarze * @@ -129,7 +129,7 @@ static const struct md_act md_acts[MDOC_MAX + 1] = { { NULL, md_pre_Fn, md_post_Fn, NULL, NULL }, /* Fn */ { NULL, md_pre_Fd, md_post_raw, "*", "*" }, /* Ft */ { NULL, md_pre_raw, md_post_raw, "**", "**" }, /* Ic */ - { NULL, md_pre_In, md_post_In, "*", "*" }, /* In */ + { NULL, md_pre_In, md_post_In, NULL, NULL }, /* In */ { NULL, md_pre_raw, md_post_raw, "`", "`" }, /* Li */ { md_cond_head, md_pre_Nd, NULL, NULL, NULL }, /* Nd */ { NULL, md_pre_Nm, md_post_Nm, "**", "**" }, /* Nm */ @@ -220,7 +220,7 @@ static const struct md_act md_acts[MDOC_MAX + 1] = { { NULL, NULL, md_post_pc, NULL, NULL }, /* %Q */ { NULL, md_pre_br, NULL, NULL, NULL }, /* br */ { NULL, md_pre_Pp, NULL, NULL, NULL }, /* sp */ - { NULL, NULL, md_post_pc, NULL, NULL }, /* %U */ + { NULL, md_pre_Lk, md_post_pc, NULL, NULL }, /* %U */ { NULL, NULL, NULL, NULL, NULL }, /* Ta */ { NULL, NULL, NULL, NULL, NULL }, /* ll */ { NULL, NULL, NULL, NULL, NULL }, /* ROOT */ @@ -1067,16 +1067,15 @@ md_pre_In(struct roff_node *n) { if (n->flags & NODE_SYNPRETTY) { md_pre_syn(n); - md_pre_raw(n); - md_rawword("*"); + md_rawword("**"); outflags &= ~MD_spc; md_word("#include <"); - outflags &= ~MD_spc; } else { md_word("<"); outflags &= ~MD_spc; - md_pre_raw(n); + md_rawword("*"); } + outflags &= ~MD_spc; return 1; } @@ -1085,13 +1084,11 @@ md_post_In(struct roff_node *n) { if (n->flags & NODE_SYNPRETTY) { outflags &= ~MD_spc; - md_rawword(">*"); - md_post_raw(n); + md_rawword(">**"); outflags |= MD_nl; } else { - md_post_raw(n); outflags &= ~MD_spc; - md_rawword(">"); + md_rawword("*>"); } } @@ -1235,6 +1232,7 @@ static int md_pre_Lk(struct roff_node *n) { const struct roff_node *link, *descr; + const unsigned char *s; if ((link = n->child) == NULL) return 0; @@ -1251,8 +1249,16 @@ md_pre_Lk(struct roff_node *n) } else md_rawword("<"); - outflags &= ~MD_spc; - md_word(link->string); + for (s = link->string; *s != '\0'; s++) { + if (strchr("%)<>", *s) != NULL) { + printf("%%%2.2hhX", *s); + outcount += 3; + } else { + putchar(*s); + outcount++; + } + } + outflags &= ~MD_spc; md_rawword(link->next == NULL ? ">" : ")"); return 0;