From 80e74a77d4b61cf6f8c1e36807e9855cf6dcac65 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 30 Jul 2021 14:32:53 -0700 Subject: [PATCH] Make Song.parse() take the file content instead of a file name --- src/chordpro/base.py | 52 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/chordpro/base.py b/src/chordpro/base.py index 96ffc6f..8df1bf0 100644 --- a/src/chordpro/base.py +++ b/src/chordpro/base.py @@ -190,33 +190,33 @@ class Song(object): def __init__(self, filename=None): self.filename = filename if self.filename: - self.parse(self.filename) + with open(filename) as song_file: + self.parse(song_file.read()) - def parse(self, filename): + def parse(self, text): self.metadata = Metadata() self.verses = [] self.verse_order = [] - with open(filename) as song_file: - is_verse = False - current_verse = None - for line_number, line in enumerate(song_file): - if Directive.is_directive(line): - self.metadata.add(Directive(line)) - elif Verse.is_start_of_verse(line): - is_verse = True - current_verse = Verse.parse(line) - self.verse_order.append(current_verse) - elif Verse.is_end_of_verse(line): - if not Verse.is_end_of_verse(line, current_verse.type_): - raise MismatchedVerseType(line_number, current_verse.type_) - self.verses.append(current_verse) - is_verse = False - current_verse = None - elif is_verse: - current_verse.add_line(line.strip()) - elif Verse.is_chorus_marker(line): - chorus_name = Verse.get_chorus_from_marker(line) - for verse in self.verses[::-1]: - if verse.title == chorus_name or verse.type_ == "chorus": - self.verse_order.append(verse) - break + is_verse = False + current_verse = None + for line_number, line in enumerate(text.splitlines()): + if Directive.is_directive(line): + self.metadata.add(Directive(line)) + elif Verse.is_start_of_verse(line): + is_verse = True + current_verse = Verse.parse(line) + self.verse_order.append(current_verse) + elif Verse.is_end_of_verse(line): + if not Verse.is_end_of_verse(line, current_verse.type_): + raise MismatchedVerseType(line_number, current_verse.type_) + self.verses.append(current_verse) + is_verse = False + current_verse = None + elif is_verse: + current_verse.add_line(line.strip()) + elif Verse.is_chorus_marker(line): + chorus_name = Verse.get_chorus_from_marker(line) + for verse in self.verses[::-1]: + if verse.title == chorus_name or verse.type_ == "chorus": + self.verse_order.append(verse) + break