[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15189] branches/soc-2008-quorn/source/ blender/blenkernel/intern/text.c: Improvements to whole-word ops ( thanks mindrones for suggestions).
Ian Thompson
quornian at googlemail.com
Tue Jun 10 17:26:01 CEST 2008
Revision: 15189
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15189
Author: quorn
Date: 2008-06-10 17:25:05 +0200 (Tue, 10 Jun 2008)
Log Message:
-----------
Improvements to whole-word ops (thanks mindrones for suggestions).
Modified Paths:
--------------
branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
Modified: branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
===================================================================
--- branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c 2008-06-10 10:32:16 UTC (rev 15188)
+++ branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c 2008-06-10 15:25:05 UTC (rev 15189)
@@ -703,28 +703,58 @@
void txt_jump_left(Text *text, short sel)
{
- TextLine *l;
- int c;
+ TextLine **linep, *oldl;
+ int *charp, oldc, count=-1;
+ unsigned char oldu;
+
if (!text) return;
- if (!text->curl) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_first(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
do {
txt_move_left(text, sel);
- l= sel ? text->sell : text->curl;
- c= sel ? text->selc : text->curc;
- } while (c>0 && c<l->len && !txt_word_boundary(l->line[c-1]));
+ count++;
+ } while (*charp>0 && *charp<(*linep)->len && txt_word_boundary((*linep)->line[*charp-1]));
+ if (!count) {
+ while (*charp>0 && *charp<(*linep)->len && !txt_word_boundary((*linep)->line[*charp-1]))
+ txt_move_left(text, sel);
+ }
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
}
void txt_jump_right(Text *text, short sel)
{
- TextLine *l;
- int c;
+ TextLine **linep, *oldl;
+ int *charp, oldc;
+ unsigned char oldu;
+
if (!text) return;
- if (!text->curl) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_last(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
do {
txt_move_right(text, sel);
- l= sel ? text->sell : text->curl;
- c= sel ? text->selc : text->curc;
- } while (c>0 && c<l->len && !txt_word_boundary(l->line[c-1]));
+ } while (*charp>0 && *charp<(*linep)->len && !txt_word_boundary((*linep)->line[*charp]));
+ while (*charp>0 && *charp<(*linep)->len && txt_word_boundary((*linep)->line[*charp])) {
+ txt_move_right(text, sel);
+ }
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
}
void txt_move_bol (Text *text, short sel)
@@ -2103,16 +2133,8 @@
void txt_delete_word (Text *text)
{
- int i;
- char ch;
- if (!text) return;
- if (!text->curl) return;
- i= text->curc;
- do {
- ch= text->curl->line[i];
- txt_delete_char(text);
- i= text->curc;
- } while (i<text->curl->len && !txt_word_boundary(ch));
+ txt_jump_right(text, 1);
+ txt_delete_sel(text);
}
void txt_backspace_char (Text *text)
@@ -2157,14 +2179,8 @@
void txt_backspace_word (Text *text)
{
- int i;
- if (!text) return;
- if (!text->curl) return;
- i= text->curc;
- do {
- txt_backspace_char(text);
- i= text->curc;
- } while (i>0 && !txt_word_boundary(text->curl->line[i-1]));
+ txt_jump_left(text, 1);
+ txt_delete_sel(text);
}
int txt_add_char (Text *text, char add)
More information about the Bf-blender-cvs
mailing list