From ae1547fac46af044da235fa9c39360e492edf0fd Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 8 Feb 2019 16:17:26 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0=20samlib,?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 52 ++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index 505d1fc0..fbbe2b74 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -190,28 +190,30 @@ class BookConverter { let titleInfo = {}; let desc = {_n: 'description', 'title-info': titleInfo}; let pars = []; - let body = {_n: 'body', section: {_a: [pars]}}; + let body = {_n: 'body', section: {_a: pars}}; let fb2 = [desc, body]; let inSubtitle = false; + let inJustify = true; let path = ''; let tag = '';// eslint-disable-line no-unused-vars let inText = false; - let node = {}; + let node = {_a: pars}; - const newParagraph = () => { - node = {_n: 'p', _a: []}; - pars.push(node); - }; + let inPara = false; const openTag = (name) => { + if (name == 'p') + inPara = true; let n = {_n: name, _a: [], _p: node}; node._a.push(n); node = n; }; const closeTag = (name) => { + if (name == 'p') + inPara = false; if (node._n == name && node._p) { node = node._p; } @@ -223,7 +225,7 @@ class BookConverter { node._a.push({_t: text}); }; - newParagraph(); + openTag('p'); const onStartNode = (elemName, tail, singleTag, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars if (elemName == '') @@ -232,11 +234,18 @@ class BookConverter { path += '/' + elemName; tag = elemName; } else { - if (!inSubtitle && (elemName == 'p' || elemName == 'dd' || elemName == 'li')) { - newParagraph(); - } + if (inPara && elemName != 'i' && elemName != 'b') + closeTag('p'); switch (elemName) { + case 'li': + case 'p': + case 'dd': + case 'h1': + case 'h2': + case 'h3': + openTag('p'); + break; case 'i': openTag('emphasis'); break; @@ -249,8 +258,9 @@ class BookConverter { inSubtitle = true; } - if (!inSubtitle && tail.indexOf('align="justify"') >= 0) { - newParagraph(); + if (tail.indexOf('align="justify"') >= 0) { + openTag('p'); + inJustify = true; } break; @@ -276,6 +286,14 @@ class BookConverter { tag = path.substr(i + 1); } else { switch (elemName) { + case 'li': + case 'p': + case 'dd': + case 'h1': + case 'h2': + case 'h3': + closeTag('p'); + break; case 'i': closeTag('emphasis'); break; @@ -283,9 +301,15 @@ class BookConverter { closeTag('strong'); break; case 'div': - if (inSubtitle) + if (inSubtitle) { closeTag('subtitle'); - inSubtitle = false; + inSubtitle = false; + } + + if (inJustify) { + closeTag('p'); + inJustify = false; + } break; } }