Commit 6d2967f0 authored by Victor Zimmermann's avatar Victor Zimmermann
Browse files

Add apheresis

parent ad1c9dc7
Loading
Loading
Loading
Loading
+28 −5
Changes for allzweckmesser/scanner.py: 28 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -547,7 +547,7 @@ def positional_lengthening(verse):
                    break


def make_elisions(verse):
def make_elisions(verse, old = False):
    for reading in verse.readings:
        for i, token in enumerate(reading.tokens):
            if not token.is_punct() and i < len(reading.tokens) - 1:
@@ -562,13 +562,35 @@ def make_elisions(verse):
                    # Break the for and continue with the next reading.
                    break

                m = re.search(r'[aeiouy][mh]*$', this_syllable.text,

                if old:
                    m = re.search(r'[aeiouy]([mhs]*)$', this_syllable.text,
                                  flags=re.IGNORECASE)
                else:                    
                    m = re.search(r'[aeiouy]([mh]*)$', this_syllable.text,
                                  flags=re.IGNORECASE)
                    
                if m:
                    if re.search(r'^h?[aeiouy]', next_syllable.text,
                    if reading.tokens[i+1].text in {'es', 'est', 'estis'}:
                        apharesis = Phenomenon(omitted='e')
                        next_syllable.phenomena['apharesis'] = apharesis
                        next_syllable.syllable_length = 0
                        if reading.tokens[i+1].text in {'est', 'estis'}:
                            pl = Phenomenon(chars=m.groups(0)+" est")
                            this_syllable.phenomena['positional_lengthening'] = pl
                            this_syllable.syllable_length = 2
                        elif reading.tokens[i+1].text in {'es'} and 'm' in m.groups(1):
                            pl = Phenomenon(chars=m.groups(0)+" es")
                            this_syllable.phenomena['positional_lengthening'] = pl
                            this_syllable.syllable_length = 2
                            
                    elif re.search(r'^h?[aeiouy]', next_syllable.text,
                                 flags=re.IGNORECASE):
                        # Elision!
                        elision = Phenomenon(omitted=m.group())
                        if 's' in m.group():
                            this_syllable.phenomena['s-elision'] = elision
                        else:
                            this_syllable.phenomena['elision'] = elision
                        this_syllable.syllable_length = 0
    return verse
@@ -645,8 +667,9 @@ def parse_verse(verse):

class Scanner:

    def __init__(self):
    def __init__(self, old=False):
        self.word_list = WordList()
        self.old = old

    def scan_verses(self, plain_verses: List[str]):
        base_readings = [Reading(tokens=tokenize(v)) for v in plain_verses]
@@ -660,5 +683,5 @@ class Scanner:
                new_readings.extend(get_syllables(reading))
            verse.readings = new_readings
            parse_verse(verse)
            make_elisions(verse)
            make_elisions(verse, self.old) #old latin not fully implemented
        return verses