Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 9 additions & 58 deletions std/js/_std/haxe/io/Bytes.hx
Original file line number Diff line number Diff line change
Expand Up @@ -136,39 +136,12 @@ class Bytes {
throw Error.OutsideBounds;
if (encoding == null)
encoding = UTF8;
var s = "";
var b = b;
var i = pos;
var max = pos + len;
switch (encoding) {
case UTF8:
var debug = pos > 0;
// utf8-decode and utf16-encode
while (i < max) {
var c = b[i++];
if (c < 0x80) {
if (c == 0)
break;
s += String.fromCharCode(c);
} else if (c < 0xE0)
s += String.fromCharCode(((c & 0x3F) << 6) | (b[i++] & 0x7F));
else if (c < 0xF0) {
var c2 = b[i++];
s += String.fromCharCode(((c & 0x1F) << 12) | ((c2 & 0x7F) << 6) | (b[i++] & 0x7F));
} else {
var c2 = b[i++];
var c3 = b[i++];
var u = ((c & 0x0F) << 18) | ((c2 & 0x7F) << 12) | ((c3 & 0x7F) << 6) | (b[i++] & 0x7F);
s += String.fromCharCode(u);
}
}
case RawNative:
while (i < max) {
var c = b[i++] | (b[i++] << 8);
s += String.fromCharCode(c);
}
}
return s;

var dec = switch (encoding) {
case UTF8: new js.html.TextDecoder("utf-8");
case RawNative: new js.html.TextDecoder("utf-16");
};
return dec.decode(b.subarray(pos, pos + len));
}

@:deprecated("readString is deprecated, use getString instead")
Expand Down Expand Up @@ -212,32 +185,10 @@ class Bytes {
buf[(i << 1) | 1] = c >> 8;
}
return new Bytes(buf.buffer);
} else {
var enc = new js.html.TextEncoder();
return new Bytes(enc.encode(s).buffer);
}
var a = new Array();
// utf16-decode and utf8-encode
var i = 0;
while (i < s.length) {
var c:Int = StringTools.fastCodeAt(s, i++);
// surrogate pair
if (0xD800 <= c && c <= 0xDBFF)
c = (c - 0xD7C0 << 10) | (StringTools.fastCodeAt(s, i++) & 0x3FF);
if (c <= 0x7F)
a.push(c);
else if (c <= 0x7FF) {
a.push(0xC0 | (c >> 6));
a.push(0x80 | (c & 63));
} else if (c <= 0xFFFF) {
a.push(0xE0 | (c >> 12));
a.push(0x80 | ((c >> 6) & 63));
a.push(0x80 | (c & 63));
} else {
a.push(0xF0 | (c >> 18));
a.push(0x80 | ((c >> 12) & 63));
a.push(0x80 | ((c >> 6) & 63));
a.push(0x80 | (c & 63));
}
}
return new Bytes(new js.lib.Uint8Array(a).buffer);
}

public static function ofData(b:BytesData):Bytes {
Expand Down
Loading