diff --git a/allzweckmesser/scanner.py b/allzweckmesser/scanner.py index 9f61205469d7d2294d1754d93dcc3cde7043f2b6..438d8182ef5c26af5ffda1dd1d080179af04e6d8 100644 --- a/allzweckmesser/scanner.py +++ b/allzweckmesser/scanner.py @@ -221,7 +221,9 @@ def get_syllables_for_token(token: Token): syllable_length=syll_vowel_length) syllables.append(syll) else: - syllables = [] + if not token.is_punct(): + syllables = [Syllable(syllable=token.text, span=token.span, idx=None, + vowel_length=1, syllable_length=1)] return syllables @@ -269,12 +271,21 @@ def positional_lengthening(verse): def make_elisions(verse): for reading in verse.readings: for i, token in enumerate(reading.tokens): - if i < len(reading.tokens) - 1: + if not token.is_punct() and i < len(reading.tokens) - 1: this_syllable = token.syllables[-1] - next_syllable = reading.tokens[i+1].syllables[0] + j = i + for j in range(i + 1, len(reading.tokens)): + if not reading.tokens[j].is_punct(): + next_syllable = reading.tokens[j].syllables[0] + break + else: + # No succeeding syllable has been found. + # Break the for and continue with the next reading. + break + m = re.search(r'[aeiouy][mh]*$', this_syllable.text) if m: - if re.search(r'h?[aeiouy]', next_syllable.text): + if re.search(r'^h?[aeiouy]', next_syllable.text): # Elision! this_syllable.phenomena['elision'] = Phenomenon(omitted=m.group()) this_syllable.syllable_length = 0