Respect full width property of all East Asian characters
Common Japanese punctuation (comma, period) was being treated as half-width, causing cursor positioning to be off. The new code is comprehensive for code points in the Basic Multilingual Plane. See https://gist.github.com/883802 for the script I used to generate the code.
This commit is contained in:
parent
af5d11770f
commit
21a79fea65
1 changed files with 41 additions and 24 deletions
|
|
@ -962,14 +962,8 @@ var EditSession = function(text, mode) {
|
|||
else if(c == 32) {
|
||||
arr.push(SPACE);
|
||||
}
|
||||
// CJK characters
|
||||
else if (
|
||||
c >= 0x3040 && c <= 0x309F || // Hiragana
|
||||
c >= 0x30A0 && c <= 0x30FF || // Katakana
|
||||
c >= 0x4E00 && c <= 0x9FFF || // Single CJK ideographs
|
||||
c >= 0xF900 && c <= 0xFAFF ||
|
||||
c >= 0x3400 && c <= 0x4DBF
|
||||
) {
|
||||
// full width characters
|
||||
else if (isFullWidth(c)) {
|
||||
arr.push(CHAR, CHAR_EXT);
|
||||
} else {
|
||||
arr.push(CHAR);
|
||||
|
|
@ -995,14 +989,8 @@ var EditSession = function(text, mode) {
|
|||
if (c == 9) {
|
||||
screenColumn += tabSize;
|
||||
}
|
||||
// CJK characters
|
||||
else if (
|
||||
c >= 0x3040 && c <= 0x309F || // Hiragana
|
||||
c >= 0x30A0 && c <= 0x30FF || // Katakana
|
||||
c >= 0x4E00 && c <= 0x9FFF || // Single CJK ideographs
|
||||
c >= 0xF900 && c <= 0xFAFF ||
|
||||
c >= 0x3400 && c <= 0x4DBF
|
||||
) {
|
||||
// full width characters
|
||||
else if (isFullWidth(c)) {
|
||||
screenColumn += 2;
|
||||
} else {
|
||||
screenColumn += 1;
|
||||
|
|
@ -1149,14 +1137,8 @@ var EditSession = function(text, mode) {
|
|||
docColumn -= 1;
|
||||
}
|
||||
}
|
||||
// CJK characters
|
||||
else if (
|
||||
c >= 0x3040 && c <= 0x309F || // Hiragana
|
||||
c >= 0x30A0 && c <= 0x30FF || // Katakana
|
||||
c >= 0x4E00 && c <= 0x9FFF || // Single CJK ideographs
|
||||
c >= 0xF900 && c <= 0xFAFF ||
|
||||
c >= 0x3400 && c <= 0x4DBF
|
||||
) {
|
||||
// full width characters
|
||||
else if (isFullWidth(c)) {
|
||||
if (remaining >= 2) {
|
||||
remaining -= 2;
|
||||
} else {
|
||||
|
|
@ -1292,6 +1274,41 @@ var EditSession = function(text, mode) {
|
|||
}
|
||||
return screenRows;
|
||||
}
|
||||
|
||||
function isFullWidth(c) {
|
||||
return c >= 0x1100 && c <= 0x115F ||
|
||||
c >= 0x11A3 && c <= 0x11A7 ||
|
||||
c >= 0x11FA && c <= 0x11FF ||
|
||||
c >= 0x2329 && c <= 0x232A ||
|
||||
c >= 0x2E80 && c <= 0x2E99 ||
|
||||
c >= 0x2E9B && c <= 0x2EF3 ||
|
||||
c >= 0x2F00 && c <= 0x2FD5 ||
|
||||
c >= 0x2FF0 && c <= 0x2FFB ||
|
||||
c >= 0x3000 && c <= 0x303E ||
|
||||
c >= 0x3041 && c <= 0x3096 ||
|
||||
c >= 0x3099 && c <= 0x30FF ||
|
||||
c >= 0x3105 && c <= 0x312D ||
|
||||
c >= 0x3131 && c <= 0x318E ||
|
||||
c >= 0x3190 && c <= 0x31BA ||
|
||||
c >= 0x31C0 && c <= 0x31E3 ||
|
||||
c >= 0x31F0 && c <= 0x321E ||
|
||||
c >= 0x3220 && c <= 0x3247 ||
|
||||
c >= 0x3250 && c <= 0x32FE ||
|
||||
c >= 0x3300 && c <= 0x4DBF ||
|
||||
c >= 0x4E00 && c <= 0xA48C ||
|
||||
c >= 0xA490 && c <= 0xA4C6 ||
|
||||
c >= 0xA960 && c <= 0xA97C ||
|
||||
c >= 0xAC00 && c <= 0xD7A3 ||
|
||||
c >= 0xD7B0 && c <= 0xD7C6 ||
|
||||
c >= 0xD7CB && c <= 0xD7FB ||
|
||||
c >= 0xF900 && c <= 0xFAFF ||
|
||||
c >= 0xFE10 && c <= 0xFE19 ||
|
||||
c >= 0xFE30 && c <= 0xFE52 ||
|
||||
c >= 0xFE54 && c <= 0xFE66 ||
|
||||
c >= 0xFE68 && c <= 0xFE6B ||
|
||||
c >= 0xFF01 && c <= 0xFF60 ||
|
||||
c >= 0xFFE0 && c <= 0xFFE6;
|
||||
}
|
||||
|
||||
}).call(EditSession.prototype);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue