]> git.wh0rd.org Git - nano.git/commitdiff
in break_line(), fix a problem where a line could be broken in the
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 20 Sep 2005 06:12:54 +0000 (06:12 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 20 Sep 2005 06:12:54 +0000 (06:12 +0000)
middle of a multibyte character

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

ChangeLog
src/text.c

index f47a0c90eb5c0e054a47239e52f7f053effe9158..0d6b87e6417cfcb820eb205843eadce8314d01a3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -316,6 +316,9 @@ CVS code -
 - text.c:
   do_enter()
        - Don't update the edit window until we set placewewant. (DLR)
+  break_line()
+       - Fix a problem where a line could be broken in the middle of
+         a multibyte character. (DLR)
   do_word_count()
        - Rename to do_wordlinechar_count(), and expand to also count
          the number of lines and characters in the file or selection,
index 4744e2585ebef2a11689140e4aff17b4b36bc288..b151403a2d7cdf4fa28e51bf60ba57e2d65af992 100644 (file)
@@ -559,8 +559,8 @@ bool do_wrap(filestruct *line)
 
 #if !defined(DISABLE_HELP) || !defined(DISABLE_JUSTIFY) || !defined(DISABLE_WRAPPING)
 /* We are trying to break a chunk off line.  We find the last blank such
- * that the display length to there is at most goal + 1.  If there is no
- * such blank, then we find the first blank.  We then take the last
+ * that the display length to there is at most (goal + 1).  If there is
+ * no such blank, then we find the first blank.  We then take the last
  * blank in that group of blanks.  The terminating '\0' counts as a
  * blank, as does a '\n' if newline is TRUE. */
 ssize_t break_line(const char *line, ssize_t goal, bool newline)
@@ -575,9 +575,10 @@ ssize_t break_line(const char *line, ssize_t goal, bool newline)
     assert(line != NULL);
 
     while (*line != '\0' && goal >= 0) {
-       size_t pos = 0;
+       int pos;
 
-       line_len = parse_mbchar(line, NULL, &pos);
+       line_len = parse_mbchar(line, NULL, NULL);
+       pos = mbwidth(line);
 
        if (is_blank_mbchar(line) || (newline && *line == '\n')) {
            blank_loc = cur_loc;
@@ -606,7 +607,7 @@ ssize_t break_line(const char *line, ssize_t goal, bool newline)
                if (!found_blank)
                    found_blank = TRUE;
            } else if (found_blank)
-               return cur_loc - line_len;
+               return move_mbleft(line, cur_loc);
 
            line += line_len;
            cur_loc += line_len;