/
silabeo.py
79 lines (56 loc) · 2.03 KB
/
silabeo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class Silabeo:
def parse(text):
result = []
syllable = ""
lastsyllable = ""
for k in range(len(text)):
letter = text[k]
if is_vowel(letter) or is_extended_vowel(letter, text, k):
if len(syllable) == 0 and is_diphthong(lastsyllable, letter):
result[len(result) - 1] += letter
continue
syllable += letter
result.append(syllable)
lastsyllable = syllable
syllable = ""
elif is_ending_consonant(letter) and not use_next_letter(text, k + 1, letter):
result[len(result) - 1] += letter
elif k == len(text) - 1:
result[len(result) - 1] += letter
else:
syllable += letter
if len(syllable) > 0:
result.append(syllable)
return result
def is_vowel(letter):
return letter in "aeiouáéíóú"
def is_extended_vowel(letter, text, position):
if not letter in "yY":
return False
if position == len(text) - 1:
return True
nextletter = text[position + 1]
if is_vowel(nextletter):
return False
return True
def is_open_vowel(letter):
return letter in "aeoáéóíú"
def is_ending_consonant(letter):
return letter in "rlns"
def use_next_letter(text, position, letter):
if position >= len(text):
return False
if is_vowel(text[position]):
return True
if text[position] == letter:
return True
return False
def is_diphthong(syllable, letter):
if len(syllable) == 0:
return False
lastletter = syllable[-1]
if not is_vowel(lastletter):
return False
if is_open_vowel(lastletter) and is_open_vowel(letter):
return False
return True