From dfc37bffb967c868a4e91cf0679d95e7adbd9d7d Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Tue, 18 Dec 2018 23:25:21 +0000 Subject: [PATCH] Fixing TOC and utf-8 conversion. --- src/epub.js | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/epub.js b/src/epub.js index ae1c5fe..d54cba5 100644 --- a/src/epub.js +++ b/src/epub.js @@ -9,16 +9,49 @@ if (isNode()){ var generatedBufferType = 'uint8array' } +function Utf8ArrayToStr(array) { + var out, i, len, c; + var char2, char3; + + out = ""; + len = array.length; + i = 0; + while(i < len) { + c = array[i++]; + switch(c >> 4) + { + case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: + // 0xxxxxxx + out += String.fromCharCode(c); + break; + case 12: case 13: + // 110x xxxx 10xx xxxx + char2 = array[i++]; + out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); + break; + case 14: + // 1110 xxxx 10xx xxxx 10xx xxxx + char2 = array[i++]; + char3 = array[i++]; + out += String.fromCharCode(((c & 0x0F) << 12) | + ((char2 & 0x3F) << 6) | + ((char3 & 0x3F) << 0)); + break; + } + } + + return out; +} + class EpubXhtml{ constructor(filename) { - let name = filename.split('.') - name[name.length-1] = 'xhtml' - this.filename = name.join('.') + this.filename = filename this.mime = 'application/xhtml+xml' } convert(content){ - let html = new StringDecoder("utf-8").write(content) + // let html = new StringDecoder("utf-8").write(content) + let html = Utf8ArrayToStr(content) let dom = new DOMParser().parseFromString(html, 'text/html'); let xml = XMLSerializer.serializeToString(dom); // let cnt = `