1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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;
|