From b9742e365e881ffba1fc2ebcb849cb5971608924 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 23 Jan 2019 01:16:29 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0=20htm?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/BookConverter/index.js | 34 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/server/core/BookConverter/index.js b/server/core/BookConverter/index.js index a417cc80..c4bbc360 100644 --- a/server/core/BookConverter/index.js +++ b/server/core/BookConverter/index.js @@ -62,6 +62,9 @@ class BookConverter { let body = {_n: 'body', section: {_a: [pars]}}; let fb2 = [desc, body]; + let title = ''; + let inTitle = false; + const newParagraph = () => { pars.push({_n: 'p', _t: ''}); }; @@ -76,19 +79,18 @@ class BookConverter { }; newParagraph(); + const newPara = new Set(['TR', 'BR', 'BR/', 'DD', 'P', 'TITLE', '/TITLE']); + + const onText = (text) => { + if (inTitle && !title) + title = text; + }; const onNode = (elem) => { - switch (elem) { - case 'TR': - case 'BR': - case 'BR/': - case 'DD': - case 'P': - case 'TITLE': - case '/TITLE': - newParagraph(); - break; - } + if (elem == 'TITLE') + inTitle = true; + else if (elem == '/TITLE') + inTitle = false; }; const innerCut = new Set(['HEAD', 'SCRIPT', 'STYLE']); @@ -111,10 +113,14 @@ class BookConverter { if (firstSpace >= 0) tag = tag.substr(0, firstSpace); + const text = buf.substr(i, left - i); if (!cutCounter) { - growParagraph(buf.substr(i, left - i)); - onNode(tag); + growParagraph(text); + if (newPara.has(tag)) + newParagraph(); } + onText(text); + onNode(tag); if (innerCut.has(tag) && (!cutCounter || cutTag == tag)) { if (!cutCounter) @@ -134,6 +140,8 @@ class BookConverter { if (i < len && !cutCounter) growParagraph(buf.substr(i, len - i)); + titleInfo['book-title'] = title; + return this.formatFb2(fb2); }