Доделки

This commit is contained in:
Book Pauk
2019-01-27 01:36:01 +07:00
parent 1001051422
commit 0b0692a331

View File

@@ -7,6 +7,8 @@ const sax = require('./sax');
const FileDetector = require('../FileDetector'); const FileDetector = require('../FileDetector');
const repSpaces = (text) => text.replace(/ |[\t\n\r]/g, ' ');
class BookConverter { class BookConverter {
constructor() { constructor() {
this.detector = new FileDetector(); this.detector = new FileDetector();
@@ -30,7 +32,6 @@ class BookConverter {
return; return;
} }
//Заглушка
await fs.writeFile(outputFile, await this.convertHtml(data)); await fs.writeFile(outputFile, await this.convertHtml(data));
callback(100); callback(100);
} else { } else {
@@ -96,7 +97,7 @@ class BookConverter {
newParagraph(); newParagraph();
const newPara = new Set(['tr', 'br', 'br/', 'dd', 'p', 'title', '/title', 'h1', 'h2', 'h3', '/h1', '/h2', '/h3']); const newPara = new Set(['tr', 'br', 'br/', 'dd', 'p', 'title', '/title', 'h1', 'h2', 'h3', '/h1', '/h2', '/h3']);
const onText = (text, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars const onTextNode = (text, left, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars
if (!cutCounter) { if (!cutCounter) {
growParagraph(text); growParagraph(text);
} }
@@ -105,7 +106,7 @@ class BookConverter {
title = text; title = text;
}; };
const onNode = (tag, tail, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars const onStartNode = (tag, tail, left, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars
if (!cutCounter) { if (!cutCounter) {
if (newPara.has(tag)) if (newPara.has(tag))
newParagraph(); newParagraph();
@@ -113,13 +114,19 @@ class BookConverter {
if (tag == 'title') if (tag == 'title')
inTitle = true; inTitle = true;
else if (tag == '/title') };
const onEndNode = (tag, tail, left, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars
if (tag == 'title')
inTitle = false; inTitle = false;
}; };
let buf = this.decode(data).toString(); let buf = this.decode(data).toString();
this.parseHtml(buf, onNode, onText, new Set(['head', 'script', 'style'])); sax.parse(buf, {
onStartNode, onEndNode, onTextNode,
innerCut: new Set(['head', 'script', 'style'])
});
titleInfo['book-title'] = title; titleInfo['book-title'] = title;
@@ -172,6 +179,10 @@ class BookConverter {
body.section._a[0] = pars; body.section._a[0] = pars;
} }
//убираем лишнее
for (let i = 0; i < pars.length; i++)
pars[i]._t = repSpaces(pars[i]._t).trim();
return this.formatFb2(fb2); return this.formatFb2(fb2);
} }
@@ -310,7 +321,7 @@ class BookConverter {
growParagraph(text); growParagraph(text);
}; };
sax.parse(this.decode(data).toString(), { sax.parse(repSpaces(this.decode(data).toString()), {
onStartNode, onEndNode, onTextNode, onComment, onStartNode, onEndNode, onTextNode, onComment,
innerCut: new Set(['head', 'script', 'style']) innerCut: new Set(['head', 'script', 'style'])
}); });
@@ -344,17 +355,15 @@ class BookConverter {
formatFb2Node(node, name) { formatFb2Node(node, name) {
let out = ''; let out = '';
const repl = (text) => text.replace(/&nbsp;|[\t\n\r]/g, ' ');
if (Array.isArray(node)) { if (Array.isArray(node)) {
for (const n of node) { for (const n of node) {
out += this.formatFb2Node(n); out += this.formatFb2Node(n);
} }
} else if (typeof node == 'string') { } else if (typeof node == 'string') {
if (name) if (name)
out += `<${name}>${repl(node)}</${name}>`; out += `<${name}>${repSpaces(node)}</${name}>`;
else else
out += repl(node); out += repSpaces(node);
} else { } else {
if (node._n) if (node._n)
name = node._n; name = node._n;
@@ -362,7 +371,7 @@ class BookConverter {
if (name) if (name)
out += `<${name}>`; out += `<${name}>`;
if (node.hasOwnProperty('_t')) if (node.hasOwnProperty('_t'))
out += repl(node._t); out += repSpaces(node._t);
for (let nodeName in node) { for (let nodeName in node) {
if (nodeName && nodeName[0] == '_' && nodeName != '_a') if (nodeName && nodeName[0] == '_' && nodeName != '_a')