summaryrefslogtreecommitdiffstats
path: root/mdoc_html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-05-30 16:31:29 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-05-30 16:31:29 +0000
commit3d8bd1f3fd3008bd932346d3e5435b63f7f28972 (patch)
tree4accbdbf935ae70e8f5052dedd52a1f80b7bb661 /mdoc_html.c
parentf9f4c363c58d629451c4b9a44815112814c91e0e (diff)
downloadmandoc-3d8bd1f3fd3008bd932346d3e5435b63f7f28972.tar.gz
fix formatting of intermediate punctuation in .Lk
Diffstat (limited to 'mdoc_html.c')
-rw-r--r--mdoc_html.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index 1956f0e0..bc3a9f06 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -1309,24 +1309,32 @@ mdoc_pp_pre(MDOC_ARGS)
static int
mdoc_lk_pre(MDOC_ARGS)
{
+ const struct roff_node *link, *descr, *punct;
struct tag *t;
- if ((n = n->child) == NULL)
+ if ((link = n->child) == NULL)
return 0;
+ /* Find beginning of trailing punctuation. */
+ punct = n->last;
+ while (punct != link && punct->flags & NODE_DELIMC)
+ punct = punct->prev;
+ punct = punct->next;
+
/* Link target and link text. */
- t = print_otag(h, TAG_A, "cTh", "Lk", n->string);
- if (n->next == NULL || n->next->flags & NODE_DELIMC)
- print_text(h, n->string);
- for (n = n->next; n != NULL && !(n->flags & NODE_DELIMC); n = n->next)
- print_text(h, n->string);
+ t = print_otag(h, TAG_A, "cTh", "Lk", link->string);
+ for (descr = link->next; descr != punct; descr = descr->next) {
+ if (descr->flags & (NODE_DELIMC | NODE_DELIMO))
+ h->flags |= HTML_NOSPACE;
+ print_text(h, descr->string);
+ }
print_tagq(h, t);
/* Trailing punctuation. */
- while (n != NULL) {
+ while (punct != NULL) {
h->flags |= HTML_NOSPACE;
- print_text(h, n->string);
- n = n->next;
+ print_text(h, punct->string);
+ punct = punct->next;
}
return 0;
}