diff options
-rw-r--r-- | mdoc_html.c | 7 | ||||
-rw-r--r-- | mdoc_macro.c | 25 | ||||
-rw-r--r-- | mdoc_man.c | 9 | ||||
-rw-r--r-- | mdoc_term.c | 7 |
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)) @@ -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); |