diff options
-rw-r--r-- | mdoc_html.c | 2 | ||||
-rw-r--r-- | mdoc_macro.c | 43 | ||||
-rw-r--r-- | mdoc_term.c | 2 | ||||
-rw-r--r-- | regress/mdoc/Fl/empty.in | 15 | ||||
-rw-r--r-- | regress/mdoc/Li/empty.in | 14 | ||||
-rw-r--r-- | regress/mdoc/Li/empty2.in | 40 | ||||
-rw-r--r-- | regress/mdoc/punct/hyph0.in | 8 |
7 files changed, 108 insertions, 16 deletions
diff --git a/mdoc_html.c b/mdoc_html.c index 22011403..e0db3832 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -2091,6 +2091,8 @@ mdoc_li_pre(MDOC_ARGS) PAIR_CLASS_INIT(&tag, "lit"); print_otag(h, TAG_SPAN, 1, &tag); + if (NULL == n->child) + print_text(h, ""); return(1); } diff --git a/mdoc_macro.c b/mdoc_macro.c index f091a015..bb89b25a 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -754,7 +754,7 @@ blk_exp_close(MACRO_PROT_ARGS) static int in_line(MACRO_PROT_ARGS) { - int la, lastpunct, cnt, nc, nl; + int la, scope, cnt, nc, nl; enum margverr av; enum mdoct ntok; enum margserr ac; @@ -805,7 +805,7 @@ in_line(MACRO_PROT_ARGS) return(0); } - for (cnt = 0, lastpunct = 1;; ) { + for (cnt = scope = 0;; ) { la = *pos; ac = mdoc_args(m, line, pos, buf, tok, &p); @@ -826,7 +826,7 @@ in_line(MACRO_PROT_ARGS) */ if (MDOC_MAX != ntok) { - if (0 == lastpunct && ! rew_elem(m, tok)) + if (scope && ! rew_elem(m, tok)) return(0); if (nc && 0 == cnt) { if ( ! mdoc_elem_alloc(m, line, ppos, tok, arg)) @@ -853,14 +853,35 @@ in_line(MACRO_PROT_ARGS) d = ARGS_QWORD == ac ? DELIM_NONE : mdoc_isdelim(p); - if (ARGS_QWORD != ac && DELIM_NONE != d) { - if (0 == lastpunct && ! rew_elem(m, tok)) + if (DELIM_NONE != d) { + /* + * 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?). + */ + if (0 == cnt && (nc || MDOC_Li == tok) && + DELIM_CLOSE == d && ! scope) { + if ( ! mdoc_elem_alloc(m, line, ppos, tok, arg)) + return(0); + if (MDOC_Ar == tok || MDOC_Li == tok || + MDOC_Fl == tok) + cnt++; + scope = 1; + } + /* + * Close out our scope, if one is open, before + * any punctuation. + */ + if (scope && ! rew_elem(m, tok)) return(0); - lastpunct = 1; - } else if (lastpunct) { + scope = 0; + } else if ( ! scope) { if ( ! mdoc_elem_alloc(m, line, ppos, tok, arg)) return(0); - lastpunct = 0; + scope = 1; } if (DELIM_NONE == d) @@ -873,14 +894,14 @@ in_line(MACRO_PROT_ARGS) * word so that the `-' can be added to each one without * having to parse out spaces. */ - if (0 == lastpunct && MDOC_Fl == tok) { + if (scope && MDOC_Fl == tok) { if ( ! rew_elem(m, tok)) return(0); - lastpunct = 1; + scope = 0; } } - if (0 == lastpunct && ! rew_elem(m, tok)) + if (scope && ! rew_elem(m, tok)) return(0); /* diff --git a/mdoc_term.c b/mdoc_term.c index 943a880d..65c39277 100644 --- a/mdoc_term.c +++ b/mdoc_term.c @@ -2098,6 +2098,8 @@ termp_li_pre(DECL_ARGS) { term_fontpush(p, TERMFONT_NONE); + if (NULL == n->child) + term_word(p, ""); return(1); } diff --git a/regress/mdoc/Fl/empty.in b/regress/mdoc/Fl/empty.in new file mode 100644 index 00000000..bfda2dcb --- /dev/null +++ b/regress/mdoc/Fl/empty.in @@ -0,0 +1,15 @@ +.Dd May 16, 2010 +.Dt FOO 1 +.Os +.Sh NAME +.Nm foo +.Nd bar +.Sh DESCRIPTION +.Fl . a +.Pp +.Fl ; +.Pp +.Ar expr1 Fl : expr2 +.Pp +.Ar expr1 Fl . ; expr2 ( expr3 ) +.Ar expr1 Fl . ; ) ( expr3 ) diff --git a/regress/mdoc/Li/empty.in b/regress/mdoc/Li/empty.in new file mode 100644 index 00000000..64fa6add --- /dev/null +++ b/regress/mdoc/Li/empty.in @@ -0,0 +1,14 @@ +.Dd May 16, 2010 +.Dt FOO 1 +.Os +.Sh NAME +.Nm foo +.Nd bar +.Sh DESCRIPTION +.Li . a +.Pp +.Li ; +.Pp +.Ar expr1 Li : expr2 +.Pp +.Ar expr1 Li . ; expr2 ( expr3 ) diff --git a/regress/mdoc/Li/empty2.in b/regress/mdoc/Li/empty2.in new file mode 100644 index 00000000..2986f0f6 --- /dev/null +++ b/regress/mdoc/Li/empty2.in @@ -0,0 +1,40 @@ +.\" $OpenBSD: bgpd.conf.5,v 1.88 2008/03/22 08:38:38 claudio Exp $ +.\" +.\" Copyright (c) 2004 Claudio Jeker <claudio@openbsd.org> +.\" Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> +.\" Copyright (c) 2002 Daniel Hartmeier <dhartmei@openbsd.org> +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd $Mdocdate$ +.Dt BGPD.CONF 5 +.Os +.Sh NAME +.Nm bgpd.conf +.Nd Border Gateway Protocol daemon configuration file +.Sh DESCRIPTION +The +.Ar address Ns Li / Ns Ar prefix +.Pp +.Ar as-number Ns Li \&: Ns Ar local +.Pp +.Ar as-number Ns Li : Ns Ar local , +.Pp +.Ar address Ns Li / Ns Ar len +.Pp +.Ar address Ns Li / Ns Ar len +.Pp +.Ar as-number Ns Li : Ns Ar local +.Pp +.Ar as-number Ns Li : Ns Ar local , +where diff --git a/regress/mdoc/punct/hyph0.in b/regress/mdoc/punct/hyph0.in index b1021f94..e989c726 100644 --- a/regress/mdoc/punct/hyph0.in +++ b/regress/mdoc/punct/hyph0.in @@ -5,16 +5,14 @@ .Nm foo .Nd bar .Sh DESCRIPTION -asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasf d-asdf +aasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasf d-asdf .Pp -asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasf d\(hyasdf +aasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasf d\(hyasdf .Pp asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasf d--yasdf .Pp asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadfhsasf d---yasdf .Pp -asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadfhsasf "d-yasdf" +aaasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadfhsasf "d-yasdf" .Pp asdflkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadfhsasf d\-yasdf -.Pp -.Qq lkjhasdflkjhasdflkjhasdflkjhasdflkjhasdflkjhsadflkjhsadflkjhasfasas d-asdf |