-
Notifications
You must be signed in to change notification settings - Fork 10
/
generate-hymnals.js
103 lines (91 loc) · 2.59 KB
/
generate-hymnals.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const fs = require('fs');
const json = [];
const FILES = [
{
path: './src/himnarios/himnario-bautista.txt',
book: 'Himnos Bautistas',
keepNum: false
},
{
path: './src/himnarios/himnario-majestuoso.txt',
book: 'Himnos Majestuosos',
keepNum: false
},
{
path: './src/himnarios/himnario-gracia.txt',
book: 'Himnos de Gracia',
keepNum: true
},
{
path: './src/himnarios/corario-bautista.txt',
book: 'Corario Bautista',
keepNum: false
},
{
path: './src/himnarios/himnario-apendice.txt',
book: 'Apéndice',
keepNum: false
}
];
const OUTPUT = './dist/himnario/index.json';
function process(data, book, keepNum = false) {
const songs = data.split('---').filter((song) => song !== '');
songs.forEach((song, index) => {
const parts = song.split('***\r\n').filter((part) => part !== '');
const item = {
number: 1 + index,
title: '',
chorus: null,
stanzas: [],
startsWithChorus: false,
repeatChorusAtEnd: false,
authors: null,
tags: null,
book
};
parts.forEach((part, index) => {
const lines = part.split('\r\n').filter((line) => line !== '');
if (index === 0) {
let title = lines.join().replace('## ', '').replace('.', '');
const tempNumber = +title.match(/^\d+/gm);
item.title = title.replace(tempNumber, '').trim();
if (keepNum) {
item.number = tempNumber;
}
} else {
if (lines[0].includes('@CORO')) {
lines.shift();
item.chorus = lines.join('/n');
item.startsWithChorus = item.stanzas.length === 0;
} else if (lines[0].includes('@AUTHORS')) {
lines.shift();
item.authors = lines.join(', ');
} else if (lines[0].includes('@TAGS')) {
lines.shift();
item.tags = lines.join(',');
} else if (lines[0].includes('@REPETIR_CORO_AL_FINAL')) {
item.repeatChorusAtEnd = true;
} else {
item.stanzas.push(lines.join('/n'));
}
}
});
item.stanzas = item.stanzas.map((stanza, index) => {
const tempNumber = stanza.match(/^\d+/gm);
return `${!tempNumber ? `${index + 1}) ` : ''}${stanza}`;
});
json.push(item);
});
}
FILES.forEach((file, index) => {
const data = fs.readFileSync(file.path, 'utf8');
process(data, file.book, file.keepNum);
if (index === FILES.length - 1) {
fs.writeFile(OUTPUT, JSON.stringify(json, null, 2), 'utf-8', (err) => {
if (err) {
return console.log(err);
}
console.log('Himnario generado!');
});
}
});