latinverb 0.2.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -1
- data/Gemfile +1 -2
- data/README.markdown +54 -240
- data/etc/irreg_skel.json +104 -0
- data/{latinirb.gemspec → latinverb.gemspec} +4 -4
- data/lib/latinverb/chart.rb +94 -0
- data/lib/latinverb/version.rb +10 -0
- data/lib/latinverb.rb +710 -0
- data/lib/linguistics/latin/verb/classification_types.rb +59 -0
- data/lib/linguistics/latin/verb/constants.rb +201 -0
- data/lib/linguistics/latin/verb/deponent_tense_methods.rb +98 -0
- data/lib/linguistics/latin/verb/infinitives.rb +212 -0
- data/lib/linguistics/latin/verb/irregulars.rb +4393 -0
- data/lib/linguistics/latin/verb/latinverb/auxiliary_classes.rb +208 -0
- data/lib/linguistics/latin/verb/latinverb/classmethods.rb +215 -0
- data/lib/linguistics/latin/verb/latinverb/data.rb +90 -0
- data/lib/linguistics/latin/verb/latinverb/display.rb +23 -0
- data/lib/linguistics/latin/verb/latinverb/metaprogramming.rb +79 -0
- data/lib/linguistics/latin/verb/latinverb/validation.rb +66 -0
- data/lib/linguistics/latin/verb/participles.rb +202 -0
- data/lib/linguistics/latin/verb/phonographia.rb +109 -0
- data/lib/linguistics/latin/verb/supine.rb +42 -0
- data/lib/linguistics/latin/verb/tense_methods.rb +950 -0
- data/test/testAmbiguousLookups.rb +30 -0
- data/test/testClusterResolution.rb +20 -0
- data/test/testDataStructures.rb +29 -0
- data/test/testDefectSemiImp.rb +111 -0
- data/test/testDeponentFirstConjugation.rb +64 -0
- data/test/testDeponentFourthConjugation.rb +64 -0
- data/test/testDeponentSecondConjugation.rb +64 -0
- data/test/testDeponentThirdConjugation.rb +64 -0
- data/test/testDeponentThirdIOConjugation.rb +64 -0
- data/test/testDeserializeInfinitives.rb +38 -0
- data/test/testFirstConjugation.rb +388 -0
- data/test/testFourthConjugation.rb +190 -0
- data/test/testFreakishVerbs.rb +93 -0
- data/test/testImperativeBlock.rb +27 -0
- data/test/testIrregularSum.rb +22 -0
- data/test/testIrregulars.rb +652 -0
- data/test/testLatinVerb.rb +195 -0
- data/test/testMacronRules.rb +19 -0
- data/test/testSecondConjugation.rb +189 -0
- data/test/testThirdConjugation.rb +190 -0
- data/test/testThirdIOConjugation.rb +190 -0
- metadata +70 -18
- data/bin/latinirb.rb +0 -7
- data/latinverb.rb +0 -544
- data/lib/LatinIRB.rb +0 -172
- data/lib/latinirb/paradigmatic_verbs.rb +0 -17
- data/lib/latinirb/version.rb +0 -10
- data/lib/latirb.rb +0 -20
@@ -0,0 +1,202 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'latinverb'
|
4
|
+
require 'linguistics/latin/verb/phonographia'
|
5
|
+
|
6
|
+
module Linguistics
|
7
|
+
module Latin
|
8
|
+
module Verb
|
9
|
+
##
|
10
|
+
# == NAME
|
11
|
+
#
|
12
|
+
# Participles
|
13
|
+
#
|
14
|
+
# == DESCRIPTION
|
15
|
+
#
|
16
|
+
# This module contains the methods that, when mixed into a LatinVerb,
|
17
|
+
# will provide it the ability to resolve its participles (verbal
|
18
|
+
# adjectives).
|
19
|
+
#
|
20
|
+
# == REFERENCE
|
21
|
+
#
|
22
|
+
# Allen and Greenough Se. 155:
|
23
|
+
#
|
24
|
+
# The following Noun and Adjective forms are also included in the
|
25
|
+
# inflection of the Latin Verb:
|
26
|
+
#
|
27
|
+
# a. Four Participles, viz: --
|
28
|
+
# <em>Active</em>: the Present and Future Participles
|
29
|
+
# <em>Passive</em>: the Perfect Participle and the Gerundive
|
30
|
+
# b. The Gerund: this is in form a neuter noun of the second
|
31
|
+
# declension used only in the oblique cases of hte singular.
|
32
|
+
# c. The Supine: this is in form a verbal noun of the fourth
|
33
|
+
# declension in the accusative (-um) and dative or ablative (-ū)
|
34
|
+
# singular
|
35
|
+
# ...
|
36
|
+
#
|
37
|
+
##
|
38
|
+
module Participles
|
39
|
+
|
40
|
+
##########################################
|
41
|
+
# Participles
|
42
|
+
##########################################
|
43
|
+
|
44
|
+
##
|
45
|
+
#
|
46
|
+
# === GRAMMATICAL FUNCTION
|
47
|
+
#
|
48
|
+
# A&G,158,a. The Present Participle (ending in -ns) has commly the
|
49
|
+
# meaning and use as the English participle in 'ing; as vocāns, calling.
|
50
|
+
# For inflection see egēns, sec. 118
|
51
|
+
#
|
52
|
+
# === ARGUMENTS
|
53
|
+
#
|
54
|
+
# None
|
55
|
+
#
|
56
|
+
# === RETURNS
|
57
|
+
#
|
58
|
+
# Array of participles
|
59
|
+
#
|
60
|
+
###
|
61
|
+
def present_active_participle
|
62
|
+
raise "Participial stem was nil" if @participial_stem.nil?
|
63
|
+
endings=%w(ns ntis)
|
64
|
+
return endings.collect{ |x| Linguistics::Latin::Phonographia.fix_macrons(@participial_stem+x.chomp)}.join(', ')
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
#
|
69
|
+
# === GRAMMATICAL FUNCTION
|
70
|
+
#
|
71
|
+
# A&G,158,b. The Future Participle (ending in -ūrus) is oftenest used to
|
72
|
+
# express what is likely or about to happen: as, rēctūrus, about to
|
73
|
+
# rule...
|
74
|
+
#
|
75
|
+
# === ARGUMENTS
|
76
|
+
#
|
77
|
+
# None
|
78
|
+
#
|
79
|
+
# === RETURNS
|
80
|
+
#
|
81
|
+
# Array of participles
|
82
|
+
#
|
83
|
+
###
|
84
|
+
def future_active_participle
|
85
|
+
# In case we have an irregular, or somehow already have a /ūrus$/ we shouldn't do this
|
86
|
+
mybase = (@pass_perf_part =~ /ūru.$/) ?
|
87
|
+
@pass_perf_part.gsub(/u[sm]$/,'')
|
88
|
+
:
|
89
|
+
@pass_perf_part.gsub(/u[sm]$/, "ūr")
|
90
|
+
|
91
|
+
singular_endings=%w(us a um)
|
92
|
+
return singular_endings.collect{|x| mybase+"#{x}".chomp}.join(', ')
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
#
|
97
|
+
# === GRAMMATICAL FUNCTION
|
98
|
+
#
|
99
|
+
# 158,c. The Perfect Participle (ending in -tus, -sus) has two uses:
|
100
|
+
#
|
101
|
+
# 1. It is sometimes equivalent to the English perfect passive
|
102
|
+
# participle:
|
103
|
+
#
|
104
|
+
# as tеctus, sheltered; acceptus, accepted...; and often simply has an
|
105
|
+
# adjective meaning: as, acceptus, acceptable.
|
106
|
+
#
|
107
|
+
# 2. It is used with the verb to be (esse) to form certain tenses of the
|
108
|
+
# passive: as, vocātus est, he was (has been) called.
|
109
|
+
#
|
110
|
+
# === ARGUMENTS
|
111
|
+
#
|
112
|
+
# None
|
113
|
+
#
|
114
|
+
# === RETURNS
|
115
|
+
#
|
116
|
+
# Array of participles
|
117
|
+
#
|
118
|
+
###
|
119
|
+
def perfect_passive_participle
|
120
|
+
mybase=@pass_perf_part.sub(/u[sm]$/,'')
|
121
|
+
singular_endings=%w(us a um)
|
122
|
+
return singular_endings.collect{|x| mybase+"#{x}".chomp}.join(', ')
|
123
|
+
end
|
124
|
+
|
125
|
+
##
|
126
|
+
#
|
127
|
+
# === GRAMMATICAL FUNCTION
|
128
|
+
#
|
129
|
+
# <em>See</em>: Gerundive
|
130
|
+
#
|
131
|
+
# === ARGUMENTS
|
132
|
+
#
|
133
|
+
# None
|
134
|
+
#
|
135
|
+
# === RETURNS
|
136
|
+
#
|
137
|
+
# Array of participles
|
138
|
+
#
|
139
|
+
###
|
140
|
+
def future_passive_participle
|
141
|
+
mybase = @participial_stem+"nd"
|
142
|
+
singular_endings=%w(us a um)
|
143
|
+
return singular_endings.collect{|x|Linguistics::Latin::Phonographia.fix_macrons( mybase+"#{x}".chomp)}.join(', ')
|
144
|
+
end
|
145
|
+
|
146
|
+
##
|
147
|
+
#
|
148
|
+
# === GRAMMATICAL FUNCTION
|
149
|
+
#
|
150
|
+
# A&G, 158,d.
|
151
|
+
#
|
152
|
+
# The Gerundive (ending in -ndus) has two uses:
|
153
|
+
#
|
154
|
+
# 1. ...an adjective implying obligation...
|
155
|
+
#
|
156
|
+
# 2. In the oblique cases the Gerundive commonly has the same meaning as
|
157
|
+
# the Gerund ... for examples see sec. 503
|
158
|
+
#
|
159
|
+
# === ARGUMENTS
|
160
|
+
#
|
161
|
+
# None
|
162
|
+
#
|
163
|
+
# === RETURNS
|
164
|
+
#
|
165
|
+
# Array of participles
|
166
|
+
#
|
167
|
+
###
|
168
|
+
def gerundive
|
169
|
+
self.future_passive_participle
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
#--
|
174
|
+
# The gerund is a verbal noun (loving dancing, running) formed like the
|
175
|
+
# gerundive, except that it only has four forms: the n. singular of the
|
176
|
+
# gen, dative, acc, and abl (the oblique cases). They are identical to
|
177
|
+
# the corresponding cases of the gerundive but ae ative in meaning and
|
178
|
+
# correspond to the english "-ing"
|
179
|
+
#
|
180
|
+
# Gerundive: verbal achective
|
181
|
+
# gerund: verbal noun
|
182
|
+
#
|
183
|
+
# gerund only has oblique
|
184
|
+
# gerundive is passive in meaning, gerund is active:
|
185
|
+
#
|
186
|
+
# A FUNNY THING I ALWAYS FORGET:
|
187
|
+
# studium legeni libros ==> studium librorum legendorum
|
188
|
+
# discimus legendo libros ==> discimus libris legendis
|
189
|
+
#
|
190
|
+
# -- Source, Wheelock
|
191
|
+
#++
|
192
|
+
##
|
193
|
+
#alias_method :gerund, :gerundive
|
194
|
+
def gerund
|
195
|
+
b = gerundive.sub /.*\s+(.*)um.*$/, "\\1"
|
196
|
+
b += "ī, ō, etc."
|
197
|
+
return b
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Linguistics
|
4
|
+
module Latin
|
5
|
+
##
|
6
|
+
#
|
7
|
+
# The Phonographia module handles the phonography of written Latin: how
|
8
|
+
# the sound of Latin is written. In particular, the sounds that need
|
9
|
+
# special notation are the vowels which may bear a long ("ā") or short
|
10
|
+
# ("a") quantity.
|
11
|
+
#
|
12
|
+
# When forming Latin words from heuristic ( as LatinVerb does ), certain
|
13
|
+
# phonographical structures arise that one does not see in the language as
|
14
|
+
# practiced by humans. For example, given "amāre," the stem is "amā."
|
15
|
+
# When the heuristic postpends "t" to get the present, indicative, third
|
16
|
+
# person singular, the result is "amāt," which, by rules of Latin
|
17
|
+
# phonology, must be made to bear a short sound in the ultimate vowel.
|
18
|
+
# This state is _phonographically_ notes as "amat." This module
|
19
|
+
# implements the appropriate rules for proper phonetic compliance.
|
20
|
+
#
|
21
|
+
##
|
22
|
+
module Phonographia
|
23
|
+
class << self
|
24
|
+
# === DESCRIPTION
|
25
|
+
#
|
26
|
+
# Latin has several rules pertaining to how long sounds must behave
|
27
|
+
# based on their neighboring characters. The rules that +fix_macrons+
|
28
|
+
# tests are the following
|
29
|
+
#
|
30
|
+
# === RULES
|
31
|
+
#
|
32
|
+
# <b>Rule 1: </b>:: m/r/t at end of line shortens preceding vowel
|
33
|
+
# <b>Rule 2: </b>:: macron-bearing vowel before vowel, regardless of
|
34
|
+
# its quantity
|
35
|
+
# <b>Rule 3: </b>:: macron-bearing vowel before /n[td]/ anywhere in the string
|
36
|
+
#
|
37
|
+
# === ARGUMENTS
|
38
|
+
#
|
39
|
+
# +s+ :: a string which needs to be processed for Latin phonographic
|
40
|
+
# compliance
|
41
|
+
#
|
42
|
+
# === RETURNS
|
43
|
+
#
|
44
|
+
# String with consonants properly converted
|
45
|
+
#
|
46
|
+
# === EXAMPLE
|
47
|
+
#
|
48
|
+
# fix_macrons(fabām) #=> fabam ( Rule 1 )
|
49
|
+
# fix_macrons(cāīō) #=> caiō ( Rule 1, Rule 2 )
|
50
|
+
#
|
51
|
+
##
|
52
|
+
def fix_macrons(s)
|
53
|
+
raise if s.nil?
|
54
|
+
return "" if s.empty?
|
55
|
+
macron_table = {"\xc4\x81" => 'a',
|
56
|
+
"\xc4\x93" => 'e',
|
57
|
+
"\xc4\xab" => 'i',
|
58
|
+
"\xc5\x8d" => 'o',
|
59
|
+
"\xc5\xab" => 'u',
|
60
|
+
"\xc4\x80" => 'A',
|
61
|
+
"\xc4\x92" => 'E',
|
62
|
+
"\xc4\xaa" => 'I',
|
63
|
+
"\xc5\x8c" => 'O',
|
64
|
+
"\xc5\xaa" => 'U',
|
65
|
+
"ā" => 'a',
|
66
|
+
"ē" => 'e',
|
67
|
+
"ī" => 'i',
|
68
|
+
"ō" => 'o',
|
69
|
+
"ū" => 'u',
|
70
|
+
"Ā" => 'A',
|
71
|
+
"Ē" => 'E',
|
72
|
+
"Ī" => 'I',
|
73
|
+
"Ō" => 'O',
|
74
|
+
"Ū" => 'U',
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
# m/r/t at end of line shortens preceding vowel
|
79
|
+
if s =~ /^(.*)([āēīōūĀĒĪŌŪ])([mrt])$/i
|
80
|
+
s = $1 + macron_table[$2] + $3
|
81
|
+
end
|
82
|
+
|
83
|
+
# macron before vowel
|
84
|
+
if s =~ /(.*)([āēīōūĀĒĪŌŪ])([āēīōūĀĒĪŌŪaeiouAEIOU])(.*)/i
|
85
|
+
s = self.fix_macrons $1 + macron_table[$2] + $3 + $4
|
86
|
+
end
|
87
|
+
|
88
|
+
if s=~ /n[td]/
|
89
|
+
# n[td]
|
90
|
+
mutaturum = s.split //
|
91
|
+
mutatum = []
|
92
|
+
mutaturum.each_with_index do |e, i|
|
93
|
+
if ( e == "n" and
|
94
|
+
mutaturum[i+1] =~ /[td]/ and
|
95
|
+
not macron_table[mutaturum[i-1]].nil? )
|
96
|
+
mutatum[i-1]=macron_table[mutaturum[i-1]]
|
97
|
+
end
|
98
|
+
mutatum << e
|
99
|
+
end
|
100
|
+
|
101
|
+
return mutatum.join ''
|
102
|
+
end
|
103
|
+
|
104
|
+
return s
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
module Linguistics
|
4
|
+
module Latin
|
5
|
+
module Verb
|
6
|
+
class LatinVerb
|
7
|
+
##
|
8
|
+
#
|
9
|
+
# === GRAMMATICAL FUNCTION
|
10
|
+
#
|
11
|
+
# The supine is:
|
12
|
+
#
|
13
|
+
# * 4th declension verbal noun
|
14
|
+
# * Formed on the same stem as the perfect passive participle
|
15
|
+
# * Only two forms in common use: accusative and ablative singular
|
16
|
+
#
|
17
|
+
# Ablative is used with the neuter of certain adjectives to indicate
|
18
|
+
# what respect a particular quality is applicable: <em>mirabile
|
19
|
+
# dictu</em>, <em>facile factu</em>. The accusative is used with
|
20
|
+
# verbs of motion to indicate purpose.
|
21
|
+
#
|
22
|
+
# -- Source <em>Wheelock</em>
|
23
|
+
#
|
24
|
+
# === ARGUMENTS
|
25
|
+
#
|
26
|
+
# None
|
27
|
+
#
|
28
|
+
# === RETURNS
|
29
|
+
#
|
30
|
+
# Hash with keys based on [:accusative] or [:ablative]
|
31
|
+
#
|
32
|
+
###
|
33
|
+
def supine
|
34
|
+
acc = @pass_perf_part
|
35
|
+
abl = acc.sub /^(.*)um$/, "\\1"
|
36
|
+
abl += "ū"
|
37
|
+
{:ablative => abl, :accusative => acc}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|