From 09f9796b85b8ef9a751e43757797ea7ed5d8d282 Mon Sep 17 00:00:00 2001
From: Adam Rogoyski <rogoyski@cs.utexas.edu>
Date: Tue, 20 Jun 2000 02:50:33 +0000
Subject: [PATCH] - check_wrap() more off by one. - do_justify() off by 1 and
 off by 2, and fix numbering and handling off bottom line.

   Wrapping and justify should now do the same thing and agree on what where to wrap everything.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@40 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 nano.c | 67 ++++++++++++++++++++++++++++++----------------------------
 1 file changed, 35 insertions(+), 32 deletions(-)

diff --git a/nano.c b/nano.c
index b88c7927..8d79220b 100644
--- a/nano.c
+++ b/nano.c
@@ -582,7 +582,7 @@ void do_wrap(filestruct *inptr, char input_char)
     int right = 0;
     struct filestruct *temp = NULL;
 
-assert (strlenpt(inptr->data) >= fill);
+assert (strlenpt(inptr->data) > fill);
 
     for (i = 0, i_tabs = 0; i < len; i++, i_tabs++) {
 	if (!isspace(inptr->data[i])) {
@@ -613,11 +613,11 @@ assert (strlenpt(inptr->data) >= fill);
                 i_tabs += TABSIZE - (i_tabs % TABSIZE);
         } 
 
-	if (current_word_end_t >= fill)
+	if (current_word_end_t > fill)
 	    break;
     }
 
-    assert (current_word_end_t >= fill);
+    assert (current_word_end_t > fill);
 
     /* There are a few (ever changing) cases of what the line could look like.
      * 1) only one word on the line before wrap point.
@@ -856,33 +856,28 @@ void check_wrap(filestruct * inptr, char ch)
         int i = actual_x(inptr, fill);
 
 	/* Do not wrap if there are no words on or after wrap point. */
-	/* First check to see if we typed space and passed a word. */
-	if (isspace(ch) && !isspace(inptr->data[i - 1]))
-	    do_wrap(inptr, ch);
-	else {
-	    int char_found = 0;
+	int char_found = 0;
 
-	    while (isspace(inptr->data[i]) && inptr->data[i])
-		i++;
+	while (isspace(inptr->data[i]) && inptr->data[i])
+	    i++;
 	
-	    if (!inptr->data[i])
-		return;
+	if (!inptr->data[i])
+	    return;
 
-		/* String must be at least 1 character long. */
-	    for (i = strlen(inptr->data) - 1; i >= 0; i--) {
-		if (isspace(inptr->data[i])) {
-		    if (!char_found)
-			continue;
-		    char_found = 2;  /* 2 for yes do wrap. */
-		    break;
-		}
-		else
-		    char_found = 1;  /* 1 for yes found a word, but must check further. */
+	/* String must be at least 1 character long. */
+	for (i = strlen(inptr->data) - 1; i >= 0; i--) {
+	    if (isspace(inptr->data[i])) {
+		if (!char_found)
+		    continue;
+		char_found = 2;  /* 2 for yes do wrap. */
+		break;
 	    }
-
-	    if (char_found == 2)
-		do_wrap(inptr, ch);
+	    else
+		char_found = 1;  /* 1 for yes found a word, but must check further. */
 	}
+
+	if (char_found == 2)
+	    do_wrap(inptr, ch);
     }
 }
 
@@ -1437,17 +1432,17 @@ int do_justify(void)
     justify_format(current->data);
 
     slen = strlen(current->data);
-    while ((strlenpt(current->data) > (fill + 1))
+    while ((strlenpt(current->data) > (fill))
 	   && !no_spaces(current->data)) {
 	int i = 0;
 	int len2 = 0;
 	filestruct *tmpline = nmalloc(sizeof(filestruct));
 
-	/* Start at fill + 2, unless line isn't that long (but it appears at least
-	 * fill + 2 long with tabs.
+	/* Start at fill , unless line isn't that long (but it appears at least
+	 * fill long with tabs.
 	 */
-	if (slen > (fill + 2))
-	    i = fill + 2;
+	if (slen > fill)
+	    i = fill;
 	else
 	    i = slen;
 	for (; i > 0; i--) {
@@ -1480,13 +1475,19 @@ int do_justify(void)
 	current_y++;
     }
 
-    renumber(initial);
 
     if (current->next)
 	current = current->next;
+    else
+	filebot = current;
     current_x = 0;
     placewewant = 0;
 
+    renumber(initial);
+    totlines = filebot->lineno;
+
+    werase(edit);
+
     if ((current_y < 0) || (current_y >= editwinrows - 1) || (initial_y <= 0)) {
 	edit_update(current);
 	center_cursor();
@@ -1497,9 +1498,11 @@ int do_justify(void)
 	for (i = 0; (i <= editwinrows - 1) && (editbot->next != NULL)
 	     && (editbot->next != filebot); i++)
 	    editbot = editbot->next;
-	edit_refresh();
     }
 
+
+    edit_refresh();
+    edit_refresh();  /* XXX FIXME XXX */
     statusbar("Justify Complete");
     return 1;
 #else
-- 
GitLab