]> git.wh0rd.org Git - nano.git/commitdiff
in find_paragraph(), add parameter begin, the line that we can't move
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 29 Nov 2005 18:25:53 +0000 (18:25 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 29 Nov 2005 18:25:53 +0000 (18:25 +0000)
further back than when searching for a paragraph; this is needed to
ensure that we don't justify the same lines more than once if
auto-indent is turned on, and the indentation of what should be the
previous paragraph matches that of what should be the current paragraph

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3224 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/proto.h
src/text.c

index c47f58fdee0e09bdbd9cfb9577ed17d28d10455f..7c9a05ff522ad95fbd79c5b24d280adbb4f2d75b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -206,6 +206,13 @@ CVS code -
          text is copied and so can be used instead of the old return
          value. (DLR)
        - Remove unused quote_len parameter. (DLR)
+  find_paragraph()
+       - Add parameter begin, the line that we can't move further back
+         than when searching for a paragraph.  This is needed to ensure
+         that we don't justify the same lines more than once if
+         auto-indent is turned on, and the indentation of what should
+         be the previous paragraph matches that of what should be the
+         current paragraph. (DLR)
   do_justify()
        - Don't save current_y and restore it if the user unjustifies,
          as the reset_cursor() called by edit_refresh() after restoring
index e442d144088aa4f029af0b170b1415ed451dae4b..41f4bcc688c6d4f38e36024f09d75a2422db8e95 100644 (file)
@@ -583,7 +583,8 @@ bool indents_match(const char *a_line, size_t a_indent, const char
 bool begpar(const filestruct *const foo);
 bool inpar(const filestruct *const foo);
 void backup_lines(filestruct *first_line, size_t par_len);
-bool find_paragraph(size_t *const quote, size_t *const par);
+bool find_paragraph(filestruct *begin, size_t *const quote, size_t
+       *const par);
 void do_justify(bool full_justify);
 void do_justify_void(void);
 void do_full_justify(void);
index 38448f813dffdff585bb8dcc1ea710b80041067e..55f958cdfea3f7f9f2d62362a99f5fed82be1f39 100644 (file)
@@ -1066,15 +1066,17 @@ void backup_lines(filestruct *first_line, size_t par_len)
     set_modified();
 }
 
-/* Find the beginning of the current paragraph if we're in one, or the
- * beginning of the next paragraph if we're not.  Afterwards, save the
- * quote length and paragraph length in *quote and *par.  Return TRUE if
- * we found a paragraph, or FALSE if there was an error or we didn't
- * find a paragraph.
+/* Find the beginning of the current paragraph if we're in one (not
+ * going any further back than begin), or the beginning of the next
+ * paragraph if we're not.  Afterwards, save the quote length and
+ * paragraph length in *quote and *par.  Return TRUE if we found a
+ * paragraph, or FALSE if there was an error or we didn't find a
+ * paragraph.
  *
  * See the comment at begpar() for more about when a line is the
  * beginning of a paragraph. */
-bool find_paragraph(size_t *const quote, size_t *const par)
+bool find_paragraph(filestruct *begin, size_t *const quote, size_t
+       *const par)
 {
     size_t quote_len;
        /* Length of the initial quotation of the paragraph we search
@@ -1106,6 +1108,7 @@ bool find_paragraph(size_t *const quote, size_t *const par)
      * last line of the next paragraph, if any. */
     if (!inpar(openfile->current)) {
        do_para_end(FALSE);
+
        /* If we end up past the beginning of the line, it means that
         * we're at the end of the last line of the file, and the line
         * isn't blank, in which case the last line of the file is the
@@ -1122,10 +1125,18 @@ bool find_paragraph(size_t *const quote, size_t *const par)
                openfile->current = openfile->current->prev;
        }
     }
+
     /* If the current line isn't the first line of the paragraph, move
-     * back to the first line of the paragraph. */
-    if (!begpar(openfile->current))
+     * back to the first line of the paragraph.  If we go further back
+     * than begin, move forward to begin. */
+    if (!begpar(openfile->current)) {
        do_para_begin(FALSE);
+       if (openfile->current->lineno < begin->lineno) {
+           openfile->current_y += begin->lineno -
+               openfile->current->lineno;
+           openfile->current = begin;
+       }
+    }
 
     /* Now current is the first line of the paragraph.  Set quote_len to
      * the quotation length of that line, and set par_len to the number
@@ -1135,6 +1146,7 @@ bool find_paragraph(size_t *const quote, size_t *const par)
     current_y_save = openfile->current_y;
     do_para_end(FALSE);
     par_len = openfile->current->lineno - current_save->lineno;
+
     /* If we end up past the beginning of the line, it means that we're
      * at the end of the last line of the file, and the line isn't
      * blank, in which case the last line of the file is part of the
@@ -1221,6 +1233,13 @@ void do_justify(bool full_justify)
         * length (number of lines).  Don't refresh the screen yet,
         * since we'll do that after we justify.
         *
+        * When searching for a paragraph, don't go further back than
+        * fileage if it's the first search, or current if it isn't.
+        * This ensures that we don't justify the same lines more than
+        * once if auto-indent is turned on, and the indentation of
+        * what should be the previous paragraph matches that of what
+        * should be the current paragraph.
+        *
         * If the search failed, we do one of two things.  If we're
         * justifying the whole file, and we've found at least one
         * paragraph, it means that we should justify all the way to the
@@ -1228,7 +1247,9 @@ void do_justify(bool full_justify)
         * justified to the last line of the file and break out of the
         * loop.  Otherwise, it means that there are no paragraph(s) to
         * justify, so refresh the screen and get out. */
-       if (!find_paragraph(&quote_len, &par_len)) {
+       if (!find_paragraph((first_par_line == NULL) ?
+               openfile->fileage : openfile->current, &quote_len,
+               &par_len)) {
            if (full_justify && first_par_line != NULL) {
                last_par_line = openfile->filebot;
                break;