Небольшие переделки парсера samlib, поправки багов

This commit is contained in:
Book Pauk
2019-02-08 16:17:26 +07:00
parent 3fd404f022
commit ae1547fac4

View File

@@ -190,28 +190,30 @@ class BookConverter {
let titleInfo = {}; let titleInfo = {};
let desc = {_n: 'description', 'title-info': titleInfo}; let desc = {_n: 'description', 'title-info': titleInfo};
let pars = []; let pars = [];
let body = {_n: 'body', section: {_a: [pars]}}; let body = {_n: 'body', section: {_a: pars}};
let fb2 = [desc, body]; let fb2 = [desc, body];
let inSubtitle = false; let inSubtitle = false;
let inJustify = true;
let path = ''; let path = '';
let tag = '';// eslint-disable-line no-unused-vars let tag = '';// eslint-disable-line no-unused-vars
let inText = false; let inText = false;
let node = {}; let node = {_a: pars};
const newParagraph = () => { let inPara = false;
node = {_n: 'p', _a: []};
pars.push(node);
};
const openTag = (name) => { const openTag = (name) => {
if (name == 'p')
inPara = true;
let n = {_n: name, _a: [], _p: node}; let n = {_n: name, _a: [], _p: node};
node._a.push(n); node._a.push(n);
node = n; node = n;
}; };
const closeTag = (name) => { const closeTag = (name) => {
if (name == 'p')
inPara = false;
if (node._n == name && node._p) { if (node._n == name && node._p) {
node = node._p; node = node._p;
} }
@@ -223,7 +225,7 @@ class BookConverter {
node._a.push({_t: text}); node._a.push({_t: text});
}; };
newParagraph(); openTag('p');
const onStartNode = (elemName, tail, singleTag, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars const onStartNode = (elemName, tail, singleTag, cutCounter, cutTag) => {// eslint-disable-line no-unused-vars
if (elemName == '') if (elemName == '')
@@ -232,11 +234,18 @@ class BookConverter {
path += '/' + elemName; path += '/' + elemName;
tag = elemName; tag = elemName;
} else { } else {
if (!inSubtitle && (elemName == 'p' || elemName == 'dd' || elemName == 'li')) { if (inPara && elemName != 'i' && elemName != 'b')
newParagraph(); closeTag('p');
}
switch (elemName) { switch (elemName) {
case 'li':
case 'p':
case 'dd':
case 'h1':
case 'h2':
case 'h3':
openTag('p');
break;
case 'i': case 'i':
openTag('emphasis'); openTag('emphasis');
break; break;
@@ -249,8 +258,9 @@ class BookConverter {
inSubtitle = true; inSubtitle = true;
} }
if (!inSubtitle && tail.indexOf('align="justify"') >= 0) { if (tail.indexOf('align="justify"') >= 0) {
newParagraph(); openTag('p');
inJustify = true;
} }
break; break;
@@ -276,6 +286,14 @@ class BookConverter {
tag = path.substr(i + 1); tag = path.substr(i + 1);
} else { } else {
switch (elemName) { switch (elemName) {
case 'li':
case 'p':
case 'dd':
case 'h1':
case 'h2':
case 'h3':
closeTag('p');
break;
case 'i': case 'i':
closeTag('emphasis'); closeTag('emphasis');
break; break;
@@ -283,9 +301,15 @@ class BookConverter {
closeTag('strong'); closeTag('strong');
break; break;
case 'div': case 'div':
if (inSubtitle) if (inSubtitle) {
closeTag('subtitle'); closeTag('subtitle');
inSubtitle = false; inSubtitle = false;
}
if (inJustify) {
closeTag('p');
inJustify = false;
}
break; break;
} }
} }