source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Commit of patch floated on discuss@ a few days ago: if an
@ 2010-05-29 18:47 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2010-05-29 18:47 UTC (permalink / raw)
  To: source

Log Message:
-----------
Commit of patch floated on discuss@ a few days ago: if an in_line scope
has not been opened and closing punctuation is encountered AND the macro
is marked as accepting no-content (or `Li'), then open an empty scope.

Added regression tests for `Fl' and `Li' testing this behaviour.

Also, squeeze hyph0.in tests into the last characters of each line so
that groff doesn't hyphenate and break the test.

Modified Files:
--------------
    mdocml:
        mdoc_html.c
        mdoc_macro.c
        mdoc_term.c
    mdocml/regress/mdoc/punct:
        hyph0.in

Added Files:
-----------
    mdocml/regress/mdoc/Fl:
        empty.in
    mdocml/regress/mdoc/Li:
        empty.in
        empty2.in

Revision Data
-------------
Index: mdoc_macro.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_macro.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -Lmdoc_macro.c -Lmdoc_macro.c -u -p -r1.69 -r1.70
--- mdoc_macro.c
+++ 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);
 
 	/*
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.67 -r1.68
--- mdoc_html.c
+++ 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);
 }
 
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.131
retrieving revision 1.132
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.131 -r1.132
--- mdoc_term.c
+++ 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);
 }
 
--- /dev/null
+++ 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 )
--- /dev/null
+++ 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: May 29 2010 $
+.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
--- /dev/null
+++ 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 )
Index: hyph0.in
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/regress/mdoc/punct/hyph0.in,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/mdoc/punct/hyph0.in -Lregress/mdoc/punct/hyph0.in -u -p -r1.1 -r1.2
--- regress/mdoc/punct/hyph0.in
+++ 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
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-05-29 18:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-29 18:47 mdocml: Commit of patch floated on discuss@ a few days ago: if an kristaps

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).