fixed bug related to loop counter update

This commit is contained in:
Carlos Galindo 2020-10-15 12:16:57 +02:00
parent 9c5602876c
commit 30dc36d262

View file

@ -84,15 +84,16 @@ class SongLoader:
text = re.sub(r"\\brk({})?", '', text)
extras = {}
for i in range(len(text)):
i = 0
while i <= len(text):
beginning = text[:i]
remain = text[i:]
if re.match(r"\\fi", remain):
ignore = False
text = beginning + text[i + len("\\fi"):]
i -= 1
continue
if ignore:
i += 1
continue
# Command lookup
@ -100,7 +101,6 @@ class SongLoader:
if re_transpose_match:
text = beginning + text[i + len(re_transpose_match.group(0)):]
transpose = int(re_transpose_match.group(1))
i -= 1
continue
re_song_begin_match = re.match(r"\\beginsong *?{(.*?)}(\[.*?])?", remain)
if re_song_begin_match:
@ -120,14 +120,12 @@ class SongLoader:
replay_index = 0
for a in find_audios(self.index):
current_song.add_audio(a)
i -= 1
continue
if re.match(r"\\endsong", remain):
text = beginning + text[i + len("\\endsong"):]
self.songs.append(current_song)
current_song = None
self.index += 1
i -= 1
continue
re_verse_cmd_match = re.match(r"\\(begin|end)(verse|chorus)", remain)
if re_verse_cmd_match:
@ -150,33 +148,27 @@ class SongLoader:
memorizing = False
current_song.add_verse(current_verse)
current_verse = None
i -= 1
continue
re_capo_match = re.match(r"\\capo{(\d+?)}", remain)
if re_capo_match and current_song:
text = beginning + text[i + len(re_capo_match.group(0)):]
current_song.set_capo(int(re_capo_match.group(1)))
i -= 1
continue
if re.match(r"\\ifchorded", remain):
text = beginning + text[i + len("\\ifchorded"):]
i -= 1
continue
if re.match(r"\\else", remain):
ignore = True
text = beginning + text[i + len("\\else"):]
i -= 1
continue
re_echo_match = re.match(r"\\echo[ \t]*?{((.|{.*?})*?)}", remain)
if re_echo_match:
text = beginning + re_echo_match.group(1) + "\\echoend" + text[i + len(re_echo_match.group(0)):]
extra_put(extras, i, "echo")
i -= 1
continue
if re.match(r"\\echoend", remain):
text = beginning + text[i + len("\\echoend"):]
extra_put(extras, i, "echo")
i -= 1
continue
re_chord_match = re.match(r"\\\[(.+?)]", remain)
if re_chord_match:
@ -185,51 +177,44 @@ class SongLoader:
extra_put(extras, i, "chord", c)
if memorizing:
memory.append(c)
i -= 1
continue
if re.match(r"\^", remain):
text = beginning + text[i + len("^"):]
if memory is not None and replay_index < len(memory):
extra_put(extras, i, "chord", memory[replay_index])
replay_index += 1
i -= 1
continue
re_dir_rep_match = re.match(r"\\([lr]rep)", remain)
if re_dir_rep_match:
text = beginning + text[i + len(re_dir_rep_match.group(0)):]
extra_put(extras, i, "dir-rep", re_dir_rep_match.group(1))
i -= 1
continue
re_rep_match = re.match(r"\\rep{(\d+?)}", remain)
if re_rep_match:
text = beginning + text[i + len(re_rep_match.group(0)):]
extra_put(extras, i, 'rep', int(re_rep_match.group(1)))
i -= 1
continue
if re.match(r"\\memorize", remain):
text = beginning + text[i + len("\\memorize"):]
memory = []
memorizing = True
i -= 1
continue
if re.match(r"\\replay", remain):
text = beginning + text[i + len("\\replay"):]
replay_index = 0
i -= 1
continue
# Command lookup end, removing any unrecognized command
re_macro_match = re.match(r"\\([^ \t{\[]+)[ \t]*?({.*?}|\[.*?])*", remain)
if re_macro_match:
text = beginning + text[i + len(re_macro_match.group(0)):]
print("Removed an unrecognized command:", re_macro_match.group(0))
i -= 1
continue
i += 1
if not current_verse and text.strip() != '':
print("l outside v:", text)
continue
if ignore or text.strip() == '':
continue
current_verse.add_line(Line(text, extras))
def print_index(self, index_file="index.html"):