};
function renderChordpro(text) {
- let verseLines = null;
+ let verseLines = [];
let verseHasChords = false;
song.length = 0;
+ const flushVerse = () => {
+ if (verseLines.length === 0)
+ return;
+ song.push(html`<p class="verse${verseHasChords ? ' chords' : ''}">${verseLines}</p>`);
+ verseLines = [];
+ verseHasChords = false;
+ };
+
for (let line of text.split('\n')) {
line = line.trim();
if (line.startsWith('#'))
let m;
if ((m = re_directive.exec(line)) !== null) {
+ flushVerse();
const [_, directive, value] = m;
const handler = directive_handlers[directive];
if (handler)
else
console.warn('unknown directive:', line);
} else if (line === '') {
- if (verseLines == null)
- continue;
- song.push(html`<p class="verse${verseHasChords ? ' chords' : ''}">${verseLines}</p>`);
- verseLines = null;
- verseHasChords = false;
+ flushVerse();
} else {
- if (verseLines == null)
- verseLines = [];
-
// split line into segments of one chord plus the lyrics up to the
// next chord; the first element is the lyrics before the first chord
const [lead, ...rest] = line.split(/\[([^\]]+)\]/);
verseLines.push(segments);
}
}
+ flushVerse();
render(song, el_song);
}