Revision: 3488
          http://vexi.svn.sourceforge.net/vexi/?rev=3488&view=rev
Author:   clrg
Date:     2009-04-25 00:01:22 +0000 (Sat, 25 Apr 2009)

Log Message:
-----------
Finish fixing copy/paste issues

Modified Paths:
--------------
    trunk/widgets/org.vexi.widgets/src/org/vexi/lib/text/edit.t

Modified: trunk/widgets/org.vexi.widgets/src/org/vexi/lib/text/edit.t
===================================================================
--- trunk/widgets/org.vexi.widgets/src/org/vexi/lib/text/edit.t 2009-04-24 
17:29:20 UTC (rev 3487)
+++ trunk/widgets/org.vexi.widgets/src/org/vexi/lib/text/edit.t 2009-04-25 
00:01:22 UTC (rev 3488)
@@ -410,7 +410,7 @@
             var _cp = cPos;
             var _sp = sPos;
             
-            // flip vars if needed
+            // flip vars so s->c is always true; simplifies it
             var tmp;
             if (sbi==cbi?(cwi==swi?_sp>_cp:swi>cwi):sbi>cbi) {
                 tmp = cbi; cbi = sbi; sbi = tmp;    // block
@@ -419,39 +419,45 @@
                 tmp = _cw; _cw = _sw; _sw = tmp;    // *Word
                 tmp = _cb; _cb = _sb; _sb = tmp;    // *Block
             }
-            
-            // grab text from s->c
-            var str = "";
 
             // single word select
-            if (_sw != null and _sw == _cw) {
-                str = str + _sw.text.substring(_sp, _cp);
+            if (_sw != null and _sw == _cw)
+                return _sw.text.substring(_sp, _cp);
             
+            // grab text from s->c
+            var str = [];
+            var j = 0;
+            
             // single block select
-            } else if (_sb == _cb) {
+            if (_sb == _cb) {
                 if (_sw == null) return "";
-                str = str + _sw.text.substring(_sp, _sw.text.length);
-                var i2 = _sb.indexof(_cw);
-                for (var i = _sb.indexof(_sw)+1; i2 > i; i++) str = str + 
_sb[i].text;
-                str = str + _cw.text.substring(0, _cp);
+                str[j++] = _sw.text.substring(_sp, _sw.text.length);
+                var cwi = _sb.indexof(_cw);
+                for (var i = _sb.indexof(_sw)+1; cwi > i; i++)
+                    str[j++] = _sb[i].text;
+                str[j++] = _cw.text.substring(0, _cp);
             
             // multi-block select
             } else {
                 if (_sw) {
-                    str = str + _sw.text.substring(_sp);
-                    str = str + static.getTextFromWord(_sb, _sb.indexof(_sw)) 
+ '\n';
+                    str[j++] = _sw.text.substring(_sp);
+                    str[j++] = static.getTextFromWord(_sb, _sb.indexof(_sw));
                 }
+                str[j++] = '\n';
                 if (thisbox.indexof(_cb) > thisbox.indexof(_sb)+1) {
                     var b2 = thisbox.indexof(_cb);
-                    for (var b = thisbox.indexof(_sb)+1; b2 > b; b++)
-                        str = str + thisbox[b].text + '\n';
+                    for (var b = thisbox.indexof(_sb)+1; b2 > b; b++) {
+                        str[j++] = thisbox[b].text;
+                        str[j++] = '\n';
+                    }
                 }
                 if (_cw) {
-                    str = str + static.getTextUpToWord(_cb, _cb.indexof(_cw)) 
+ _cw.text.substring(0, _cp);
+                    str[j++] = static.getTextUpToWord(_cb, _cb.indexof(_cw));
+                    str[j++] = _cw.text.substring(0, _cp);
                 }
             }
             
-            return str;
+            return str.join("");
         }
         
         /** inserts text at the point cBlock.cWord[cPos] */
@@ -511,8 +517,8 @@
                 cBlock.text = head ? head + blocks[0] : blocks[0];
                 // intervening portion of blocks
                 var tmpb;
-                var l = blocks.length;
-                for (var i=1; l>i+1; i++) {
+                var l = blocks.length-1;
+                for (var i=1; l>i; i++) {
                     tmpb = .block(vexi.box, blockargs);
                     tmpb.text = blocks[i];
                     thisbox[cbi+i] = tmpb;
@@ -523,11 +529,11 @@
                 // same text twice to a block with the addition
                 // of the 'tail' text the second time
                 tmpb = .block(vexi.box, blockargs);
-                tmpb.text = blocks[l-1];
+                tmpb.text = blocks[l];
                 cwi = tmpb.numchildren ? tmpb.numchildren-1 : 0;
-                if (tail) tmpb.text = blocks[l-1] + tail;
+                if (tail) tmpb.text = blocks[l] + tail;
                 cwt = tmpb[cwi]; cwt = cwt ? cwt.text : "";
-                thisbox[cbi+i] = tmpb;
+                thisbox[cbi+l] = tmpb;
                 cBlock = tmpb;
                 cWord = tmpb[cwi];
             }
@@ -539,7 +545,7 @@
             else if (cwi == cBlock.numchildren-1)
                 cPos = cwt.length;
             else {
-                cWord = tmpb[cwi+1];
+                cWord = cBlock[cwi+1];
                 cPos = 0;
             }
         }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to