From 4e21d9edd8e29d18021e9b156da04f8f7bc0c46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=20=E6=B7=BC?= Date: Tue, 25 Jan 2011 20:50:30 +0800 Subject: [PATCH] fix multi byte rendering (cursor position, selection) --- editor-build.html | 14 +++++--- lib/ace/edit_session.js | 67 ++++++++++++++++++++----------------- lib/ace/layer/text.js | 11 ++++++ lib/ace/virtual_renderer.js | 23 +++++++++++++ static.py | 2 +- 5 files changed, 81 insertions(+), 36 deletions(-) diff --git a/editor-build.html b/editor-build.html index da01e173..b506decc 100644 --- a/editor-build.html +++ b/editor-build.html @@ -78,7 +78,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -100,7 +100,7 @@ - + @@ -118,7 +118,9 @@ - +
+ info +
@@ -163,6 +165,7 @@ import string, sys if len(sys.argv)==1: print 'Usage: celsius temp1 temp2 ...' sys.exit(0) + print '这里是中文' # Loop over the arguments for i in sys.argv[1:]: @@ -200,6 +203,9 @@ echo $output; diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 1177e245..3d768a58 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -241,7 +241,7 @@ var EditSession = function(text, mode) { }; this.tokenRe = /^[\w\d]+/g; - this.nonTokenRe = /^[^\w\d]+/g; + this.nonTokenRe = /^[^\w\d|\x00-\xff]+/g; this.getWordRange = function(row, column) { var line = this.getLine(row); @@ -633,19 +633,23 @@ var EditSession = function(text, mode) { var screenColumn = 0; var remaining = docColumn; - - var line = this.getLine(row).split("\t"); - for (var i=0; i len) { - remaining -= (len + 1); - screenColumn += len + tabSize; - } - else { - screenColumn += remaining; - break; - } - } + var line = this.getLine(row); + + for(var i=0; i 0){ + remaining -= 1; + if(c == '\t'){ + screenColumn += tabSize; + } else if(/[^\x00-\xff]/.exec(c)){ + screenColumn += 2; + } else { + screenColumn += 1; + } + }else{ + break; + } + } return screenColumn; }; @@ -655,23 +659,24 @@ var EditSession = function(text, mode) { var docColumn = 0; var remaining = screenColumn; - - var line = this.getLine(row).split("\t"); - for (var i=0; i= len + tabSize) { - remaining -= (len + tabSize); - docColumn += (len + 1); - } - else if (remaining > len){ - docColumn += len; - break; - } - else { - docColumn += remaining; - break; - } - } + var line = this.getLine(row); + + for(var i=0; i 0){ + docColumn += 1; + if(c == '\t'){ + remaining -= tabSize; + } else if(/[^\x00-\xff]/.exec(c)){ + remaining -= 2; + } else { + remaining -= 1; + } + }else{ + break; + } + } + return docColumn; }; diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js index ecaa6698..815f669a 100644 --- a/lib/ace/layer/text.js +++ b/lib/ace/layer/text.js @@ -274,6 +274,17 @@ var Text = function(parentEl) { .replace(/" + w + ""; + }else{ + buffer = buffer + w; + } + } + output = buffer; if (!this.$textToken[token.type]) { var classes = "ace_" + token.type.replace(/\./g, " ace_"); diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index affce7fb..0ae38f7d 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -591,12 +591,35 @@ var VirtualRenderer = function(container, theme) { }; this.showComposition = function(position) { + var cur = this.$cursorLayer.element.firstChild; + var scroll = this.scroller; + var top = (parseInt(cur.style.top) || 0) + (parseInt(scroll.style.top) || 0); + var left = (parseInt(cur.style.left) || 0) + (parseInt(scroll.style.left) || 0); + + var edit = document.getElementById("editor").lastChild; + edit.style.color = '#66ff33'; + edit.style.top = (top - 1) + "px"; + edit.style.left = (left + 3) + "px"; + edit.style.background = "transparent"; + edit.style.border = "none"; + edit.style.resize = "none"; + edit.style.outline = "none"; + edit.style.width = "10000px"; + edit.style.height = "10000px"; + edit.style.fontSize = "12px"; + + this.hideCursor(); }; this.setCompositionText = function(text) { }; this.hideComposition = function() { + this.showCursor(); + var edit = document.getElementById("editor").lastChild; + edit.className = ''; + edit.style.top = "-10000px"; + edit.style.left = "-10000px"; }; this.setTheme = function(theme) { diff --git a/static.py b/static.py index 8cac3b7a..801a70d7 100755 --- a/static.py +++ b/static.py @@ -231,7 +231,7 @@ def test(): app = Cling(getcwd()) try: print "Serving " + getcwd() + " to http://localhost:9999" - make_server('localhost', 9999, validator(app)).serve_forever() + make_server('0.0.0.0', 9999, validator(app)).serve_forever() except KeyboardInterrupt, ki: print "" print "Ciao, baby!"