latinirb 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile.lock +47 -0
- data/README.markdown +66 -25
- data/Rakefile +8 -8
- data/bin/latinirb +2 -4
- data/latinirb.gemspec +3 -8
- data/lib/LatinIRB.rb +20 -15
- data/lib/latinirb/version.rb +1 -2
- data/lib/latirb.rb +5 -0
- metadata +64 -75
- data/latinverb.rb +0 -544
- data/lib/latinirb/paradigmatic_verbs.rb +0 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 33a4eb72ec314b4bf5d1675a36249098b3a94b8e
|
4
|
+
data.tar.gz: d9211cd70e5f8ed8d06700d3470d12f21db7d2d0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2a7a7c9863e7990fe8ba045022c475273930fa172bcec99c28d950eb5f5006f0fe742ef95630a30454ac8c004d92af070282d04b2f94ac27fdba97fdfc98337b
|
7
|
+
data.tar.gz: eeb287faed0fc71ebefb8a1058db91717e8d050676eee4b5319517233f330a89b1c3413dfb0c4263720504ca795e76071bea06e807a1dc9399102250aeaffb8e
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
latinirb (0.3.1)
|
5
|
+
activesupport (>= 4)
|
6
|
+
latinverb (~> 0.9.4)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (4.0.0)
|
12
|
+
i18n (~> 0.6, >= 0.6.4)
|
13
|
+
minitest (~> 4.2)
|
14
|
+
multi_json (~> 1.3)
|
15
|
+
thread_safe (~> 0.1)
|
16
|
+
tzinfo (~> 0.3.37)
|
17
|
+
atomic (1.1.14)
|
18
|
+
byebug (2.2.2)
|
19
|
+
columnize (~> 0.3.6)
|
20
|
+
debugger-linecache (~> 1.2.0)
|
21
|
+
columnize (0.3.6)
|
22
|
+
debugger-linecache (1.2.0)
|
23
|
+
i18n (0.6.5)
|
24
|
+
json (1.8.1)
|
25
|
+
latinverb (0.9.4)
|
26
|
+
activesupport
|
27
|
+
linguistics_latin
|
28
|
+
macronconversions
|
29
|
+
rake
|
30
|
+
rdoc
|
31
|
+
linguistics_latin (0.0.1)
|
32
|
+
macronconversions (0.0.1)
|
33
|
+
minitest (4.7.5)
|
34
|
+
multi_json (1.8.2)
|
35
|
+
rake (10.1.0)
|
36
|
+
rdoc (4.0.1)
|
37
|
+
json (~> 1.4)
|
38
|
+
thread_safe (0.1.3)
|
39
|
+
atomic
|
40
|
+
tzinfo (0.3.38)
|
41
|
+
|
42
|
+
PLATFORMS
|
43
|
+
ruby
|
44
|
+
|
45
|
+
DEPENDENCIES
|
46
|
+
byebug
|
47
|
+
latinirb!
|
data/README.markdown
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
|
5
5
|
LatinIRB is an IRB session in which a user can interact with paradigmatic
|
6
6
|
Latin verbs (`@aFirst`, `@aSecond`, `@aThird`, `@aThirdIO`, `@aFourth`) as
|
7
|
-
calculated heuristically by the
|
7
|
+
calculated heuristically by the
|
8
|
+
[LatinVerb](https://github.com/sgharms/LatinVerb) library.
|
8
9
|
|
9
10
|
The methods of chief interest will be those that are _vectors_ within the
|
10
11
|
LatinVerb parlance i.e. methods that uniquely identify a specific conjugated
|
@@ -14,9 +15,9 @@ An primary use case would be:
|
|
14
15
|
|
15
16
|
@aFirst.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number #=> amō
|
16
17
|
|
17
|
-
Upon opening the
|
18
|
+
Upon opening the session, the student may play with verbs offered for
|
18
19
|
exploration. These are the standard paradigmatics verbs presented in
|
19
|
-
Wheelock:
|
20
|
+
Wheelock as well as three core irregular verbs:
|
20
21
|
|
21
22
|
<table>
|
22
23
|
<tr><th>Varible </th> <th>Parts </th> <th> Meaning</th></tr>
|
@@ -25,6 +26,9 @@ Wheelock:
|
|
25
26
|
<tr><td>@aThird </td> <td>agō agere ēgī actum </td> <td> to do / lead / undertake</td></tr>
|
26
27
|
<tr><td>@aThirdIO</td> <td>capiō capere cēpī captum </td> <td> to grab / seize</td></tr>
|
27
28
|
<tr><td>@aFourth </td> <td>audiō audīre audīvī auditum</td> <td> to hear</td></tr>
|
29
|
+
<tr><td>@toBe </td> <td>sum esse fuī futūrus</td> <td> to be </td></tr>
|
30
|
+
<tr><td>@toCarry </td> <td>ferō ferre tulī lātum</td> <td> to carry </td></tr>
|
31
|
+
<tr><td>@toCome </td> <td>eō īre īvī itum</td> <td> to come </td></tr>
|
28
32
|
</table>
|
29
33
|
|
30
34
|
## INSTANTIATING
|
@@ -51,33 +55,30 @@ both understand it.
|
|
51
55
|
|
52
56
|
LatinVerb.new %w(amō amāre amāvī amatum)
|
53
57
|
|
54
|
-
## EXECUTING METHODS
|
55
|
-
|
56
|
-
Every verb in latin is a "vector" comprised of the voice / mood / tense /
|
57
|
-
number / and person
|
58
|
-
|
59
58
|
### CHART VIEW
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
To view the chart of a verb, use LatinVerb.chart\_display. This is a basic
|
60
|
+
To view the chart of a verb, use LatinVerb.chart. This is a basic
|
64
61
|
chart that will look familiar to students.
|
65
62
|
|
63
|
+
## EXECUTING METHODS
|
64
|
+
|
65
|
+
Every verb in latin is a "vector" comprised of the voice / mood / tense /
|
66
|
+
number / and person.
|
67
|
+
|
66
68
|
### SINGULAR VECTOR
|
67
69
|
|
68
|
-
As such methods are of the form
|
70
|
+
As such methods are of the form:
|
69
71
|
|
70
|
-
(active|passive)\_voice\_(indicative|subjunctive)\_mood\_(present|imperfect|perfect|pastperfect|futureperfect|etc.)tense\
|
72
|
+
(active|passive)\_voice\_(indicative|subjunctive)\_mood\_(present|imperfect|perfect|pastperfect|futureperfect|etc.)tense\_(first|second|third)\_person\_(singular|plural)\_number
|
71
73
|
|
72
|
-
This will return a single value. Where the result is ambiguous (e.g. 'number'
|
73
|
-
an exhaustive list of options
|
74
|
+
This will return a single value. Where the result is ambiguous (e.g. 'number'
|
75
|
+
is not provided) multiple values are returned. an exhaustive list of options
|
76
|
+
follows below.
|
74
77
|
|
75
78
|
### MULTIPLEX VECTORS
|
76
79
|
|
77
|
-
Several convenience methods exist which load multiple
|
78
|
-
|
79
|
-
is shared per attr\_reader
|
80
|
-
|
80
|
+
Several convenience methods exist which load multiple vectors at the same time
|
81
|
+
such as "present tense." For their invocation, see below
|
81
82
|
|
82
83
|
### Comprehensive List of Singular Vectors
|
83
84
|
|
@@ -222,19 +223,59 @@ is shared per attr\_reader
|
|
222
223
|
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_plural\_number
|
223
224
|
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_plural\_number
|
224
225
|
|
225
|
-
* LatinVerb.
|
226
|
-
* LatinVerb.
|
227
|
-
|
226
|
+
* LatinVerb.active\_voice\_imperative\_mood\_future\_tense
|
227
|
+
* LatinVerb.active\_voice\_imperative\_mood\_present\_tense
|
228
|
+
* LatinVerb.imperatives (_aggregator method_)
|
229
|
+
|
228
230
|
* LatinVerb.present\_active\_participle
|
229
231
|
* LatinVerb.future\_active\_participle
|
230
232
|
* LatinVerb.perfect\_passive\_participle
|
231
233
|
* LatinVerb.future\_passive\_participle
|
232
234
|
|
233
|
-
* LatinVerb.
|
234
|
-
* LatinVerb.perfect\_active\_infinitive
|
235
|
+
* LatinVerb.infinitives (_aggregator method_ : returns a keyed hash)
|
235
236
|
* LatinVerb.future\_active\_infinitive
|
237
|
+
* LatinVerb.future\_passive\_infinitive
|
238
|
+
* LatinVerb.perfect\_active\_infinitive
|
239
|
+
* LatinVerb.perfect\_passive\_infinitive
|
240
|
+
* LatinVerb.present\_active\_infinitive
|
236
241
|
* LatinVerb.present\_passive\_infinitive
|
237
|
-
|
242
|
+
|
243
|
+
### Ambiguous Methods
|
244
|
+
A voice, mood, and tense are all required for resolution of answers.
|
245
|
+
LatinVerb does not repsect ambiguity in those vectors. It _does_ respect
|
246
|
+
ambiguity in the person and number specifiers. Thus, you *may* say:
|
247
|
+
|
248
|
+
|
249
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_first\_person
|
250
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_singular\_number
|
251
|
+
|
252
|
+
This will return an array containing all possible candidates. Thus, for
|
253
|
+
each of the items below <em>(first|second|third)_person</em> or
|
254
|
+
<em>(singular|plural)_number</em> may be postpended.
|
255
|
+
|
256
|
+
* LatinVerb.active\_voice\_imperative\_mood\_future\_tense
|
257
|
+
* LatinVerb.active\_voice\_imperative\_mood\_present\_tense
|
258
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense
|
259
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense
|
260
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense
|
261
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense
|
262
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense
|
263
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense
|
264
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense
|
265
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense
|
266
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense
|
267
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense
|
268
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense
|
269
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense
|
270
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense
|
271
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense
|
272
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense
|
273
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense
|
274
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense
|
275
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense
|
276
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense
|
277
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense
|
278
|
+
|
238
279
|
|
239
280
|
## AUTHOR
|
240
281
|
|
data/Rakefile
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'bundler'
|
2
|
-
require "
|
2
|
+
require "rdoc/task"
|
3
|
+
require "rake/testtask"
|
3
4
|
|
4
5
|
Bundler::GemHelper.install_tasks
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
rd
|
9
|
-
rd.rdoc_dir = "rdoc"
|
10
|
-
|
7
|
+
task :default => :test
|
8
|
+
|
9
|
+
RDoc::Task.new do |rd|
|
10
|
+
rd.rdoc_dir = "rdoc"
|
11
|
+
rd.rdoc_files.include("lib/**/*.rb")
|
12
|
+
end
|
11
13
|
|
12
|
-
#Added to get testing working
|
13
|
-
require 'rake/testtask'
|
14
14
|
Rake::TestTask.new(:test)
|
data/bin/latinirb
CHANGED
data/latinirb.gemspec
CHANGED
@@ -12,18 +12,13 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{Gem designed to explore verbs created by LatinVerb}
|
13
13
|
s.description = %q{This gem takes initial data describing a LatinVerb and allows this is be instantiated into an IRB session. Here the verb can be queried or displayed.}
|
14
14
|
|
15
|
-
|
16
|
-
s.rubyforge_project = "latinverb"
|
17
|
-
|
18
15
|
s.files = `git ls-files`.split("\n")
|
19
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
18
|
s.require_paths = ["lib"]
|
22
19
|
|
23
|
-
s.
|
24
|
-
s.add_runtime_dependency 'macronconversions'
|
25
|
-
s.add_runtime_dependency 'verbvector'
|
26
|
-
s.add_runtime_dependency 'active_support', '>= 3.0'
|
27
|
-
|
20
|
+
s.add_development_dependency 'byebug'
|
28
21
|
|
22
|
+
s.add_runtime_dependency 'latinverb', '~> 0.9.5'
|
23
|
+
s.add_runtime_dependency 'activesupport', '>= 4'
|
29
24
|
end
|
data/lib/LatinIRB.rb
CHANGED
@@ -3,9 +3,6 @@
|
|
3
3
|
require 'irb'
|
4
4
|
require 'irb/completion'
|
5
5
|
require 'latinverb'
|
6
|
-
require 'latinirb/paradigmatic_verbs'
|
7
|
-
require 'macronconversions'
|
8
|
-
require 'pp'
|
9
6
|
|
10
7
|
# Monkey-patch to change the gets behavior. In the gem, the FileInputMethod
|
11
8
|
# class's 'gets' method always prints out what was read. This should be
|
@@ -37,7 +34,7 @@ module Linguistics
|
|
37
34
|
# object's options and proceed.
|
38
35
|
#
|
39
36
|
#+++
|
40
|
-
|
37
|
+
|
41
38
|
IRB.setup(nil)
|
42
39
|
@CONF = IRB.conf
|
43
40
|
|
@@ -58,14 +55,14 @@ module Linguistics
|
|
58
55
|
# Create an irb object that is programmed to (silently, per above)
|
59
56
|
# source a configuration file that ends with a call to 'irb' itself
|
60
57
|
# after defining several instance variables
|
61
|
-
|
58
|
+
|
62
59
|
irb = IRB::Irb.new(nil, @CONF[:SCRIPT])
|
63
60
|
|
64
61
|
# Create a LatinIRB prompt
|
65
62
|
@CONF[:PROMPT][:LATINIRB] = {
|
66
|
-
:PROMPT_I => "LatinIRB > ",
|
63
|
+
:PROMPT_I => "LatinIRB > ",
|
67
64
|
:PROMPT_S => "LatinIRB%l> ",
|
68
|
-
:PROMPT_C => "LatinIRB > ",
|
65
|
+
:PROMPT_C => "LatinIRB > ",
|
69
66
|
:PROMPT_N => "LatinIRB ?> ",
|
70
67
|
:RETURN => " => %s \n",
|
71
68
|
:AUTO_INDENT => true
|
@@ -82,16 +79,23 @@ module Linguistics
|
|
82
79
|
# LatinVerb, the full complement of vectors should be provided as
|
83
80
|
# complet-able. IF NOT, then the pairing is passed to the standard
|
84
81
|
# CompletionProc.
|
85
|
-
|
82
|
+
|
86
83
|
Readline.completion_proc = calculate_completion_proc
|
87
84
|
|
88
85
|
# We have finished the configuration at this point, so now we need
|
89
86
|
# to kick up the REPL after providing preliminary instruction.
|
90
87
|
puts "Beginning a LatinVerb session."
|
91
88
|
|
92
|
-
puts "The following verbs have been made available to this session
|
89
|
+
puts "The following verbs have been made available to this session:"
|
90
|
+
|
91
|
+
# Open the file and extract the names of the variables that can be
|
92
|
+
# used for autocompletion
|
93
|
+
@irb_ivars =
|
94
|
+
File::open(irb.context.io.file_name).readlines.grep(/^@/).map do |x|
|
95
|
+
x.sub(/(@\w+)\s.*\n/, "\\1")
|
96
|
+
end
|
97
|
+
@irb_ivars.each{|x| puts " * #{x}\n"}
|
93
98
|
|
94
|
-
instance_variables.grep(/[a-z]/).each{|x| puts " * #{x}"}
|
95
99
|
|
96
100
|
puts "Tab-completion of the conjugation \"vectors\" is supported."
|
97
101
|
|
@@ -119,7 +123,7 @@ module Linguistics
|
|
119
123
|
# based on the regex of "message."
|
120
124
|
#
|
121
125
|
##
|
122
|
-
|
126
|
+
|
123
127
|
def self.select_message(receiver, message, candidates)
|
124
128
|
candidates.grep(/^#{message}/).collect do |e|
|
125
129
|
case e
|
@@ -144,14 +148,16 @@ module Linguistics
|
|
144
148
|
##
|
145
149
|
|
146
150
|
def self.calculate_completion_proc
|
147
|
-
proc do |input|
|
151
|
+
proc do |input|
|
148
152
|
bind = IRB.conf[:MAIN_CONTEXT].workspace.binding
|
149
153
|
|
150
154
|
input =~ /^([^."].*)\.([^.]*)$/
|
151
155
|
begin
|
152
156
|
receiver = $1
|
153
157
|
message = Regexp.quote($2)
|
154
|
-
|
158
|
+
|
159
|
+
# Pull the object from the binding
|
160
|
+
rObj = eval("instance_variable_get(:#{receiver})", bind)
|
155
161
|
rescue Exception
|
156
162
|
end
|
157
163
|
|
@@ -159,13 +165,12 @@ module Linguistics
|
|
159
165
|
IRB::InputCompletor::select_message(receiver, message, rObj.instance_methods.grep(/^#{message}/))
|
160
166
|
elsif input =~ /^@/
|
161
167
|
# This handles instance variables. input is @someInstanceVariable's @aSomeIn<TAB>
|
162
|
-
self.select_message
|
168
|
+
self.select_message input, input, eval("instance_variables", bind).grep(/@[at]/)
|
163
169
|
else
|
164
170
|
IRB::InputCompletor::CompletionProc.call input
|
165
171
|
end
|
166
172
|
end
|
167
173
|
end
|
168
|
-
|
169
174
|
end
|
170
175
|
end
|
171
176
|
end
|
data/lib/latinirb/version.rb
CHANGED
data/lib/latirb.rb
CHANGED
@@ -6,6 +6,11 @@
|
|
6
6
|
@aThirdIO = Linguistics::Latin::Verb::LatinVerb.new %q(capiō capere cēpī captum)
|
7
7
|
@aFourth = Linguistics::Latin::Verb::LatinVerb.new %q(audiō audīre audīvī auditum)
|
8
8
|
|
9
|
+
# Popular Irregulars
|
10
|
+
@toBe = Linguistics::Latin::Verb::LatinVerb.new %q(sum esse fuī futūrus)
|
11
|
+
@toCarry = Linguistics::Latin::Verb::LatinVerb.new %q(ferō ferre tulī lātum)
|
12
|
+
@toCome = Linguistics::Latin::Verb::LatinVerb.new %q(eō īre ivī itum)
|
13
|
+
|
9
14
|
# It's handy to have these two methods defined here for simple tests of the
|
10
15
|
# code and demonstrations.
|
11
16
|
|
metadata
CHANGED
@@ -1,108 +1,97 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: latinirb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.3.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.3
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Steven G. Harms
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.0
|
24
|
-
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: macronconversions
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
28
21
|
prerelease: false
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: latinverb
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.5
|
35
34
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: verbvector
|
39
35
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4'
|
46
48
|
type: :runtime
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: active_support
|
50
49
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
description: This gem takes initial data describing a LatinVerb and allows this is be instantiated into an IRB session. Here the verb can be queried or displayed.
|
60
|
-
email:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4'
|
55
|
+
description: This gem takes initial data describing a LatinVerb and allows this is
|
56
|
+
be instantiated into an IRB session. Here the verb can be queried or displayed.
|
57
|
+
email:
|
61
58
|
- steven.harms@gmail.com
|
62
|
-
executables:
|
59
|
+
executables:
|
63
60
|
- latinirb
|
64
61
|
extensions: []
|
65
|
-
|
66
62
|
extra_rdoc_files: []
|
67
|
-
|
68
|
-
files:
|
63
|
+
files:
|
69
64
|
- .gitignore
|
70
65
|
- Gemfile
|
66
|
+
- Gemfile.lock
|
71
67
|
- README.markdown
|
72
68
|
- Rakefile
|
73
69
|
- bin/latinirb
|
74
70
|
- latinirb.gemspec
|
75
|
-
- latinverb.rb
|
76
71
|
- lib/LatinIRB.rb
|
77
|
-
- lib/latinirb/paradigmatic_verbs.rb
|
78
72
|
- lib/latinirb/version.rb
|
79
73
|
- lib/latirb.rb
|
80
74
|
homepage: http://rubygems.org/gems/latinverb
|
81
75
|
licenses: []
|
82
|
-
|
76
|
+
metadata: {}
|
83
77
|
post_install_message:
|
84
78
|
rdoc_options: []
|
85
|
-
|
86
|
-
require_paths:
|
79
|
+
require_paths:
|
87
80
|
- lib
|
88
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: "0"
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
100
91
|
requirements: []
|
101
|
-
|
102
|
-
|
103
|
-
rubygems_version: 1.8.5
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 2.0.2
|
104
94
|
signing_key:
|
105
|
-
specification_version:
|
95
|
+
specification_version: 4
|
106
96
|
summary: Gem designed to explore verbs created by LatinVerb
|
107
97
|
test_files: []
|
108
|
-
|
data/latinverb.rb
DELETED
@@ -1,544 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Latin
|
4
|
-
|
5
|
-
=begin rdoc
|
6
|
-
|
7
|
-
== Description
|
8
|
-
|
9
|
-
LatinVerb is a class for turning a given 4-part string of:
|
10
|
-
|
11
|
-
* active voice, present, first person singular: amō, or amo
|
12
|
-
* present, active infinitive: amāre, or amare
|
13
|
-
* present, perfect, first person singular: amāvī, or amavi
|
14
|
-
* perfect passive participle: amatum, or amatus
|
15
|
-
|
16
|
-
Into a fully-exploded, fully conjugated Latin verb ( like you would see in
|
17
|
-
chart forms on Wikipedia et in locis alteriis.
|
18
|
-
|
19
|
-
These are traditionally given in Wheelock as:
|
20
|
-
<tt>amō, amāre, amāvī, amatum</tt>
|
21
|
-
|
22
|
-
Philosophically, in this class, we keep attributes and methods which are
|
23
|
-
used to define the meta-structure of the verb. The specific verb calls
|
24
|
-
("Give me the present active participles" or "Give me the present tense
|
25
|
-
active indicative class") are handled metaprogrammatically and held
|
26
|
-
in Latin::LatinConjugation.
|
27
|
-
|
28
|
-
=end
|
29
|
-
|
30
|
-
|
31
|
-
class LatinVerb < Latin::LatinWord
|
32
|
-
include Latin::Conjugation
|
33
|
-
include Latin::Display
|
34
|
-
=begin
|
35
|
-
|
36
|
-
Scalar, created during initialization
|
37
|
-
These are iVar's pointing to the “four principal parts” of a Latin
|
38
|
-
verb.
|
39
|
-
|
40
|
-
=end
|
41
|
-
|
42
|
-
attr_reader :first_pers_singular, :pres_act_inf,
|
43
|
-
:first_pers_perf, :pass_perf_part, :conjugation
|
44
|
-
|
45
|
-
=begin
|
46
|
-
|
47
|
-
Conjugation state, set by metapgrogrammatically handling the method
|
48
|
-
call. Latin verbs have voice, mood, tense, number, and person. The
|
49
|
-
:voice, :mood, etc. iVars will trap this. The default mode
|
50
|
-
use case is to return all number / person “nodes” in a given
|
51
|
-
tense. As such, the number and person are not stored here as iVars.
|
52
|
-
|
53
|
-
=end
|
54
|
-
|
55
|
-
attr_reader :voice, :mood, :tense, :number, :person
|
56
|
-
|
57
|
-
=begin
|
58
|
-
|
59
|
-
Here are iVars that are used in calculation of nodes.
|
60
|
-
|
61
|
-
Stem is a place to store the verb stem e.g. amare=>ama, dicere => dic
|
62
|
-
Vector is the original method that's passed. As mentioned above, we
|
63
|
-
take a metaprogrammatic approach to handling method calls to the
|
64
|
-
object. @vector records the method call that is trapped by
|
65
|
-
method_missing?(id,*opts)
|
66
|
-
|
67
|
-
Participal stem is used as the base for forming participles.
|
68
|
-
|
69
|
-
Response is stored. It is a hash
|
70
|
-
with only one pair: the name of the collection accessed, and the block
|
71
|
-
of nodes ( or a single node, if it has been defined in such an
|
72
|
-
explicit fashion )
|
73
|
-
|
74
|
-
Collections is is where the displayable payload is stored.
|
75
|
-
|
76
|
-
=end
|
77
|
-
|
78
|
-
attr_reader :stem, :participial_stem, :vector, :response,
|
79
|
-
:collections
|
80
|
-
|
81
|
-
=begin
|
82
|
-
|
83
|
-
Array
|
84
|
-
|
85
|
-
Four_pp is an aray of the four principal parts ( headers on listings)
|
86
|
-
|
87
|
-
=end
|
88
|
-
|
89
|
-
attr_reader :four_pp
|
90
|
-
|
91
|
-
=begin
|
92
|
-
|
93
|
-
##############################################################################
|
94
|
-
METHOD DECLARATION
|
95
|
-
##############################################################################
|
96
|
-
|
97
|
-
=end
|
98
|
-
|
99
|
-
=begin rdoc
|
100
|
-
|
101
|
-
<b>Arguments</b>: Array containing 4 principal parts
|
102
|
-
|
103
|
-
<b>Attribs Used</b>: N/A
|
104
|
-
|
105
|
-
<b>Attribs Set</b>: @four_pp, @first_pers_singular, @pres_act_inf,
|
106
|
-
@first_pers_perf, @pass_perf_part, @four_pp,
|
107
|
-
@voice_mood_matrix, @stem ( via #calculate_stem)
|
108
|
-
|
109
|
-
*Returns*: Instance of LatinVerb
|
110
|
-
|
111
|
-
*Purpose*: A LatinVerb is created by passing an array of the four principal
|
112
|
-
parts that define a Latin Verb. Typically these are: They are defined in an array:
|
113
|
-
<tt>amō amāre amāvī amatum</tt>.
|
114
|
-
|
115
|
-
=end
|
116
|
-
|
117
|
-
def initialize(*params)
|
118
|
-
|
119
|
-
# Creates an array of LatinWords for each of the passed-in parameters
|
120
|
-
# Each principal part is given its own iVar
|
121
|
-
|
122
|
-
@four_pp = params[0].map { |a_principal_part| Latin::LatinWord.new(a_principal_part) }
|
123
|
-
|
124
|
-
if @four_pp.length != 4
|
125
|
-
deponent_handler if @four_pp[2] =~ /sum$/
|
126
|
-
end
|
127
|
-
|
128
|
-
irregular_handler(@four_pp[1])
|
129
|
-
|
130
|
-
|
131
|
-
@first_pers_singular, @pres_act_inf,
|
132
|
-
@first_pers_perf, @pass_perf_part = @four_pp
|
133
|
-
|
134
|
-
# Create a top-level matrix that defines active_indicative /
|
135
|
-
# passive_indicative, etc.
|
136
|
-
#
|
137
|
-
# ____________
|
138
|
-
# | | X | Y |
|
139
|
-
# | 1 | a | b |
|
140
|
-
# | 2 | c | d |
|
141
|
-
# -------------
|
142
|
-
#
|
143
|
-
# In this case we have “voice by mood”
|
144
|
-
|
145
|
-
@voice_mood_matrix = TenseBlock.new( {
|
146
|
-
:boundaries => 'voice by mood',
|
147
|
-
:voice => %w(Active Passive),
|
148
|
-
:mood => %w(Indicative Subjunctive),
|
149
|
-
:tense => nil,
|
150
|
-
:default_p => lambda {
|
151
|
-
|x,y| "#{x.downcase}_voice_#{y.downcase}_mood"
|
152
|
-
}
|
153
|
-
}
|
154
|
-
)
|
155
|
-
|
156
|
-
# Given the 4 PP's, we can now derive the stem
|
157
|
-
@stem = Latin::LatinWord.new(calculate_stem)
|
158
|
-
|
159
|
-
# Set my conjugation
|
160
|
-
@conjugation = evaluate_conjugation
|
161
|
-
|
162
|
-
# Calculate participal stem
|
163
|
-
@participial_stem = Latin::LatinWord.new(calculate_participial_stem)
|
164
|
-
|
165
|
-
# Where to store things to-be displayed
|
166
|
-
@collections = []
|
167
|
-
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
=begin rdoc
|
172
|
-
|
173
|
-
*Arguments*: Unrecognized method call, optional arguments
|
174
|
-
|
175
|
-
<b>Attribs Used</b>: N/A
|
176
|
-
|
177
|
-
<b>Attribs Set</b>: @vector
|
178
|
-
|
179
|
-
*Returns*: Instance of LatinVerb
|
180
|
-
|
181
|
-
*Purpose*: The method calls to a verb object can vary in over 100 ways, as such, coding that many methods seemed painful. Accordingly, we trap the unknown method call, parse it, and set iVars.
|
182
|
-
|
183
|
-
Having identified the iVars, we are able to call a hash structure
|
184
|
-
containing lambdas to do the appropriate processing based on the “vector”
|
185
|
-
of voice, mood, tense, person, etc.
|
186
|
-
|
187
|
-
=end
|
188
|
-
def method_missing(id, *args)
|
189
|
-
# We expect that method calls will be made to the object in the form:
|
190
|
-
# V.active_voice_indicative_mood_present_tense. Instead of having to
|
191
|
-
# create all these methods, we will look for unknown methods containing
|
192
|
-
# the pattern _voice_
|
193
|
-
|
194
|
-
if id.to_s =~ /_voice_/
|
195
|
-
|
196
|
-
@vector = id.to_s
|
197
|
-
|
198
|
-
# This assignation needs to be done each call to the metaprog.
|
199
|
-
# method because of the event that a verb was called for
|
200
|
-
# a tense vector, and then a node vector. The first instance's
|
201
|
-
# filling in of @number, @person will cause the second call to do
|
202
|
-
# the wrong thing
|
203
|
-
|
204
|
-
@number = @person = nil
|
205
|
-
evaluate_method(id)
|
206
|
-
|
207
|
-
# In the case that the instance has been used before to get
|
208
|
-
# a specific vector, then we want to clear it out
|
209
|
-
@collections=[] if not @person.nil? and not @collections.nil?
|
210
|
-
|
211
|
-
generated_method = [@voice,@mood,@tense].join('_').to_sym
|
212
|
-
|
213
|
-
raise("Method #{generated_method.to_} is not responded to!") unless
|
214
|
-
self.respond_to?(generated_method)
|
215
|
-
|
216
|
-
raise ("FLAMING DETH: pass to handler method returned nothing!") if
|
217
|
-
self.send(generated_method.to_sym).nil?
|
218
|
-
|
219
|
-
|
220
|
-
@collections <<
|
221
|
-
conjoin_nodes_with_labels(
|
222
|
-
self.send(generated_method),
|
223
|
-
TenseBlock.new( {
|
224
|
-
:boundaries => 'numbers by persons',
|
225
|
-
:numbers => %w(Singular Plural),
|
226
|
-
:persons => %w(First Second Third),
|
227
|
-
:tense => 'present',
|
228
|
-
}
|
229
|
-
)
|
230
|
-
)
|
231
|
-
else
|
232
|
-
super(id)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
def to_s
|
237
|
-
display!("\n")
|
238
|
-
end
|
239
|
-
|
240
|
-
def definition_string
|
241
|
-
return @four_pp.join(', ').to_s
|
242
|
-
end
|
243
|
-
=begin
|
244
|
-
|
245
|
-
##############################################################################
|
246
|
-
# PRIVATE METHODS BELOW
|
247
|
-
##############################################################################
|
248
|
-
|
249
|
-
=end
|
250
|
-
private
|
251
|
-
|
252
|
-
=begin rdoc
|
253
|
-
|
254
|
-
*Arguments*: None
|
255
|
-
|
256
|
-
*Attribs Used*: @pres_act_inf
|
257
|
-
|
258
|
-
*Attribs Set*: None
|
259
|
-
|
260
|
-
*Returns*: The “stem” of a Latin Verb
|
261
|
-
|
262
|
-
*Purpose*: Based on the present active infinitive, identify the “stem” and set the @stem iVar.
|
263
|
-
The method also returns the stem value.
|
264
|
-
|
265
|
-
=end
|
266
|
-
|
267
|
-
def calculate_stem
|
268
|
-
# For efficiency, if the iVar @stem is defined, don't go through this structure
|
269
|
-
|
270
|
-
pres_act_inf = @pres_act_inf.to_s
|
271
|
-
|
272
|
-
if pres_act_inf =~ /āre$/
|
273
|
-
return pres_act_inf.gsub(/(.*)āre$/,'\\1ā')
|
274
|
-
end
|
275
|
-
if pres_act_inf =~ /ēre$/
|
276
|
-
return pres_act_inf.gsub(/(.*)ēre$/,'\\1ē')
|
277
|
-
end
|
278
|
-
if pres_act_inf =~ /ere$/
|
279
|
-
if @first_pers_singular =~ /io$/
|
280
|
-
return pres_act_inf.gsub(/(.*)ere$/,'\\1')
|
281
|
-
else
|
282
|
-
return pres_act_inf.gsub(/(.*)ere$/,'\\1')
|
283
|
-
end
|
284
|
-
end
|
285
|
-
if pres_act_inf =~ /īre$/
|
286
|
-
return pres_act_inf.gsub(/(.*)īre$/,'\\1')
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
=begin rdoc
|
291
|
-
|
292
|
-
|
293
|
-
*Arguments*: None
|
294
|
-
|
295
|
-
*Attribs Used*: @pres_act_inf
|
296
|
-
|
297
|
-
*Attribs Set*: @conjugation
|
298
|
-
|
299
|
-
*Returns*: The “stem” of a Latin Verb
|
300
|
-
|
301
|
-
*Purpose*: Based on the present, active infinitive, decide on the conjugation. This method requires that the endings be macron-ized in order to differentiate between _ere_ ( 2nd conjugation ) and _ere_ ( 4th conjugation). It returns the value as a String: <tt>1</tt>, <tt>2</tt>, <tt>3</tt>, <tt>4</tt>, or <tt>3IO</tt> (e.g. <i>duco/ducere</i>)
|
302
|
-
|
303
|
-
=end
|
304
|
-
|
305
|
-
def evaluate_conjugation
|
306
|
-
ending = @pres_act_inf.get_last_three_characters
|
307
|
-
returnValue = nil
|
308
|
-
|
309
|
-
if ending =~ /āre$/
|
310
|
-
returnValue = "1"
|
311
|
-
end
|
312
|
-
|
313
|
-
if ending =~ /ēre$/
|
314
|
-
returnValue = "2"
|
315
|
-
end
|
316
|
-
|
317
|
-
if ending =~ /ere$/
|
318
|
-
if @first_pers_singular.get_last_three_characters =~ /iō$/
|
319
|
-
returnValue = "3IO"
|
320
|
-
else
|
321
|
-
returnValue = "3"
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
if ending =~ /īre$/
|
326
|
-
returnValue = "4"
|
327
|
-
end
|
328
|
-
|
329
|
-
return returnValue
|
330
|
-
end
|
331
|
-
|
332
|
-
=begin rdoc
|
333
|
-
|
334
|
-
Calculate the participial stem, used in forming participles.
|
335
|
-
|
336
|
-
=end
|
337
|
-
|
338
|
-
def calculate_participial_stem
|
339
|
-
raise("@pres_act_inf was nil!") if
|
340
|
-
@pres_act_inf.nil? or @first_pers_singular.nil?
|
341
|
-
|
342
|
-
if @pres_act_inf.to_s =~ /(.*ā)re$/
|
343
|
-
return $1
|
344
|
-
end
|
345
|
-
|
346
|
-
if @pres_act_inf.to_s =~ /(.*ē)re$/
|
347
|
-
return $1
|
348
|
-
end
|
349
|
-
|
350
|
-
if @pres_act_inf.to_s =~ /(.*)ere$/
|
351
|
-
match=$1
|
352
|
-
if @first_pers_singular =~ /iō/
|
353
|
-
return match + "iē"
|
354
|
-
else
|
355
|
-
return match + "e"
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
if @pres_act_inf.to_s =~ /(.*)īre$/
|
360
|
-
return $1 + "iē"
|
361
|
-
end
|
362
|
-
end
|
363
|
-
|
364
|
-
|
365
|
-
=begin
|
366
|
-
|
367
|
-
This is used to print out a full vector's nodes. The value
|
368
|
-
of @vector is used as a title. The nodes that were produced
|
369
|
-
by means of the lambda are then printed out.
|
370
|
-
|
371
|
-
=end
|
372
|
-
|
373
|
-
def conjoin_nodes_with_labels(nodes,labels)
|
374
|
-
raise "conjoin_nodes failed to receieve a node or label set" if
|
375
|
-
nodes.nil? or labels.nil?
|
376
|
-
paired_node_array=[]
|
377
|
-
|
378
|
-
0.upto(labels.length-1) do |i|
|
379
|
-
paired_node_array.push(Latin::LatinNode.new(labels.matrix[i],
|
380
|
-
nodes[i], {:displayable => 'valuesonly'}) )
|
381
|
-
end
|
382
|
-
|
383
|
-
tense_label = @vector.capitalize!.split(/_/).join(' ')
|
384
|
-
|
385
|
-
full_tense = Latin::LatinTense.new(tense_label, paired_node_array)
|
386
|
-
|
387
|
-
if @person.nil? and @number.nil? # For handling ...present_tense
|
388
|
-
return full_tense
|
389
|
-
elsif @number.nil? and not @person.nil? # number not defined; person yes
|
390
|
-
|
391
|
-
# Find the methods that match the parameter that we were given
|
392
|
-
matching_methods =
|
393
|
-
full_tense.verb_methods.map {|x| x if x =~ /#{@person}/}.compact!
|
394
|
-
|
395
|
-
# Call those methods and store the result to an array
|
396
|
-
ambiguous_results =
|
397
|
-
matching_methods.map{|aMethod| full_tense.send(aMethod.to_sym)}
|
398
|
-
|
399
|
-
# Return it
|
400
|
-
return ambiguous_results.join(", ")
|
401
|
-
elsif not @number.nil? and @person.nil?
|
402
|
-
# This guy is really just the inverse of the above.
|
403
|
-
|
404
|
-
# Find the methods that match the parameter that we were given
|
405
|
-
matching_methods =
|
406
|
-
full_tense.verb_methods.map {|x| x if x =~ /#{@number}/}.compact!
|
407
|
-
|
408
|
-
# Call those methods and store the result to an array
|
409
|
-
ambiguous_results =
|
410
|
-
matching_methods.map{|aMethod| full_tense.send(aMethod.to_sym)}
|
411
|
-
|
412
|
-
# Return it
|
413
|
-
return ambiguous_results.join(", ")
|
414
|
-
|
415
|
-
elsif not @number.nil? and not @person.nil? # fully specified node
|
416
|
-
locate_string = [@number,'number',@person,'person',].join('_')
|
417
|
-
return full_tense.send(locate_string.to_sym)
|
418
|
-
end
|
419
|
-
|
420
|
-
end
|
421
|
-
|
422
|
-
# This method is used internally to evaluate a method call that looks like
|
423
|
-
# a request for a conjugation. The first descriptor pair is chopped off
|
424
|
-
# from the given 'name' and the rest is held. The given is sent through
|
425
|
-
# is recognized? where, if valid, an iVar is set.
|
426
|
-
#
|
427
|
-
# e.g. active_voice performs @voice=active
|
428
|
-
#
|
429
|
-
# Failure to successfully classify raises an exception
|
430
|
-
#
|
431
|
-
# If there is anything left in 'rest', then the function is recursively
|
432
|
-
# called with 'rest'.
|
433
|
-
#
|
434
|
-
|
435
|
-
def evaluate_method(name)
|
436
|
-
command = name.to_s.match(/(\w+?_){2}/).to_s
|
437
|
-
rest = name.to_s[command.to_s.length..name.to_s.length]
|
438
|
-
|
439
|
-
# If you're at the last term, command does not get loaded
|
440
|
-
# but rest stays the same.
|
441
|
-
if command !~ /\w/ and name == rest
|
442
|
-
command = rest
|
443
|
-
rest = nil
|
444
|
-
end
|
445
|
-
|
446
|
-
# We've reached the end
|
447
|
-
return if command !~ /\w/ and rest !~ /\w/
|
448
|
-
|
449
|
-
# Recurse
|
450
|
-
evaluate_method(rest) if is_recognized?(command)
|
451
|
-
|
452
|
-
end
|
453
|
-
|
454
|
-
# Given a string of the form "active_voice" ( or a "value/term" pair )
|
455
|
-
# test its validity by Object.send(term.to_sym, value).
|
456
|
-
|
457
|
-
def is_recognized?(datum)
|
458
|
-
value, term = datum.split(/_/)
|
459
|
-
term = "calculate_" + term
|
460
|
-
send(term.to_sym, value)
|
461
|
-
|
462
|
-
# Return true, because the 'send' call did not throw an exception
|
463
|
-
return true
|
464
|
-
end
|
465
|
-
|
466
|
-
# Used to set the voice iVar OR raise an exception
|
467
|
-
def calculate_voice(param)
|
468
|
-
if param =~ /^(active|passive)$/i
|
469
|
-
@voice = param
|
470
|
-
return
|
471
|
-
end
|
472
|
-
raise "Unknown voice: #{param.to_s}, called."
|
473
|
-
end
|
474
|
-
|
475
|
-
# Used to set the voice iVar OR raise an exception
|
476
|
-
def calculate_mood(param)
|
477
|
-
param.gsub!(/\W/, '')
|
478
|
-
if param =~ /(indicative|subjunctive)/i
|
479
|
-
@mood = param.downcase
|
480
|
-
return
|
481
|
-
end
|
482
|
-
raise "Unknown mood: #{param.to_s}, called"
|
483
|
-
end
|
484
|
-
|
485
|
-
# Used to set the voice iVar OR raise an exception
|
486
|
-
def calculate_tense(param)
|
487
|
-
param.downcase!
|
488
|
-
if @mood == "indicative"
|
489
|
-
# All the legitimate moods in the indicative
|
490
|
-
if param == "present" or
|
491
|
-
param == "imperfect" or
|
492
|
-
param == "future" or
|
493
|
-
param == "perfect" or
|
494
|
-
param == "pluperfect" or
|
495
|
-
param == "pastperfect" or
|
496
|
-
param == "futureperfect"
|
497
|
-
@tense = param
|
498
|
-
end
|
499
|
-
elsif @mood == "subjunctive"
|
500
|
-
# All the legitimate moods in the subjunctive
|
501
|
-
if param == "present" or
|
502
|
-
param == "imperfect" or
|
503
|
-
param == "perfect" or
|
504
|
-
param == "pluperfect" or
|
505
|
-
param == "pastperfect"
|
506
|
-
@tense = param
|
507
|
-
end
|
508
|
-
else
|
509
|
-
raise "Tense [#{param}] was found to be invalid."
|
510
|
-
end
|
511
|
-
end
|
512
|
-
|
513
|
-
def calculate_person(param)
|
514
|
-
@person = param.downcase
|
515
|
-
end
|
516
|
-
|
517
|
-
def calculate_number(param)
|
518
|
-
@number = param.downcase
|
519
|
-
end
|
520
|
-
|
521
|
-
def deponent_handler
|
522
|
-
raise "Sorry, we do not handle (semi-) deponent verbs at this time. It's on the TODO list, thought!"
|
523
|
-
end
|
524
|
-
|
525
|
-
def irregular_handler(test_infinitive)
|
526
|
-
if %w(esse nōlle).find{|irregular| test_infinitive.to_s == irregular}
|
527
|
-
raise "Sorry, we do not handle irregular verbs at this time. It's on the TODO list, thought!"
|
528
|
-
end
|
529
|
-
end
|
530
|
-
end # ends the class
|
531
|
-
|
532
|
-
=begin rdoc
|
533
|
-
|
534
|
-
== Dependencies
|
535
|
-
|
536
|
-
None
|
537
|
-
|
538
|
-
== Author
|
539
|
-
|
540
|
-
Steven G. Harms, http://www.stevengharms.com
|
541
|
-
|
542
|
-
=end
|
543
|
-
end
|
544
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'macronconversions'
|
4
|
-
|
5
|
-
module Linguistics
|
6
|
-
module Latin
|
7
|
-
module Util
|
8
|
-
class LatinIRB
|
9
|
-
@aFirst = Linguistics::Latin::Verb::LatinVerb.new Text::Latex::Util::Macronconversions.convert('am\={o} am\={a}re am\={a}v\={\i} amatum', 'mc')
|
10
|
-
@aSecond = Linguistics::Latin::Verb::LatinVerb.new %q(moneō monēre monvī monitum)
|
11
|
-
@aThird = Linguistics::Latin::Verb::LatinVerb.new %q(agō agere ēgī actum)
|
12
|
-
@aThirdIO = Linguistics::Latin::Verb::LatinVerb.new %q(capiō capere cēpī captum)
|
13
|
-
@aFourth = Linguistics::Latin::Verb::LatinVerb.new %q(audiō audīre audīvī auditum)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|