aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitb85deb01cef03da6ed5386c5a24881bbba2216b2 (patch)
treea2f50414c87131ab5b6592957a8e8f665f938e52 /mdoc_html.c
parenta20be95dec7797c55257792a32b6b39bdbdfe595 (diff)
downloadmandoc-b85deb01cef03da6ed5386c5a24881bbba2216b2.tar.gz
mandoc-b85deb01cef03da6ed5386c5a24881bbba2216b2.tar.zst
mandoc-b85deb01cef03da6ed5386c5a24881bbba2216b2.zip
fix formatting of intermediate punctuation in .Lk
Diffstat (limited to 'mdoc_html.c')
-rw-r--r--mdoc_html.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index f7aefb37..5cbf68aa 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.288 2017/05/17 17:54:45 schwarze Exp $ */
+/* $Id: mdoc_html.c,v 1.289 2017/05/30 16:31:29 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;
}