diff --git a/src/latex_scanner.py b/src/latex_scanner.py index 407e3e8..e2bdd33 100644 --- a/src/latex_scanner.py +++ b/src/latex_scanner.py @@ -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"):