source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: sync to OpenBSD: save the visual cursor position in
@ 2010-05-24 21:51 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2010-05-24 21:51 UTC (permalink / raw)
  To: source

Log Message:
-----------
sync to OpenBSD:
save the visual cursor position in term_flushln()
and use that to avoid multiple blank lines in nested lists while 
still putting subsequent empty list tags each on their own line;
"go ahead" kristaps@

Modified Files:
--------------
    mdocml:
        term.h
        term.c
        mdoc_term.c

Revision Data
-------------
Index: term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.c,v
retrieving revision 1.138
retrieving revision 1.139
diff -Lterm.c -Lterm.c -u -p -r1.138 -r1.139
--- term.c
+++ term.c
@@ -207,10 +207,12 @@ term_flushln(struct termp *p)
 			vend -= vis;
 			putchar('\n');
 			if (TERMP_NOBREAK & p->flags) {
+				p->viscol = p->rmargin;
 				for (j = 0; j < (int)p->rmargin; j++)
 					putchar(' ');
 				vend += p->rmargin - p->offset;
 			} else {
+				p->viscol = 0;
 				vbl = p->offset;
 			}
 
@@ -251,9 +253,11 @@ term_flushln(struct termp *p)
 			if (vbl) {
 				for (j = 0; j < (int)vbl; j++)
 					putchar(' ');
+				p->viscol += vbl;
 				vbl = 0;
 			}
 			putchar(p->buf[i]);
+			p->viscol += 1;
 		}
 		vend += vbl;
 		vis = vend;
@@ -263,6 +267,7 @@ term_flushln(struct termp *p)
 	p->overstep = 0;
 
 	if ( ! (TERMP_NOBREAK & p->flags)) {
+		p->viscol = 0;
 		putchar('\n');
 		return;
 	}
@@ -294,11 +299,13 @@ term_flushln(struct termp *p)
 
 	/* Right-pad. */
 	if (maxvis > vis + /* LINTED */
-			((TERMP_TWOSPACE & p->flags) ? 1 : 0))  
+			((TERMP_TWOSPACE & p->flags) ? 1 : 0)) {
+		p->viscol += maxvis - vis;
 		for ( ; vis < maxvis; vis++)
 			putchar(' ');
-	else {	/* ...or newline break. */
+	} else {	/* ...or newline break. */
 		putchar('\n');
+		p->viscol = p->rmargin;
 		for (i = 0; i < (int)p->rmargin; i++)
 			putchar(' ');
 	}
@@ -315,7 +322,7 @@ term_newln(struct termp *p)
 {
 
 	p->flags |= TERMP_NOSPACE;
-	if (0 == p->col) {
+	if (0 == p->col && 0 == p->viscol) {
 		p->flags &= ~TERMP_NOLPAD;
 		return;
 	}
@@ -335,6 +342,7 @@ term_vspace(struct termp *p)
 {
 
 	term_newln(p);
+	p->viscol = 0;
 	putchar('\n');
 }
 
Index: term.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.h,v
retrieving revision 1.56
retrieving revision 1.57
diff -Lterm.h -Lterm.h -u -p -r1.56 -r1.57
--- term.h
+++ term.h
@@ -39,6 +39,7 @@ struct	termp {
 	size_t		  offset;	/* Margin offest. */
 	size_t		  tabwidth;	/* Distance of tab positions. */
 	size_t		  col;		/* Bytes in buf. */
+	size_t		  viscol;	/* Chars on current line. */
 	int		  overstep;	/* See termp_flushln(). */
 	int		  flags;
 #define	TERMP_SENTENCE	 (1 << 1)	/* Space before a sentence. */
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.129
retrieving revision 1.130
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.129 -r1.130
--- mdoc_term.c
+++ mdoc_term.c
@@ -1014,14 +1014,14 @@ termp_it_post(DECL_ARGS)
 		/* FALLTHROUGH */
 	case (LIST_inset):
 		if (MDOC_BODY == n->type)
-			term_flushln(p);
+			term_newln(p);
 		break;
 	case (LIST_column):
 		if (MDOC_HEAD == n->type)
 			term_flushln(p);
 		break;
 	default:
-		term_flushln(p);
+		term_newln(p);
 		break;
 	}
 
@@ -1633,11 +1633,9 @@ termp_bd_pre(DECL_ARGS)
 	for (nn = n->child; nn; nn = nn->next) {
 		p->flags |= TERMP_NOSPACE;
 		print_mdoc_node(p, pair, m, nn);
-		if (NULL == nn->next)
-			continue;
-		if (nn->prev && nn->prev->line < nn->line)
-			term_flushln(p);
-		else if (NULL == nn->prev)
+		if (NULL == nn->prev ||
+		    nn->prev->line < nn->line ||
+		    NULL == nn->next)
 			term_flushln(p);
 	}
 	p->tabwidth = tabwidth;
@@ -1668,7 +1666,7 @@ termp_bd_post(DECL_ARGS)
 		p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
 
 	p->flags |= TERMP_NOSPACE;
-	term_flushln(p);
+	term_newln(p);
 
 	p->rmargin = rm;
 	p->maxrmargin = rmax;
--
 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-24 21:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-24 21:51 mdocml: sync to OpenBSD: save the visual cursor position in schwarze

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).