From e2632f180209e89317f6a5dea97aa37eb052a813 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 14:24:29 +0700 Subject: [PATCH 01/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/index.js b/server/index.js index 1d8e79e9..47b6620a 100644 --- a/server/index.js +++ b/server/index.js @@ -31,6 +31,7 @@ async function init() { } async function main() { + log(`${config.name} v${config.version}`); log('Initializing'); await init(); From cad97e639a591a5b4cc9681b85435535ca16a029 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 14:37:40 +0700 Subject: [PATCH 02/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=86=D0=B2=D0=B5=D1=82=20=D1=84=D0=BE=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/SettingsPage/SettingsPage.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index e8e4090a..061b09f5 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -439,11 +439,12 @@ class SettingsPage extends Vue { '#000000', '#202020', '#ebe2c9', + '#cfdc99', + '#478355', + '#a6caf0', '#909080', '#808080', '#c8c8c8', - '#478355', - '#a6caf0', ]; } From 3e2f01d56d69345de1857fda6284f4d26ab07a3a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 18:06:29 +0700 Subject: [PATCH 03/17] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Reader/HistoryPage/HistoryPage.vue | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/client/components/Reader/HistoryPage/HistoryPage.vue b/client/components/Reader/HistoryPage/HistoryPage.vue index 619220f2..7cd98ebb 100644 --- a/client/components/Reader/HistoryPage/HistoryPage.vue +++ b/client/components/Reader/HistoryPage/HistoryPage.vue @@ -15,8 +15,14 @@ border :default-sort = "{prop: 'touchDateTime', order: 'descending'}" :header-cell-style = "headerCellStyle" + :row-key = "rowKey" > + + { + result = result.filter(item => { return !search || item.touchTime.includes(search) || item.touchDate.includes(search) || item.desc.title.toLowerCase().includes(search.toLowerCase()) || item.desc.author.toLowerCase().includes(search.toLowerCase()) }); + + this.tableData = result; } headerCellStyle(cell) { From aeadb5aeb89b6bd4c5030ba7cf643b61842f2833 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 19:09:57 +0700 Subject: [PATCH 04/17] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 5 ++- server/core/BookConverter/textUtils.js | 54 +++++++++++++++++--------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 93865f30..afa311e6 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -66,7 +66,10 @@ class BookConverter { } } - return iconv.decode(data, selected); + if (selected.toLowerCase() != 'utf-8') + return iconv.decode(data, selected); + else + return data; } checkEncoding(data) { diff --git a/server/core/BookConverter/textUtils.js b/server/core/BookConverter/textUtils.js index 475ef572..6ee5169d 100644 --- a/server/core/BookConverter/textUtils.js +++ b/server/core/BookConverter/textUtils.js @@ -1,4 +1,4 @@ -function getEncoding(buf) { +function getEncoding(buf, returnAll) { const lowerCase = 3; const upperCase = 1; @@ -8,6 +8,7 @@ function getEncoding(buf) { 'd': 'cp866', 'i': 'ISO-8859-5', 'm': 'maccyrillic', + 'u': 'utf-8', }; let charsets = { @@ -15,38 +16,47 @@ function getEncoding(buf) { 'w': 0, 'd': 0, 'i': 0, - 'm': 0 + 'm': 0, + 'u': 0, }; const len = buf.length; const blockSize = (len > 5*3000 ? 3000 : len); let counter = 0; let i = 0; + let totalChecked = 0; while (i < len) { const char = buf[i]; + const nextChar = (i < len - 1 ? buf[i + 1] : 0); + totalChecked++; i++; //non-russian characters if (char < 128 || char > 256) continue; - //CP866 - if ((char > 159 && char < 176) || (char > 223 && char < 242)) charsets['d'] += lowerCase; - if ((char > 127 && char < 160)) charsets['d'] += upperCase; + //UTF-8 + if ((char == 208 || char == 209) && nextChar >= 128 && nextChar <= 190) + charsets['u'] += lowerCase; + else { + //CP866 + if ((char > 159 && char < 176) || (char > 223 && char < 242)) charsets['d'] += lowerCase; + if ((char > 127 && char < 160)) charsets['d'] += upperCase; - //KOI8-R - if ((char > 191 && char < 223)) charsets['k'] += lowerCase; - if ((char > 222 && char < 256)) charsets['k'] += upperCase; + //KOI8-R + if ((char > 191 && char < 223)) charsets['k'] += lowerCase; + if ((char > 222 && char < 256)) charsets['k'] += upperCase; - //WIN-1251 - if (char > 223 && char < 256) charsets['w'] += lowerCase; - if (char > 191 && char < 224) charsets['w'] += upperCase; + //WIN-1251 + if (char > 223 && char < 256) charsets['w'] += lowerCase; + if (char > 191 && char < 224) charsets['w'] += upperCase; - //MAC - if (char > 221 && char < 255) charsets['m'] += lowerCase; - if (char > 127 && char < 160) charsets['m'] += upperCase; + //MAC + if (char > 221 && char < 255) charsets['m'] += lowerCase; + if (char > 127 && char < 160) charsets['m'] += upperCase; - //ISO-8859-5 - if (char > 207 && char < 240) charsets['i'] += lowerCase; - if (char > 175 && char < 208) charsets['i'] += upperCase; + //ISO-8859-5 + if (char > 207 && char < 240) charsets['i'] += lowerCase; + if (char > 175 && char < 208) charsets['i'] += upperCase; + } counter++; @@ -57,18 +67,24 @@ function getEncoding(buf) { } let sorted = Object.keys(charsets).map(function(key) { - return { codePage: codePage[key], c: charsets[key] }; + return { codePage: codePage[key], c: charsets[key], totalChecked }; }); sorted.sort((a, b) => b.c - a.c); - if (sorted[0].c > 0) + if (returnAll) + return sorted; + else if (sorted[0].c > 0) return sorted[0].codePage; else return 'ISO-8859-5'; } function checkIfText(buf) { + const enc = getEncoding(buf, true); + if (enc[0].c > enc[0].totalChecked*0.9) + return true; + let spaceCount = 0; let crCount = 0; let lfCount = 0; From 1e1a58b58c70c62e8469e83c298bafb8c64843e6 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 19:47:16 +0700 Subject: [PATCH 05/17] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=20convertHtml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 36 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index afa311e6..c10ef413 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -111,19 +111,21 @@ class BookConverter { }; const growParagraph = (text) => { + if (!pars.length) + newParagraph(); + const l = pars.length; - if (l) { - if (pars[l - 1]._t == '') - text = text.trimLeft(); - pars[l - 1]._t += text; - } + if (pars[l - 1]._t == '') + text = text.trimLeft(); + pars[l - 1]._t += text; //посчитаем отступы у текста, чтобы выделить потом параграфы const lines = text.split('\n'); - for (const line of lines) { - const sp = line.split(' '); + for (let line of lines) { + line = repSpaces2(line).replace(/\t/g, ' '); + let l = 0; - while (l < sp.length && sp[l].trim() == '') { + while (l < line.length && line[l] == ' ') { l++; } if (!spaceCounter[l]) @@ -132,7 +134,6 @@ class BookConverter { } }; - newParagraph(); const newPara = new Set(['tr', 'br', 'br/', 'dd', 'p', 'title', '/title', 'h1', 'h2', 'h3', '/h1', '/h2', '/h3']); const onTextNode = (text, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars @@ -186,22 +187,23 @@ class BookConverter { }; const growPar = (text) => { + if (!newPars.length) + newPar(); + const l = newPars.length; - if (l) { - newPars[l - 1]._t += text; - } + newPars[l - 1]._t += text; } for (const par of pars) { - newPar(); - const lines = par._t.split('\n'); - for (const line of lines) { - const sp = line.split(' '); + for (let line of lines) { + line = repSpaces2(line).replace(/\t/g, ' '); + let l = 0; - while (l < sp.length && sp[l].trim() == '') { + while (l < line.length && line[l] == ' ') { l++; } + if (l >= parIndent) newPar(); growPar(line.trim() + ' '); From 2acb65f6b3eb3506630a3c8aef4aff831c69b57e Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 20:04:41 +0700 Subject: [PATCH 06/17] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/SettingsPage/SettingsPage.vue | 2 +- client/components/Reader/share/BookParser.js | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index 061b09f5..58a8ea2f 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -185,7 +185,7 @@ Перенос по слогам - Убирать пустые параграфы + Убирать пустые строки diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index b4c24a9a..1e361eb0 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -45,6 +45,7 @@ export default class BookParser { let italic = false; let space = 0; let inPara = false; + let isFirstSection = true; this.binary = {}; let binaryId = ''; @@ -206,7 +207,9 @@ export default class BookParser { } if (tag == 'section') { - newParagraph(' ', 1); + if (!isFirstSection) + newParagraph(' ', 1); + isFirstSection = false; } if (tag == 'emphasis' || tag == 'strong') { From a75590c493bf28eb504735a4ace8f1a12ee75f66 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 20:15:40 +0700 Subject: [PATCH 07/17] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20fb2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index c10ef413..4b383ad1 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -479,21 +479,29 @@ class BookConverter { } } + let tOpen = ''; + let tBody = ''; + let tClose = ''; if (name) - out += `<${name}${attrs}>`; + tOpen += `<${name}${attrs}>`; if (node.hasOwnProperty('_t')) - out += repSpaces(node._t); + tBody += repSpaces(node._t); for (let nodeName in node) { if (nodeName && nodeName[0] == '_' && nodeName != '_a') continue; const n = node[nodeName]; - out += this.formatFb2Node(n, nodeName); + tBody += this.formatFb2Node(n, nodeName); } if (name) - out += ``; + tClose += ``; + + if (attrs == '' && name == 'p' && tBody.trim() == '') + out += '' + else + out += `${tOpen}${tBody}${tClose}`; } return out; } From 69afd7720a76243fc1a0b0be43d67bc7d1b54ade Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 20:45:21 +0700 Subject: [PATCH 08/17] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20fb2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/BookParser.js | 10 +++++++--- server/core/BookConverter/index.js | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 1e361eb0..f083d9b6 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -46,6 +46,7 @@ export default class BookParser { let space = 0; let inPara = false; let isFirstSection = true; + let isFirstTitlePara = false; this.binary = {}; let binaryId = ''; @@ -202,6 +203,7 @@ export default class BookParser { if (path.indexOf('/fictionbook/body') == 0) { if (tag == 'title') { newParagraph(' ', 1); + isFirstTitlePara = true; bold = true; center = true; } @@ -217,13 +219,15 @@ export default class BookParser { } if ((tag == 'p' || tag == 'empty-line' || tag == 'v')) { - newParagraph(' ', 1); - if (tag == 'p') + if (!(tag == 'p' && center && isFirstTitlePara)) + newParagraph(' ', 1); + if (tag == 'p') { inPara = true; + isFirstTitlePara = false; + } } if (tag == 'subtitle') { - newParagraph(' ', 1); bold = true; } diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 4b383ad1..cc493155 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -263,13 +263,13 @@ class BookConverter { }; const growParagraph = (text) => { + if (!node._p) + openTag('p'); if (node._n == 'p' && node._a.length == 0) text = text.trimLeft(); node._a.push({_t: text}); }; - openTag('p'); - const onStartNode = (elemName, tail, singleTag, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars if (elemName == '') return; From 360ee98d8d38fdf009926591159c0ab7e03e48d2 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 22:17:16 +0700 Subject: [PATCH 09/17] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3?= =?UTF-8?q?=D0=B0=20fb2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/BookParser.js | 12 ++++--- server/core/BookConverter/index.js | 37 +++++++++++++++----- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index f083d9b6..86f9cb25 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -219,7 +219,7 @@ export default class BookParser { } if ((tag == 'p' || tag == 'empty-line' || tag == 'v')) { - if (!(tag == 'p' && center && isFirstTitlePara)) + if (!(tag == 'p' && isFirstTitlePara)) newParagraph(' ', 1); if (tag == 'p') { inPara = true; @@ -228,6 +228,8 @@ export default class BookParser { } if (tag == 'subtitle') { + newParagraph(' ', 1); + isFirstTitlePara = true; bold = true; } @@ -255,6 +257,7 @@ export default class BookParser { if (path.indexOf('/fictionbook/body') == 0) { if (tag == 'title') { + isFirstTitlePara = false; bold = false; center = false; } @@ -268,6 +271,7 @@ export default class BookParser { } if (tag == 'subtitle') { + isFirstTitlePara = false; bold = false; } @@ -300,10 +304,10 @@ export default class BookParser { text = text.replace(/>/g, '>'); text = text.replace(/= 0 ? ' ' : ''); - if (text == '') + if (!text) return; text = text.replace(/[\t\n\r]/g, ' '); diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index cc493155..bb078b05 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -194,7 +194,12 @@ class BookConverter { newPars[l - 1]._t += text; } + i = 0; for (const par of pars) { + if (i > 0) + newPar(); + i++; + const lines = par._t.split('\n'); for (let line of lines) { line = repSpaces2(line).replace(/\t/g, ' '); @@ -232,6 +237,7 @@ class BookConverter { let inSubtitle = false; let inJustify = true; let inImage = false; + let isFirstPara = false; let path = ''; let tag = '';// eslint-disable-line no-unused-vars @@ -277,18 +283,25 @@ class BookConverter { path += '/' + elemName; tag = elemName; } else { - if (inPara && elemName != 'i' && elemName != 'b' && elemName != 'em' && elemName != 'strong' && elemName != 'img') - closeTag('p'); - switch (elemName) { case 'li': case 'p': case 'dd': + case 'br': + if (!(inSubtitle && isFirstPara)) { + if (inPara) + closeTag('p'); + openTag('p'); + } + isFirstPara = false; + break; case 'h1': case 'h2': case 'h3': - case 'br': + if (inPara) + closeTag('p'); openTag('p'); + bold = true; break; case 'i': case 'em': @@ -299,9 +312,12 @@ class BookConverter { bold = true; break; case 'div': + if (inPara) + closeTag('p'); if (tail.indexOf('align="center"') >= 0) { openTag('subtitle'); inSubtitle = true; + isFirstPara = true; } if (tail.indexOf('align="justify"') >= 0) { @@ -311,6 +327,8 @@ class BookConverter { break; case 'img': { + if (inPara) + closeTag('p'); const attrs = sax.getAttrsSync(tail); if (attrs.src && attrs.src.value) { let href = attrs.src.value; @@ -346,10 +364,13 @@ class BookConverter { case 'li': case 'p': case 'dd': + closeTag('p'); + break; case 'h1': case 'h2': case 'h3': closeTag('p'); + bold = false; break; case 'i': case 'em': @@ -389,10 +410,10 @@ class BookConverter { }; const onTextNode = (text) => {// eslint-disable-line no-unused-vars - if (text != ' ' && text.trim() == '') - text = text.trim(); + if (text && text.trim() == '') + text = (text.indexOf(' ') >= 0 ? ' ' : ''); - if (text == '') + if (!text) return; switch (path) { @@ -421,7 +442,7 @@ class BookConverter { growParagraph(`${tOpen}${text}${tClose}`); }; - sax.parseSync(repSpaces(repSpaces2(this.decode(data).toString())), { + sax.parseSync(repSpaces(this.decode(data).toString()), { onStartNode, onEndNode, onTextNode, onComment, innerCut: new Set(['head', 'script', 'style']) }); From 2e477e6c994fd85663e26f852cc5c688589b2ab5 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 23:03:01 +0700 Subject: [PATCH 10/17] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3?= =?UTF-8?q?=D0=B0=20=D0=A1=D0=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index bb078b05..d3896765 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -10,6 +10,7 @@ const FileDetector = require('../FileDetector'); const repSpaces = (text) => text.replace(/ |[\t\n\r]/g, ' '); const repSpaces2 = (text) => text.replace(/[\n\r]/g, ''); +const repSpaces3 = (text) => text.replace(/ /g, ' '); class BookConverter { constructor() { @@ -384,6 +385,7 @@ class BookConverter { if (inSubtitle) { closeTag('subtitle'); inSubtitle = false; + isFirstPara = false; } if (inJustify) { @@ -442,7 +444,7 @@ class BookConverter { growParagraph(`${tOpen}${text}${tClose}`); }; - sax.parseSync(repSpaces(this.decode(data).toString()), { + sax.parseSync(repSpaces3(this.decode(data).toString()), { onStartNode, onEndNode, onTextNode, onComment, innerCut: new Set(['head', 'script', 'style']) }); From 37822e840925e420513d68b0bbc20cd301bf635b Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 23:18:03 +0700 Subject: [PATCH 11/17] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/TextPage/DrawHelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/Reader/TextPage/DrawHelper.js b/client/components/Reader/TextPage/DrawHelper.js index 458927b1..aa24976b 100644 --- a/client/components/Reader/TextPage/DrawHelper.js +++ b/client/components/Reader/TextPage/DrawHelper.js @@ -28,7 +28,7 @@ export default class DrawHelper { let out = `
`; + ` line-height: ${this.lineHeight}px; white-space: nowrap;">`; let imageDrawn = new Set(); let len = lines.length; From e99a42b7af2608c15073dd381d9720e41a904bfd Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 23:20:03 +0700 Subject: [PATCH 12/17] =?UTF-8?q?=D0=9A=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/TextPage/DrawHelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/Reader/TextPage/DrawHelper.js b/client/components/Reader/TextPage/DrawHelper.js index aa24976b..83982e47 100644 --- a/client/components/Reader/TextPage/DrawHelper.js +++ b/client/components/Reader/TextPage/DrawHelper.js @@ -91,7 +91,7 @@ export default class DrawHelper { } else text = part.text; - if (text.trim() == '') + if (text && text.trim() == '') text = `${text}`; lineText += `${tOpen}${text}${tClose}`; From 06221a474b62a63815b4e2e765e6cc43d4b3a202 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 23:38:19 +0700 Subject: [PATCH 13/17] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index d3896765..657ed90b 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -270,8 +270,12 @@ class BookConverter { }; const growParagraph = (text) => { - if (!node._p) - openTag('p'); + if (!node._p) { + if (text.trim() != '') + openTag('p'); + else + return; + } if (node._n == 'p' && node._a.length == 0) text = text.trimLeft(); node._a.push({_t: text}); From 4de0b3cffd892fe8c9f276d8a36344a63699bb11 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 23 Feb 2019 23:51:06 +0700 Subject: [PATCH 14/17] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0=20fb2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/BookParser.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 86f9cb25..724e029c 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -45,6 +45,7 @@ export default class BookParser { let italic = false; let space = 0; let inPara = false; + let isFirstBody = true; let isFirstSection = true; let isFirstTitlePara = false; @@ -201,6 +202,12 @@ export default class BookParser { } if (path.indexOf('/fictionbook/body') == 0) { + if (tag == 'body') { + if (!isFirstBody) + newParagraph(' ', 1); + isFirstBody = false; + } + if (tag == 'title') { newParagraph(' ', 1); isFirstTitlePara = true; From 9d0bbec4b3051b764120e39d7797726fd423d03c Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 24 Feb 2019 00:00:55 +0700 Subject: [PATCH 15/17] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8=20title?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/BookParser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 724e029c..733c4eb1 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -188,7 +188,7 @@ export default class BookParser { if (attrs.href && attrs.href.value) { const href = attrs.href.value; if (href[0] == '#') {//local - if (inPara && !this.showInlineImagesInCenter) + if (inPara && !this.showInlineImagesInCenter && !center) growParagraph(``, 0); else newParagraph(`${' '.repeat(maxImageLineCount)}`, maxImageLineCount); From 33a2ca55f03261b8057bb02e6a8adb430f5ddbf5 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 24 Feb 2019 00:32:19 +0700 Subject: [PATCH 16/17] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/TextPage/DrawHelper.js | 2 +- client/components/Reader/share/BookParser.js | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/client/components/Reader/TextPage/DrawHelper.js b/client/components/Reader/TextPage/DrawHelper.js index 83982e47..de702ae4 100644 --- a/client/components/Reader/TextPage/DrawHelper.js +++ b/client/components/Reader/TextPage/DrawHelper.js @@ -97,7 +97,7 @@ export default class DrawHelper { lineText += `${tOpen}${text}${tClose}`; center = center || part.style.center; - space = (part.style.space > 0 ? part.style.space : space); + space = (part.style.space > space ? part.style.space : space); //избражения //image: {local: Boolean, inline: Boolean, id: String, imageLine: Number, lineCount: Number, paraIndex: Number}, diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index 733c4eb1..b5a990ee 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -366,13 +366,7 @@ export default class BookParser { } if (path.indexOf('/fictionbook/body/section') == 0) { - switch (tag) { - case 'p': - growParagraph(`${tOpen}${text}${tClose}`, text.length); - break; - default: - growParagraph(`${tOpen}${text}${tClose}`, text.length); - } + growParagraph(`${tOpen}${text}${tClose}`, text.length); } if (binaryId) { From ecc3acce932d04f3a54ecfd44d1a38a954bccb4d Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 24 Feb 2019 00:41:35 +0700 Subject: [PATCH 17/17] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.?= =?UTF-8?q?4.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 894c7552..912df4b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.4.3", + "version": "0.4.4", "engines": { "node": ">=10.0.0" },