瀏覽代碼

Доделки

Book Pauk 6 年之前
父節點
當前提交
0b0692a331
共有 1 個文件被更改,包括 20 次插入11 次删除
  1. 20 11
      server/core/BookConverter/index.js

+ 20 - 11
server/core/BookConverter/index.js

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