commit 50e815a7229ff1e569c75e9a12f1f315dd5e4bec
parent c9fecc50380af0d1bc1842817edc37fbf70f1288
Author: ashermorgan <59518073+ashermorgan@users.noreply.github.com>
Date: Wed, 21 Feb 2024 16:08:33 -0800
Handle extra newlines in parse_song_lyrics
Diffstat:
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/songs2slides/core.py b/songs2slides/core.py
@@ -77,13 +77,15 @@ def parse_song_lyrics(lyrics: str, lines_per_slide: int = 4):
slides = ['']
line_count = 0
- for line in lyrics.split('\n'):
+ for line in lyrics.strip().split('\n'):
line = line.strip()
if line == '':
# Empty line represents new slide
- slides += ['']
- line_count = 0
+ if line_count != 0 or len(slides) < 2 or slides[-2] != '':
+ # Consecutive empty slides are not allowed
+ slides += ['']
+ line_count = 0
elif line_count < lines_per_slide:
# Add line to current slide
@@ -96,10 +98,8 @@ def parse_song_lyrics(lyrics: str, lines_per_slide: int = 4):
slides += [line]
line_count = 1
- # Remove first/last slide if empty
- # len(slides) is always greater than 1 or single slide is not empty
- if slides[0] == '': slides = slides[1:]
- if slides[-1] == '': slides = slides[:-1]
+ # Address case where lyrics are empty
+ if slides == ['', '']: slides = []
return slides
diff --git a/tests/test_core.py b/tests/test_core.py
@@ -136,6 +136,17 @@ class TestCore(unittest.TestCase):
# Assert slides are correct
self.assertEqual(result, expected)
+ def test_parse_song_lyrics_extra_newlines(self):
+ # Declare song data and expected slides
+ lyrics = '\n\n\nA\n\n\n\n\nB\n\n\n'
+ expected = ['A', '', 'B']
+
+ # Get slide content
+ result = core.parse_song_lyrics(lyrics)
+
+ # Assert slides are correct
+ self.assertEqual(result, expected)
+
def test_assemble_slides_calls_parse_song_lyrics(self):
with patch('songs2slides.core.parse_song_lyrics') as mocked_parse: