Skip to content

Commit f4674ee

Browse files
committed
refactor personending
1 parent 3d63a32 commit f4674ee

File tree

5 files changed

+61
-27
lines changed

5 files changed

+61
-27
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from typing import List
2+
from verbecc.src.defs.types.person import Person
3+
from verbecc.src.defs.types.data.element import Element
4+
5+
6+
class PersonEnding(Element):
7+
"""
8+
Ending for a specific verb template, mood, tense and grammatical person
9+
May also have one or more alternate endings for an alternative spellings
10+
or regional variations.
11+
E.g. Endings for aim:er indicatif présent 2nd Person Plural = ['ez']
12+
E.g. Endings for pa:yer indicatif présent 1st Person Singular = ['ie', 'ye']
13+
Explanation: 'ye' is an alternate spelling (je paie, je paye)
14+
person
15+
A grammar_defines.PERSONS value indicating which person
16+
this PersonEnding is for, e.g. for aim:er, "ez" is '2p' (second person plural)
17+
"""
18+
19+
def __init__(self, person: Person, endings: List[str]) -> None:
20+
self.person = person
21+
self.endings = endings
22+
23+
def get_person(self) -> Person:
24+
return self.person
25+
26+
def get_endings(self) -> List[str]:
27+
return self.endings
28+
29+
def get_ending(self) -> str:
30+
return self.endings[0]
31+
32+
def get_alternate_ending_if_available(self) -> str:
33+
if len(self.endings) > 1:
34+
return self.endings[1]
35+
return self.endings[0]
36+
37+
def __repr__(self) -> str:
38+
return "person={} endings={}".format(self.person, self.endings)

verbecc/src/inflectors/inflector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from verbecc.src.defs.types.lang_code import LangCodeISO639_1
55
from verbecc.src.defs.types.mood import MoodEn as Mood
66
from verbecc.src.defs.types.tense import TenseEn as Tense
7-
from verbecc.src.parsers.person_ending import PersonEnding
7+
from verbecc.src.defs.types.data.person_ending import PersonEnding
88

99

1010
logging_level = logging.CRITICAL + 1 # effectively disables logging

verbecc/src/inflectors/lang/inflector_es.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
LangSpecificOptionsEs,
1414
)
1515
from verbecc.src.defs.types.lang.es.voseo_options import VoseoOptions
16+
from verbecc.src.defs.types.data.person_ending import PersonEnding
1617
from verbecc.src.inflectors.inflector import Inflector
1718
from verbecc.src.conjugator.conjugation_object import ConjugationObjects
1819
from verbecc.src.parsers.tense_template import TenseTemplate
19-
from verbecc.src.parsers.person_ending import PersonEnding
2020
from verbecc.src.utils.string_utils import strip_accents
2121

2222

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from lxml import etree
22
from typing import List
33

4+
from verbecc.src.parsers.parser import Parser
5+
from verbecc.src.defs.types.data.person_ending import PersonEnding
46
from verbecc.src.defs.types.person import Person
57

68

7-
class PersonEnding:
9+
class PersonEndingParser(Parser):
810
"""
911
p_elem
1012
aka <p>
@@ -24,28 +26,21 @@ class PersonEnding:
2426
this PersonEnding is for, e.g. for aim:er, "ez" is '2p' (second person plural)
2527
"""
2628

27-
def __init__(self, p_elem: etree._Element, person: Person) -> None:
28-
self.person = person
29-
self.endings: List[str] = []
30-
for i_elem in p_elem.findall("i", None):
29+
def __init__(self) -> None:
30+
pass
31+
32+
def parse(self, elem: etree._Element, person: Person) -> PersonEnding:
33+
"""
34+
elem: a single <p> element
35+
Example:
36+
<p><i>ez</i></p>
37+
<p><i>eoir</i><i>oir</i></p>
38+
<p></p>
39+
"""
40+
endings: List[str] = []
41+
for i_elem in elem.findall("i", None):
3142
ending = str("")
3243
if i_elem.text is not None:
3344
ending += str(i_elem.text)
34-
self.endings.append(ending)
35-
36-
def get_person(self) -> Person:
37-
return self.person
38-
39-
def get_endings(self) -> List[str]:
40-
return self.endings
41-
42-
def get_ending(self) -> str:
43-
return self.endings[0]
44-
45-
def get_alternate_ending_if_available(self) -> str:
46-
if len(self.endings) > 1:
47-
return self.endings[1]
48-
return self.endings[0]
49-
50-
def __repr__(self) -> str:
51-
return "person={} endings={}".format(self.person, self.endings)
45+
endings.append(ending)
46+
return PersonEnding(person, endings)

verbecc/src/parsers/tense_template.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from lxml import etree
22
from typing import List
33

4-
from verbecc.src.parsers.person_ending import PersonEnding
4+
from verbecc.src.parsers.person_ending_parser import PersonEndingParser
5+
from verbecc.src.defs.types.data.person_ending import PersonEnding
56
from verbecc.src.defs.constants import grammar_defines
67
from verbecc.src.defs.types.tense import Tense
78
from verbecc.src.defs.types.person import Person
@@ -89,7 +90,7 @@ def __init__(self, lang: Lang, mood: Mood, tense_elem: etree._Element) -> None:
8990
person = grammar_defines.PERSONS[person_num]
9091
if self.mood == xmood(self.lang, Mood.en.Imperative):
9192
person = grammar_defines.IMPERATIVE_PERSONS[self.lang][person_num]
92-
pe = PersonEnding(p_elem, person)
93+
pe = PersonEndingParser().parse(p_elem, person)
9394
person_num += 1
9495
if len(pe.endings) > 0:
9596
self.person_endings.append(pe)

0 commit comments

Comments
 (0)