diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 9f22e284..6697a10c 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -1197,6 +1197,7 @@ var EditSession = function(text, mode) { CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, + PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; @@ -1240,7 +1241,7 @@ var EditSession = function(text, mode) { // a split is simple. if (tokens[split] >= SPACE) { // Include all following spaces + tabs in this split as well. - while (tokens[split] >= SPACE) { + while (tokens[split] >= SPACE) { split ++; } addSplit(split); @@ -1295,16 +1296,16 @@ var EditSession = function(text, mode) { } // === ELSE === - // Search for the first non space/tab/placeholder token backwards. - for (split; split != lastSplit - 1; split--) { - if (tokens[split] >= PLACEHOLDER_START) { - split++; - break; - } + // Search for the first non space/tab/placeholder/punctuation token backwards. + var minSplit = Math.max(split - 10, lastSplit - 1); + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split --; } // If we found one, then add the split. - if (split > lastSplit) { - addSplit(split); + if (split > minSplit) { + while(split > minSplit && tokens[split] == PUNCTUATION) + split --; + addSplit(++split); continue; } @@ -1312,7 +1313,7 @@ var EditSession = function(text, mode) { split = lastSplit + wrapLimit; // The split is inside of a CHAR or CHAR_EXT token and no space // around -> force a split. - addSplit(lastSplit + wrapLimit); + addSplit(split); } return splits; } @@ -1338,11 +1339,13 @@ var EditSession = function(text, mode) { } } // Space - else if(c == 32) { + else if (c == 32) { arr.push(SPACE); + } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { + arr.push(PUNCTUATION); } // full width characters - else if (isFullWidth(c)) { + else if (c >= 0x1100 && isFullWidth(c)) { arr.push(CHAR, CHAR_EXT); } else { arr.push(CHAR); @@ -1378,7 +1381,7 @@ var EditSession = function(text, mode) { screenColumn += this.getScreenTabSize(screenColumn); } // full width characters - else if (isFullWidth(c)) { + else if (c >= 0x1100 && isFullWidth(c)) { screenColumn += 2; } else { screenColumn += 1;