Files
inpx-web/server/core/genres/index.js
2022-09-12 16:15:30 +07:00

77 lines
2.0 KiB
JavaScript

const genresText = require('./genresText.js');
const genres = [];
const nonfb2Genres = [];//костылики
let nonfb2 = false;//костылики
const sec2index = {};
const lines = genresText.split('\n').map(l => l.trim());
let index = 0;
let other;//прочее в конец
const names = new Set();
for (const line of lines) {
if (line.indexOf('#nonfb2') == 0)
nonfb2 = true;
if (!line || line[0] == '#')
continue;
const p = line.indexOf(' ');
const num = line.substring(0, p).trim().split('.');
if (num.length < 2)
continue;
const section = `${num[0]}.${num[1]}`;
if (section == '0.0')
continue;
let name = line.substring(p + 1).trim();
if (!nonfb2) {
if (num.length < 3) {//раздел
if (section == '0.20') {//прочее
other = {name, value: []};
} else {
if (sec2index[section] === undefined) {
if (!genres[index])
genres[index] = {name, value: []};
sec2index[section] = index;
index++;
}
}
} else {//подраздел
const n = name.split(';').map(l => l.trim());
names.add(n[0]);
if (section == '0.20') {//прочее
other.value.push({name: n[1], value: n[0]});
} else {
const i = sec2index[section];
if (i !== undefined) {
genres[i].value.push({name: n[1], value: n[0]});
}
}
}
} else {
const n = name.split(';').map(l => l.trim());
if (!names.has(n[0]))
nonfb2Genres.push({name: n[1], value: n[0]});
names.add(n[0]);
}
}
if (other) {
if (nonfb2Genres.length) {
other.value = other.value.concat(nonfb2Genres);
}
genres.push(other);
}
//console.log(JSON.stringify(genres));
module.exports = genres;