diff --git a/server/core/Reader/BookConverter/ConvertFb3.js b/server/core/Reader/BookConverter/ConvertFb3.js
index 0e1a4402..cc927271 100644
--- a/server/core/Reader/BookConverter/ConvertFb3.js
+++ b/server/core/Reader/BookConverter/ConvertFb3.js
@@ -39,13 +39,13 @@ class ConvertFb3 extends ConvertHtml {
const title = this.getTitle(text)
.replace(/<\/?p>/g, '')
;
- text = `
${title}` + text
+ text = `${title}` + text
.replace(//g, '
')
.replace(/<\/title>/g, '
')
.replace(//g, '
')
.replace(/<\/subtitle>/g, '')
;
- return await super.run(Buffer.from(text), {skipCheck: true, cutTitle: true});
+ return await super.run(Buffer.from(text), {skipCheck: true});
}
}
diff --git a/server/core/Reader/BookConverter/ConvertHtml.js b/server/core/Reader/BookConverter/ConvertHtml.js
index 4605a4aa..7bc0365a 100644
--- a/server/core/Reader/BookConverter/ConvertHtml.js
+++ b/server/core/Reader/BookConverter/ConvertHtml.js
@@ -34,7 +34,6 @@ class ConvertHtml extends ConvertBase {
} else {
isText = opts.isText;
}
- let {cutTitle} = opts;
let titleInfo = {};
let desc = {_n: 'description', 'title-info': titleInfo};
@@ -44,7 +43,9 @@ class ConvertHtml extends ConvertBase {
let fb2 = [desc, body, binary];
let title = '';
+ let author = '';
let inTitle = false;
+ let inAuthor = false;
let inSubTitle = false;
let inImage = false;
let image = {};
@@ -94,7 +95,7 @@ class ConvertHtml extends ConvertBase {
const onTextNode = (text, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars
text = this.escapeEntities(text);
- if (!cutCounter && !(cutTitle && inTitle)) {
+ if (!(cutCounter || inTitle) || inSubTitle) {
let tOpen = '';
tOpen += (inSubTitle ? '' : '');
tOpen += (bold ? '' : '');
@@ -110,6 +111,9 @@ class ConvertHtml extends ConvertBase {
if (inTitle && !title)
title = text;
+ if (inAuthor && !author)
+ author = text;
+
if (inImage) {
image._t = text;
binary.push(image);
@@ -142,10 +146,12 @@ class ConvertHtml extends ConvertBase {
}
}
- if (tag == 'title' || tag == 'cut-title') {
+ if (tag == 'title' || tag == 'fb2-title') {
inTitle = true;
- if (tag == 'cut-title')
- cutTitle = true;
+ }
+
+ if (tag == 'fb2-author') {
+ inAuthor = true;
}
if (tag == 'fb2-subtitle') {
@@ -181,9 +187,13 @@ class ConvertHtml extends ConvertBase {
}
}
- if (tag == 'title' || tag == 'cut-title')
+ if (tag == 'title' || tag == 'fb2-title')
inTitle = false;
+ if (tag == 'fb2-author') {
+ inAuthor = false;
+ }
+
if (tag == 'fb2-subtitle')
inSubTitle = false;
@@ -195,10 +205,15 @@ class ConvertHtml extends ConvertBase {
sax.parseSync(buf, {
onStartNode, onEndNode, onTextNode,
- innerCut: new Set(['head', 'script', 'style', 'binary', 'fb2-image'])
+ innerCut: new Set(['head', 'script', 'style', 'binary', 'fb2-image', 'fb2-title', 'fb2-author'])
});
titleInfo['book-title'] = title;
+ if (author)
+ titleInfo.author = {'last-name': author};
+
+ body.section._a[0] = pars;
+
//подозрение на чистый текст, надо разбить на параграфы
if (isText || (buf.length > 30*1024 && pars.length < buf.length/2000)) {
let total = 0;
@@ -228,28 +243,19 @@ class ConvertHtml extends ConvertBase {
if (parIndent > 2) parIndent--;
let newPars = [];
+ let curPar = {};
const newPar = () => {
- newPars.push({_n: 'p', _t: ''});
+ curPar = {_n: 'p', _t: ''};
+ newPars.push(curPar);
};
- const growPar = (text) => {
- if (!newPars.length)
- newPar();
-
- const l = newPars.length;
- newPars[l - 1]._t += text;
- }
-
- i = 0;
for (const par of pars) {
if (par._n != 'p') {
newPars.push(par);
continue;
}
- if (i > 0)
- newPar();
- i++;
+ newPar();
let j = 0;
const lines = par._t.split('\n');
@@ -266,13 +272,12 @@ class ConvertHtml extends ConvertBase {
newPar();
j++;
}
- growPar(line.trim() + ' ');
+
+ curPar._t += line.trim() + ' ';
}
}
body.section._a[0] = newPars;
- } else {
- body.section._a[0] = pars;
}
//убираем лишнее, делаем валидный fb2, т.к. в рез-те разбиения на параграфы бьются теги
diff --git a/server/core/Reader/BookConverter/ConvertSites.js b/server/core/Reader/BookConverter/ConvertSites.js
index 5074f3f8..6fb91d6b 100644
--- a/server/core/Reader/BookConverter/ConvertSites.js
+++ b/server/core/Reader/BookConverter/ConvertSites.js
@@ -48,7 +48,7 @@ class ConvertSites extends ConvertHtml {
if (text === false)
return false;
- return await super.run(Buffer.from(text), {skipCheck: true, cutTitle: true});
+ return await super.run(Buffer.from(text), {skipCheck: true});
}
getTitle(text) {
@@ -79,7 +79,7 @@ class ConvertSites extends ConvertHtml {
let book = this.getTitle(text);
book = book.replace(' (fb2) | Флибуста', '');
- const title = `${author}${(author ? ' - ' : '')}${book}`;
+ const title = `${author}${(author ? ' - ' : '')}${book}`;
let begin = '';
if (text.indexOf(begin) <= 0)