return output;
},
+ getCodePoint: function(string, position) {
+ var highWord = string.charCodeAt(position);
+
+ if ((highWord & 0xFC00) === 0xD800) {
+ if (position + 1 >= string.length) {
+ return undefined; //the string is corrupted
+ }
+
+ var lowWord = string.charCodeAt(position + 1);
+ if ((lowWord & 0xFC00) === 0xDC00) {
+ return ((highWord & 0x03FF) << 10) | (lowWord & 0x03FF) + 0x10000;
+ } else {
+ return undefined; //the string is corrupted
+ }
+ }
+ return highWord;
+ },
_utf8_encode: function(str) {
str = str.replace(/\r\n/g, '\n');
var utfarray = [];
//TODO: use for( var c of str ) in future versions
for (var offset = 0; offset < str.length; offset++) {
- var code = str.codePointAt(offset);
+ var code = this.getCodePoint(str, offset);
if (code <= 0x7F) {
utfarray.push(code);