diff --git a/server/core/Reader/BookConverter/ConvertBase.js b/server/core/Reader/BookConverter/ConvertBase.js index 45346586..0f2ba697 100644 --- a/server/core/Reader/BookConverter/ConvertBase.js +++ b/server/core/Reader/BookConverter/ConvertBase.js @@ -5,6 +5,7 @@ const he = require('he'); const LimitedQueue = require('../../LimitedQueue'); const textUtils = require('./textUtils'); const utils = require('../../utils'); +const xmlParser = require('../../xmlParser'); const queue = new LimitedQueue(3, 20, 2*60*1000);//2 минуты ожидание подвижек @@ -102,61 +103,14 @@ class ConvertBase { } formatFb2(fb2) { - let out = ''; - out += ''; - out += this.formatFb2Node(fb2); - out += ''; - return out; - } - - formatFb2Node(node, name) { - let out = ''; - - if (Array.isArray(node)) { - for (const n of node) { - out += this.formatFb2Node(n); + const out = xmlParser.formatXml({ + FictionBook: { + _attrs: {xmlns: 'http://www.gribuser.ru/xml/fictionbook/2.0', 'xmlns:l': 'http://www.w3.org/1999/xlink'}, + _a: [fb2], } - } else if (typeof node == 'string') { - if (name) - out += `<${name}>${this.repSpaces(node)}`; - else - out += this.repSpaces(node); - } else { - if (node._n) - name = node._n; + }, 'utf-8', this.repSpaces); - let attrs = ''; - if (node._attrs) { - for (let attrName in node._attrs) { - attrs += ` ${attrName}="${node._attrs[attrName]}"`; - } - } - - let tOpen = ''; - let tBody = ''; - let tClose = ''; - if (name) - tOpen += `<${name}${attrs}>`; - if (node.hasOwnProperty('_t')) - tBody += this.repSpaces(node._t); - - for (let nodeName in node) { - if (nodeName && nodeName[0] == '_' && nodeName != '_a') - continue; - - const n = node[nodeName]; - tBody += this.formatFb2Node(n, nodeName); - } - - if (name) - tClose += ``; - - if (attrs == '' && name == 'p' && tBody.trim() == '') - out += '' - else - out += `${tOpen}${tBody}${tClose}`; - } - return out; + return out.replace(/

\s*?<\/p>/g, ''); } }