Работа над конвертером html
This commit is contained in:
@@ -26,12 +26,12 @@ class BookConverter {
|
|||||||
const parsedUrl = new URL(url);
|
const parsedUrl = new URL(url);
|
||||||
if (parsedUrl.hostname == 'samlib.ru' ||
|
if (parsedUrl.hostname == 'samlib.ru' ||
|
||||||
parsedUrl.hostname == 'budclub.ru') {
|
parsedUrl.hostname == 'budclub.ru') {
|
||||||
await fs.writeFile(outputFile, await this.convertSamlib(data));
|
await fs.writeFile(outputFile, await this.convertHtml(data));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Заглушка
|
//Заглушка
|
||||||
await fs.writeFile(outputFile, data);
|
await fs.writeFile(outputFile, await this.convertHtml(data));
|
||||||
callback(100);
|
callback(100);
|
||||||
} else {
|
} else {
|
||||||
if (fileType)
|
if (fileType)
|
||||||
@@ -55,6 +55,93 @@ class BookConverter {
|
|||||||
return iconv.decode(data, selected);
|
return iconv.decode(data, selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async convertHtml(data) {
|
||||||
|
let titleInfo = {};
|
||||||
|
let desc = {_n: 'description', 'title-info': titleInfo};
|
||||||
|
let pars = [];
|
||||||
|
let body = {_n: 'body', section: {_a: [pars]}};
|
||||||
|
let fb2 = [desc, body];
|
||||||
|
|
||||||
|
let path = '';
|
||||||
|
let tag = '';// eslint-disable-line no-unused-vars
|
||||||
|
|
||||||
|
const newParagraph = () => {
|
||||||
|
pars.push({_n: 'p', _t: ''});
|
||||||
|
};
|
||||||
|
|
||||||
|
const growParagraph = (text) => {
|
||||||
|
const l = pars.length;
|
||||||
|
if (l) {
|
||||||
|
if (pars[l - 1]._t == '')
|
||||||
|
text = text.trimLeft();
|
||||||
|
pars[l - 1]._t += text;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const parser = new EasySAXParser();
|
||||||
|
|
||||||
|
parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('startNode', (elemName, getAttr, isTagEnd, getStrNode) => {// eslint-disable-line no-unused-vars
|
||||||
|
path += '/' + elemName;
|
||||||
|
tag = elemName;
|
||||||
|
|
||||||
|
if (elemName == 'p' || elemName == 'dd') {
|
||||||
|
newParagraph();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('endNode', (elemName, isTagStart, getStrNode) => {// eslint-disable-line no-unused-vars
|
||||||
|
const oldPath = path;
|
||||||
|
let t = '';
|
||||||
|
do {
|
||||||
|
let i = path.lastIndexOf('/');
|
||||||
|
t = path.substr(i + 1);
|
||||||
|
path = path.substr(0, i);
|
||||||
|
} while (t != elemName && path);
|
||||||
|
|
||||||
|
if (t != elemName) {
|
||||||
|
path = oldPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
let i = path.lastIndexOf('/');
|
||||||
|
tag = path.substr(i + 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('textNode', (text) => {// eslint-disable-line no-unused-vars
|
||||||
|
if (text != ' ' && text.trim() == '')
|
||||||
|
text = text.trim();
|
||||||
|
|
||||||
|
if (text == '')
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (path) {
|
||||||
|
case '/html/head/title':
|
||||||
|
titleInfo['book-title'] = text;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
growParagraph(text);
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('cdata', (data) => {// eslint-disable-line no-unused-vars
|
||||||
|
});
|
||||||
|
|
||||||
|
parser.on('comment', (text) => {// eslint-disable-line no-unused-vars
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
parser.on('progress', async(progress) => {
|
||||||
|
callback(...........);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
await parser.parse(this.decode(data));
|
||||||
|
|
||||||
|
return this.formatFb2(fb2);
|
||||||
|
}
|
||||||
|
|
||||||
async convertSamlib(data) {
|
async convertSamlib(data) {
|
||||||
let titleInfo = {};
|
let titleInfo = {};
|
||||||
let desc = {_n: 'description', 'title-info': titleInfo};
|
let desc = {_n: 'description', 'title-info': titleInfo};
|
||||||
|
|||||||
Reference in New Issue
Block a user