diff options
author | daurnimator <quae@daurnimator.com> | 2018-01-06 19:06:27 +1100 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2018-01-06 19:06:27 +1100 |
commit | 110636150e4b3470e21622b022bec2844d8e8b2f (patch) | |
tree | acd66e0868ec195dd476f53a464594ff54d1be37 | |
parent | 12b37db70edf83849dcf88b4e50e987234561695 (diff) | |
download | fengari-110636150e4b3470e21622b022bec2844d8e8b2f.tar.gz fengari-110636150e4b3470e21622b022bec2844d8e8b2f.tar.bz2 fengari-110636150e4b3470e21622b022bec2844d8e8b2f.zip |
src/lbaselib.js: Fallback for when TextDecoder doesn't exist
-rw-r--r-- | src/lbaselib.js | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/lbaselib.js b/src/lbaselib.js index 86ba6cc..9a534f2 100644 --- a/src/lbaselib.js +++ b/src/lbaselib.js @@ -6,17 +6,35 @@ const lauxlib = require('./lauxlib.js'); let lua_writestring; let lua_writeline; if (typeof process === "undefined") { - let buff = ""; - let decoder = new TextDecoder("utf-8"); - lua_writestring = function(s) { - buff += decoder.decode(s, {stream: true}); - }; - let empty = new Uint8Array(0); - lua_writeline = function() { - buff += decoder.decode(empty); - console.log(buff); - buff = ""; - }; + if (typeof TextDecoder === "function") { /* Older browsers don't have TextDecoder */ + let buff = ""; + let decoder = new TextDecoder("utf-8"); + lua_writestring = function(s) { + buff += decoder.decode(s, {stream: true}); + }; + let empty = new Uint8Array(0); + lua_writeline = function() { + buff += decoder.decode(empty); + console.log(buff); + buff = ""; + }; + } else { + let buff = []; + lua_writestring = function(s) { + try { + /* If the string is valid utf8, then we can use to_jsstring */ + s = lua.to_jsstring(s); + } catch(e) { + /* otherwise push copy of raw array */ + s = s.slice(0); + } + buff.push(s); + }; + lua_writeline = function() { + console.log.apply(console.log, buff); + buff = []; + }; + } } else { lua_writestring = function(s) { process.stdout.write(Buffer.from(s)); |