Word selection in the Text Editor:
authorSv. Lockal <lockalsash@gmail.com>
Mon, 30 Apr 2012 13:14:15 +0000 (13:14 +0000)
committerSv. Lockal <lockalsash@gmail.com>
Mon, 30 Apr 2012 13:14:15 +0000 (13:14 +0000)
* Fix word selection for words with multibyte characters. No need to call txt_move_left() or txt_move_right(), because these functions work with symbols, not bytes
* Word selection now treats tabs the same way as spaces. Also useful for words with multibyte characters

source/blender/blenkernel/intern/text.c
source/blender/blenlib/intern/string_cursor_utf8.c

index 31278ab53aab9048ecb7449b976ae60afc59b4cc..85ecc7c204d4014f4c9b6132ae02b1639a078a18 100644 (file)
@@ -957,9 +957,8 @@ void txt_move_right(Text *text, short sel)
 void txt_jump_left(Text *text, short sel)
 {
        TextLine **linep, *oldl;
-       int *charp, oldc, oldflags, i;
+       int *charp, oldc, oldflags;
        unsigned char oldu;
-       int pos;
 
        if (!text) return;
        if (sel) txt_curs_sel(text, &linep, &charp);
@@ -974,13 +973,9 @@ void txt_jump_left(Text *text, short sel)
        oldu= undoing;
        undoing= 1; /* Don't push individual moves to undo stack */
 
-       pos = *charp;
        BLI_str_cursor_step_utf8((*linep)->line, (*linep)->len,
-                                &pos, STRCUR_DIR_PREV,
+                             charp, STRCUR_DIR_PREV,
                                 STRCUR_JUMP_DELIM);
-       for (i = *charp; i > pos; i--) {
-               txt_move_left(text, sel);
-       }
 
        text->flags = oldflags;
 
@@ -991,9 +986,8 @@ void txt_jump_left(Text *text, short sel)
 void txt_jump_right(Text *text, short sel)
 {
        TextLine **linep, *oldl;
-       int *charp, oldc, oldflags, i;
+       int *charp, oldc, oldflags;
        unsigned char oldu;
-       int pos;
 
        if (!text) return;
        if (sel) txt_curs_sel(text, &linep, &charp);
@@ -1008,13 +1002,9 @@ void txt_jump_right(Text *text, short sel)
        oldu= undoing;
        undoing= 1; /* Don't push individual moves to undo stack */
 
-       pos = *charp;
        BLI_str_cursor_step_utf8((*linep)->line, (*linep)->len,
-                                &pos, STRCUR_DIR_NEXT,
+                             charp, STRCUR_DIR_NEXT,
                                 STRCUR_JUMP_DELIM);
-       for (i = *charp; i < pos; i++) {
-               txt_move_right(text, sel);
-       }
 
        text->flags = oldflags;
 
index 97559d6ba1073042dfff34c0c74283d4745c7344..422a600e51ca3f83671e27bad294fc26c3ce7bc7 100644 (file)
@@ -93,6 +93,7 @@ static strCursorDelimType test_special_char(const char *ch_utf8)
                        return STRCUR_DELIM_QUOTE;
 
                case ' ':
+               case '\t':
                        return STRCUR_DELIM_WHITESPACE;
 
                case '\\':