songs2slides

A tool that automatically finds song lyrics and creates lyric slideshows
git clone https://git.ashermorgan.net/songs2slides/
Log | Files | Refs | README

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:
Msongs2slides/core.py | 14+++++++-------
Mtests/test_core.py | 11+++++++++++
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: