Skip to content
This repository was archived by the owner on Dec 9, 2018. It is now read-only.

Commit 8840a84

Browse files
committed
Add multibyte support.
Increased vim.js compiled size from 25MB to 44MB. It is disabled by default. Uses builtin emscripten UTF8 functions.
1 parent 9bf8aea commit 8840a84

3 files changed

Lines changed: 25 additions & 6 deletions

File tree

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
set -e
3-
[ -z $EM_DIR] && EM_DIR=~/src/emscripten
3+
[ -z "$EM_DIR" ] && EM_DIR=~/src/emscripten
44

55
do_config() {
66
echo config

web/usr/local/share/vim/vimrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ set wildmenu
5555
set tabstop=4
5656
set expandtab
5757
set nocompatible
58+
set encoding=utf8
59+
set termencoding=utf8
5860
set fileencodings=utf8
5961
set backspace=indent,eol,start
6062
set wildmode=longest,list,full

web/vim_lib.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,19 @@ var LibraryVIM = {
9191
}
9292
}
9393

94-
if(!handled)
95-
vimjs.gui_web_handle_key(charCode || keyCode, modifiers, 0, 0);
94+
if(!handled) {
95+
var MAX_UTF8_BYTES = 6;
96+
var chars = new Uint8Array(MAX_UTF8_BYTES + 1); // null-terminated
97+
var charLen = stringToUTF8Array(String.fromCharCode(charCode), chars, 0, MAX_UTF8_BYTES);
98+
if (charLen == 1) {
99+
vimjs.gui_web_handle_key(chars[0], modifiers, 0, 0);
100+
} else {
101+
// no modifers for UTF-8, should be handled in chars already
102+
for (var i = 0; i < charLen; i++) {
103+
vimjs.gui_web_handle_key(chars[i], 0, 0, 0);
104+
}
105+
}
106+
}
96107

97108
},//VIMJS_FOLD_END
98109

@@ -778,7 +789,15 @@ var LibraryVIM = {
778789
},
779790

780791
vimjs_draw_string__deps: ['vimjs_clear_block'],
781-
vimjs_draw_string: function(row, col, s, len, flags) {
792+
vimjs_draw_string: function(row, col, s_ptr, len, flags) {
793+
var byteArray = [];
794+
for (var i = 0; i < len; i++) {
795+
c = getValue(s_ptr + i, 'i8', true);
796+
byteArray.push(c);
797+
}
798+
byteArray.push(0);
799+
var s = UTF8ArrayToString(byteArray, 0);
800+
len = s.length;
782801

783802
// TODO: use macros for flag constants
784803
if(!(flags & 0x01)) {
@@ -788,8 +807,6 @@ var LibraryVIM = {
788807
var font = vimjs.font;
789808
if(flags & 0x02) font = 'bold ' + font;
790809

791-
s = Pointer_stringify(s, len);
792-
793810
var ctx = vimjs.canvas_ctx;
794811

795812
ctx.font = font;

0 commit comments

Comments
 (0)