Доделки
This commit is contained in:
@@ -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(/ |[\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')
|
||||||
|
|||||||
Reference in New Issue
Block a user