summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdoc_html.c7
-rw-r--r--mdoc_macro.c25
-rw-r--r--mdoc_man.c9
-rw-r--r--mdoc_term.c7
4 files changed, 26 insertions, 22 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index 5c26f7ea..3adea09f 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -640,9 +640,10 @@ mdoc_fl_pre(MDOC_ARGS)
print_text(h, "\\-");
- if (n->child)
- h->flags |= HTML_NOSPACE;
- else if (n->next && n->next->line == n->line)
+ if ( ! (n->nchild == 0 &&
+ (n->next == NULL ||
+ n->next->type == MDOC_TEXT ||
+ n->next->flags & MDOC_LINE)))
h->flags |= HTML_NOSPACE;
return(1);
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 36bd8a09..30b5818c 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -843,7 +843,7 @@ blk_exp_close(MACRO_PROT_ARGS)
static int
in_line(MACRO_PROT_ARGS)
{
- int la, scope, cnt, nc, nl;
+ int la, scope, cnt, mayopen, nc, nl;
enum margverr av;
enum mdoct ntok;
enum margserr ac;
@@ -894,6 +894,7 @@ in_line(MACRO_PROT_ARGS)
return(0);
}
+ mayopen = 1;
for (cnt = scope = 0;; ) {
la = *pos;
ac = mdoc_args(mdoc, line, pos, buf, tok, &p);
@@ -950,19 +951,19 @@ in_line(MACRO_PROT_ARGS)
* If we encounter closing punctuation, no word
* has been omitted, no scope is open, and we're
* allowed to have an empty element, then start
- * a new scope. `Ar', `Fl', and `Li', only do
- * this once per invocation. There may be more
- * of these (all of them?).
+ * a new scope.
*/
- if (0 == cnt && (nc || MDOC_Li == tok) &&
- DELIM_CLOSE == d && ! scope) {
+ if ((d == DELIM_CLOSE ||
+ (d == DELIM_MIDDLE && tok == MDOC_Fl)) &&
+ (nc || tok == MDOC_Li) &&
+ !scope && !cnt && mayopen) {
if ( ! mdoc_elem_alloc(mdoc,
line, ppos, tok, arg))
return(0);
- if (MDOC_Ar == tok || MDOC_Li == tok ||
- MDOC_Fl == tok)
- cnt++;
scope = 1;
+ cnt++;
+ if (MDOC_Li == tok || MDOC_Nm == tok)
+ mayopen = 0;
}
/*
* Close out our scope, if one is open, before
@@ -971,14 +972,12 @@ in_line(MACRO_PROT_ARGS)
if (scope && ! rew_elem(mdoc, tok))
return(0);
scope = 0;
- } else if ( ! scope) {
+ } else if (mayopen && !scope) {
if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg))
return(0);
scope = 1;
- }
-
- if (DELIM_NONE == d)
cnt++;
+ }
if ( ! dword(mdoc, line, la, p, d,
MDOC_JOIN & mdoc_macros[tok].flags))
diff --git a/mdoc_man.c b/mdoc_man.c
index 9855c41e..50999427 100644
--- a/mdoc_man.c
+++ b/mdoc_man.c
@@ -1166,7 +1166,8 @@ pre_fl(DECL_ARGS)
font_push('B');
print_word("\\-");
- outflags &= ~MMAN_spc;
+ if (n->nchild)
+ outflags &= ~MMAN_spc;
return(1);
}
@@ -1175,8 +1176,10 @@ post_fl(DECL_ARGS)
{
font_pop();
- if (0 == n->nchild && NULL != n->next &&
- n->next->line == n->line)
+ if ( ! (n->nchild ||
+ n->next == NULL ||
+ n->next->type == MDOC_TEXT ||
+ n->next->flags & MDOC_LINE))
outflags &= ~MMAN_spc;
}
diff --git a/mdoc_term.c b/mdoc_term.c
index ea7c0d3b..4b4c4248 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -1075,9 +1075,10 @@ termp_fl_pre(DECL_ARGS)
term_fontpush(p, TERMFONT_BOLD);
term_word(p, "\\-");
- if (n->child)
- p->flags |= TERMP_NOSPACE;
- else if (n->next && n->next->line == n->line)
+ if ( ! (n->nchild == 0 &&
+ (n->next == NULL ||
+ n->next->type == MDOC_TEXT ||
+ n->next->flags & MDOC_LINE)))
p->flags |= TERMP_NOSPACE;
return(1);