Правка багов в парсере samlib

This commit is contained in:
Book Pauk
2019-01-24 04:18:16 +07:00
parent bc82087e59
commit 132956eabd

View File

@@ -227,24 +227,44 @@ class BookConverter {
let inText = false; let inText = false;
let center = false; let center = false;
//let italic = false;
//let bold = false;
let node = {};
const newParagraph = () => { const newParagraph = () => {
pars.push({_n: 'p', _t: ''}); node = {_n: 'p', _t: ''};
pars.push(node);
}; };
const newSubTitle = () => { const newSubTitle = () => {
pars.push({_n: 'subtitle', _t: ''}); node = {_n: 'subtitle', _t: ''};
pars.push(node);
};
const newItalic = () => {
let n = {_n: 'emphasis', _t: ''};
if (!node._a)
node._a = [];
node._a.push(n);
node = n;
};
const newBold = () => {
let n = {_n: 'strong', _t: ''};
if (!node._a)
node._a = [];
node._a.push(n);
node = n;
}; };
const growParagraph = (text) => { const growParagraph = (text) => {
const l = pars.length; if (node._t == '')
if (l) { text = text.trimLeft();
if (pars[l - 1]._t == '') node._t += text;
text = text.trimLeft();
pars[l - 1]._t += text;
}
}; };
newParagraph();
const parser = new EasySAXParser(); const parser = new EasySAXParser();
parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
@@ -261,16 +281,18 @@ class BookConverter {
switch (elemName) { switch (elemName) {
case 'i': case 'i':
growParagraph('<emphasis>'); newItalic();
//italic = true;
break; break;
case 'b': case 'b':
growParagraph('<strong>'); newBold();
//bold = true;
break; break;
case 'div': case 'div':
var a = getAttr(); var a = getAttr();
if (a && a.align == 'center') { if (a && a.align == 'center') {
center = true;
newSubTitle(); newSubTitle();
center = true;
} }
break; break;
} }
@@ -297,10 +319,10 @@ class BookConverter {
} else { } else {
switch (elemName) { switch (elemName) {
case 'i': case 'i':
growParagraph('</emphasis>'); //italic = false;
break; break;
case 'b': case 'b':
growParagraph('</strong>'); //bold = false;
break; break;
case 'div': case 'div':
center = false; center = false;
@@ -397,17 +419,17 @@ class BookConverter {
throw new Error(`malformed fb2 object`); throw new Error(`malformed fb2 object`);
out += `<${name}>`; out += `<${name}>`;
if (node.hasOwnProperty('_t')) { if (node.hasOwnProperty('_t'))
out += node._t; out += node._t;
} else {
for (let nodeName in node) {
if (nodeName == '_n')
continue;
const n = node[nodeName]; for (let nodeName in node) {
out += this.formatFb2Node(n, nodeName); if (nodeName == '_n' || nodeName == '_t')
} continue;
const n = node[nodeName];
out += this.formatFb2Node(n, nodeName);
} }
out += `</${name}>`; out += `</${name}>`;
} }
return out; return out;