latinirb 0.0.2 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +170 -181
- data/bin/latinirb +1 -1
- data/latinirb.gemspec +6 -1
- data/latinverb.rb +544 -0
- data/lib/LatinIRB.rb +1 -1
- data/lib/latinirb/paradigmatic_verbs.rb +1 -1
- data/lib/latinirb/version.rb +1 -1
- metadata +69 -34
data/README.markdown
CHANGED
@@ -12,11 +12,7 @@ form of a verb.
|
|
12
12
|
|
13
13
|
An primary use case would be:
|
14
14
|
|
15
|
-
|
16
|
-
p @aFirst.active_voice_indicative_mood_present_tense_first_person_singular_number #=> amō
|
17
|
-
p @aFirst.chart #=> ( a chart )
|
18
|
-
p @aFirst.active_voice_indicative_mood_present_tense #=> ["amō", "amās", "amat", "amāmus", "amātis", "amant"]
|
19
|
-
```
|
15
|
+
@aFirst.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number #=> amō
|
20
16
|
|
21
17
|
Upon opening the script, the student may play with verbs offered for
|
22
18
|
exploration. These are the standard paradigmatics verbs presented in
|
@@ -35,14 +31,11 @@ Wheelock:
|
|
35
31
|
|
36
32
|
Because LatinVerb attempts to preserve the phonographic data of a Latin verb,
|
37
33
|
the quantity of the vowels, the LatinVerb-definining string _must_ contain the
|
38
|
-
macron data so that the heuristics work.
|
34
|
+
macron data so that the heuristics work. To this end, you may use
|
35
|
+
MacronConversions to convert ASCII TeX-style transliterations of macronized
|
36
|
+
vowels to produce the correct string:
|
39
37
|
|
40
|
-
|
41
|
-
[MacronConversions](https://github.com/sgharms/Macronconversions) to convert
|
42
|
-
ASCII TeX-style transliterations of macronized vowels to produce the correct
|
43
|
-
string.
|
44
|
-
|
45
|
-
lv = Linguistics::Latin::Verb::LatinVerb#new("amō amāre amāvī amatum"))
|
38
|
+
lv = LatinVerb.new(Text::Latex::Util::Macronconversions.convert('am\={o} am\={a}re am\={a}v\={i} amatum', :mc))
|
46
39
|
lv.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number #=> amō
|
47
40
|
|
48
41
|
## VIEWING
|
@@ -53,10 +46,10 @@ that you use urxvt or Apple's Terminal.app for viewing these entries.
|
|
53
46
|
|
54
47
|
## GENERATING VERBS
|
55
48
|
|
56
|
-
Typically, in the code I have used the macron-ized character because
|
49
|
+
Typically, in the code I have used the macron-ized character because Textmate and my Terminal of choice
|
57
50
|
both understand it.
|
58
51
|
|
59
|
-
LatinVerb
|
52
|
+
LatinVerb.new %w(amō amāre amāvī amatum)
|
60
53
|
|
61
54
|
## EXECUTING METHODS
|
62
55
|
|
@@ -65,8 +58,10 @@ number / and person
|
|
65
58
|
|
66
59
|
### CHART VIEW
|
67
60
|
|
68
|
-
|
69
|
-
|
61
|
+
*Currently Unimplemented: 1 June 2011: Implementation underway*
|
62
|
+
|
63
|
+
To view the chart of a verb, use LatinVerb.chart\_display. This is a basic
|
64
|
+
chart that will look familiar to students.
|
70
65
|
|
71
66
|
### SINGULAR VECTOR
|
72
67
|
|
@@ -80,170 +75,166 @@ an exhaustive list of options follows below.
|
|
80
75
|
### MULTIPLEX VECTORS
|
81
76
|
|
82
77
|
Several convenience methods exist which load multiple tenses at the same time such as "present system" or "perfect system". These
|
83
|
-
methods load the tenses into the @collections iVar associated with the LatinVerb
|
78
|
+
methods load the tenses into the @collections iVar associated with the LatinVerb. This value can be accessed as @collections
|
84
79
|
is shared per attr\_reader
|
85
80
|
|
86
|
-
### CHART VIEW
|
87
|
-
|
88
|
-
By using the LatinDisplay.chart\_view, a chart, much like what is found in verb references can be had for the verb. This is a
|
89
|
-
_very_ handy method.
|
90
81
|
|
91
82
|
### Comprehensive List of Singular Vectors
|
92
83
|
|
93
|
-
* LatinVerb
|
94
|
-
* LatinVerb
|
95
|
-
* LatinVerb
|
96
|
-
* LatinVerb
|
97
|
-
* LatinVerb
|
98
|
-
* LatinVerb
|
99
|
-
|
100
|
-
* LatinVerb
|
101
|
-
* LatinVerb
|
102
|
-
* LatinVerb
|
103
|
-
* LatinVerb
|
104
|
-
* LatinVerb
|
105
|
-
* LatinVerb
|
106
|
-
|
107
|
-
* LatinVerb
|
108
|
-
* LatinVerb
|
109
|
-
* LatinVerb
|
110
|
-
* LatinVerb
|
111
|
-
* LatinVerb
|
112
|
-
* LatinVerb
|
113
|
-
|
114
|
-
* LatinVerb
|
115
|
-
* LatinVerb
|
116
|
-
* LatinVerb
|
117
|
-
* LatinVerb
|
118
|
-
* LatinVerb
|
119
|
-
* LatinVerb
|
120
|
-
|
121
|
-
* LatinVerb
|
122
|
-
* LatinVerb
|
123
|
-
* LatinVerb
|
124
|
-
* LatinVerb
|
125
|
-
* LatinVerb
|
126
|
-
* LatinVerb
|
84
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number
|
85
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_second\_person\_singular\_number
|
86
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_third\_person\_singular\_number
|
87
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_plural\_number
|
88
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_second\_person\_plural\_number
|
89
|
+
* LatinVerb.active\_voice\_indicative\_mood\_present\_tense\_third\_person\_plural\_number
|
90
|
+
|
91
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_singular\_number
|
92
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_singular\_number
|
93
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_singular\_number
|
94
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_plural\_number
|
95
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_plural\_number
|
96
|
+
* LatinVerb.active\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_plural\_number
|
97
|
+
|
98
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_first\_person\_singular\_number
|
99
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_second\_person\_singular\_number
|
100
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_third\_person\_singular\_number
|
101
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_first\_person\_plural\_number
|
102
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_second\_person\_plural\_number
|
103
|
+
* LatinVerb.active\_voice\_indicative\_mood\_future\_tense\_third\_person\_plural\_number
|
104
|
+
|
105
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_singular\_number
|
106
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_singular\_number
|
107
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_singular\_number
|
108
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_plural\_number
|
109
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_plural\_number
|
110
|
+
* LatinVerb.active\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_plural\_number
|
111
|
+
|
112
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_singular\_number
|
113
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_singular\_number
|
114
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_singular\_number
|
115
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_plural\_number
|
116
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_plural\_number
|
117
|
+
* LatinVerb.active\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_plural\_number
|
127
118
|
|
128
|
-
* LatinVerb
|
129
|
-
* LatinVerb
|
130
|
-
* LatinVerb
|
131
|
-
* LatinVerb
|
132
|
-
* LatinVerb
|
133
|
-
* LatinVerb
|
134
|
-
|
135
|
-
* LatinVerb
|
136
|
-
* LatinVerb
|
137
|
-
* LatinVerb
|
138
|
-
* LatinVerb
|
139
|
-
* LatinVerb
|
140
|
-
* LatinVerb
|
141
|
-
|
142
|
-
* LatinVerb
|
143
|
-
* LatinVerb
|
144
|
-
* LatinVerb
|
145
|
-
* LatinVerb
|
146
|
-
* LatinVerb
|
147
|
-
* LatinVerb
|
148
|
-
|
149
|
-
* LatinVerb
|
150
|
-
* LatinVerb
|
151
|
-
* LatinVerb
|
152
|
-
* LatinVerb
|
153
|
-
* LatinVerb
|
154
|
-
* LatinVerb
|
155
|
-
|
156
|
-
* LatinVerb
|
157
|
-
* LatinVerb
|
158
|
-
* LatinVerb
|
159
|
-
* LatinVerb
|
160
|
-
* LatinVerb
|
161
|
-
* LatinVerb
|
162
|
-
|
163
|
-
* LatinVerb
|
164
|
-
* LatinVerb
|
165
|
-
* LatinVerb
|
166
|
-
* LatinVerb
|
167
|
-
* LatinVerb
|
168
|
-
* LatinVerb
|
169
|
-
|
170
|
-
* LatinVerb
|
171
|
-
* LatinVerb
|
172
|
-
* LatinVerb
|
173
|
-
* LatinVerb
|
174
|
-
* LatinVerb
|
175
|
-
* LatinVerb
|
176
|
-
|
177
|
-
|
178
|
-
* LatinVerb
|
179
|
-
* LatinVerb
|
180
|
-
* LatinVerb
|
181
|
-
* LatinVerb
|
182
|
-
* LatinVerb
|
183
|
-
* LatinVerb
|
184
|
-
|
185
|
-
* LatinVerb
|
186
|
-
* LatinVerb
|
187
|
-
* LatinVerb
|
188
|
-
* LatinVerb
|
189
|
-
* LatinVerb
|
190
|
-
* LatinVerb
|
191
|
-
|
192
|
-
* LatinVerb
|
193
|
-
* LatinVerb
|
194
|
-
* LatinVerb
|
195
|
-
* LatinVerb
|
196
|
-
* LatinVerb
|
197
|
-
* LatinVerb
|
198
|
-
|
199
|
-
* LatinVerb
|
200
|
-
* LatinVerb
|
201
|
-
* LatinVerb
|
202
|
-
* LatinVerb
|
203
|
-
* LatinVerb
|
204
|
-
* LatinVerb
|
205
|
-
|
206
|
-
* LatinVerb
|
207
|
-
* LatinVerb
|
208
|
-
* LatinVerb
|
209
|
-
* LatinVerb
|
210
|
-
* LatinVerb
|
211
|
-
* LatinVerb
|
212
|
-
|
213
|
-
* LatinVerb
|
214
|
-
* LatinVerb
|
215
|
-
* LatinVerb
|
216
|
-
* LatinVerb
|
217
|
-
* LatinVerb
|
218
|
-
* LatinVerb
|
219
|
-
|
220
|
-
* LatinVerb
|
221
|
-
* LatinVerb
|
222
|
-
* LatinVerb
|
223
|
-
* LatinVerb
|
224
|
-
* LatinVerb
|
225
|
-
* LatinVerb
|
226
|
-
|
227
|
-
* LatinVerb
|
228
|
-
* LatinVerb
|
229
|
-
* LatinVerb
|
230
|
-
* LatinVerb
|
231
|
-
* LatinVerb
|
232
|
-
* LatinVerb
|
233
|
-
|
234
|
-
* LatinVerb
|
235
|
-
* LatinVerb
|
236
|
-
|
237
|
-
* LatinVerb
|
238
|
-
* LatinVerb
|
239
|
-
* LatinVerb
|
240
|
-
* LatinVerb
|
241
|
-
|
242
|
-
* LatinVerb
|
243
|
-
* LatinVerb
|
244
|
-
* LatinVerb
|
245
|
-
* LatinVerb
|
246
|
-
* LatinVerb
|
119
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_singular\_number
|
120
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_singular\_number
|
121
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_singular\_number
|
122
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_plural\_number
|
123
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_plural\_number
|
124
|
+
* LatinVerb.active\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_plural\_number
|
125
|
+
|
126
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number
|
127
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_second\_person\_singular\_number
|
128
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_third\_person\_singular\_number
|
129
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_first\_person\_plural\_number
|
130
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_second\_person\_plural\_number
|
131
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_present\_tense\_third\_person\_plural\_number
|
132
|
+
|
133
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_singular\_number
|
134
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_singular\_number
|
135
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_singular\_number
|
136
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_plural\_number
|
137
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_plural\_number
|
138
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_plural\_number
|
139
|
+
|
140
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_first\_person\_singular\_number
|
141
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_second\_person\_singular\_number
|
142
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_third\_person\_singular\_number
|
143
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_first\_person\_plural\_number
|
144
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_second\_person\_plural\_number
|
145
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_future\_tense\_third\_person\_plural\_number
|
146
|
+
|
147
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_singular\_number
|
148
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_singular\_number
|
149
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_singular\_number
|
150
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_plural\_number
|
151
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_plural\_number
|
152
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_plural\_number.to\_s)
|
153
|
+
|
154
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_singular\_number
|
155
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_singular\_number
|
156
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_singular\_number
|
157
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_plural\_number
|
158
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_plural\_number
|
159
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_plural\_number.to\_s)
|
160
|
+
|
161
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_singular\_number
|
162
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_singular\_number
|
163
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_singular\_number
|
164
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_plural\_number
|
165
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_plural\_number
|
166
|
+
* LatinVerb.passive\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_plural\_number
|
167
|
+
|
168
|
+
|
169
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_singular\_number
|
170
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_singular\_number
|
171
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_singular\_number
|
172
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_plural\_number
|
173
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_plural\_number
|
174
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_plural\_number
|
175
|
+
|
176
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_singular\_number
|
177
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_singular\_number
|
178
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_singular\_number
|
179
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_plural\_number
|
180
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_plural\_number
|
181
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_plural\_number
|
182
|
+
|
183
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_singular\_number
|
184
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_singular\_number
|
185
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_singular\_number
|
186
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_plural\_number
|
187
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_plural\_number
|
188
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_plural\_number
|
189
|
+
|
190
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_singular\_number
|
191
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_singular\_number
|
192
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_singular\_number
|
193
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_plural\_number
|
194
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_plural\_number
|
195
|
+
* LatinVerb.active\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_plural\_number
|
196
|
+
|
197
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_singular\_number
|
198
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_singular\_number
|
199
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_singular\_number
|
200
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_plural\_number
|
201
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_plural\_number
|
202
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_plural\_number
|
203
|
+
|
204
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_singular\_number
|
205
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_singular\_number
|
206
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_singular\_number
|
207
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_plural\_number
|
208
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_plural\_number
|
209
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_plural\_number
|
210
|
+
|
211
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_singular\_number
|
212
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_singular\_number
|
213
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_singular\_number
|
214
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_plural\_number
|
215
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_plural\_number
|
216
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_plural\_number
|
217
|
+
|
218
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_singular\_number
|
219
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_singular\_number
|
220
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_singular\_number
|
221
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_plural\_number
|
222
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_plural\_number
|
223
|
+
* LatinVerb.passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_plural\_number
|
224
|
+
|
225
|
+
* LatinVerb.imperatives[0]
|
226
|
+
* LatinVerb.imperatives[1]
|
227
|
+
|
228
|
+
* LatinVerb.present\_active\_participle
|
229
|
+
* LatinVerb.future\_active\_participle
|
230
|
+
* LatinVerb.perfect\_passive\_participle
|
231
|
+
* LatinVerb.future\_passive\_participle
|
232
|
+
|
233
|
+
* LatinVerb.present\_active\_infinitive
|
234
|
+
* LatinVerb.perfect\_active\_infinitive
|
235
|
+
* LatinVerb.future\_active\_infinitive
|
236
|
+
* LatinVerb.present\_passive\_infinitive
|
237
|
+
* LatinVerb.perfect\_passive\_infinitive)
|
247
238
|
|
248
239
|
## AUTHOR
|
249
240
|
|
@@ -251,10 +242,8 @@ Steven G. Harms (http://stevengharms.com)
|
|
251
242
|
|
252
243
|
## THANKS
|
253
244
|
|
254
|
-
Thanks to the Austin Ruby coders group who answered questions that helped me put
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
Lauren Roth ( http://www.laurennroth.com) for her support and encouragement and
|
260
|
-
understanding of my pre-dawn hack sessions.
|
245
|
+
Thanks to the Austin Ruby coders group who answered questions that helped me put this all together. Thanks also
|
246
|
+
to the Reject^{2} conference at the Lone Star Ruby Conference 2008 who helped me think through some of the
|
247
|
+
metaprogrammatic approaches. Thanks to Professor James Burleson of Austin Community College who insisted,
|
248
|
+
old-style, of a mastery of the rote basics of Latin. Thanks also to Lauren Roth ( http://www.laurennroth.com)
|
249
|
+
for her support and encouragement and understanding of my pre-dawn hack sessions.
|
data/bin/latinirb
CHANGED
data/latinirb.gemspec
CHANGED
@@ -20,5 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
|
-
s.
|
23
|
+
s.add_runtime_dependency 'latinverb', '= 0.9.0'
|
24
|
+
s.add_runtime_dependency 'macronconversions'
|
25
|
+
s.add_runtime_dependency 'verbvector'
|
26
|
+
s.add_runtime_dependency 'active_support', '>= 3.0'
|
27
|
+
|
28
|
+
|
24
29
|
end
|
data/latinverb.rb
ADDED
@@ -0,0 +1,544 @@
|
|
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
|
+
|
data/lib/LatinIRB.rb
CHANGED
@@ -44,7 +44,7 @@ module Linguistics
|
|
44
44
|
# This will be the script IRB sources on execution. You can
|
45
45
|
# pre-define variables (@aFirst, etc.) and convenience methods here.
|
46
46
|
|
47
|
-
@CONF[:SCRIPT]=
|
47
|
+
@CONF[:SCRIPT]=File.join(File.dirname(__FILE__), %w|latirb.rb|)
|
48
48
|
|
49
49
|
# No, do not tell me what you read in
|
50
50
|
@CONF[:ECHO]=false
|
@@ -6,7 +6,7 @@ module Linguistics
|
|
6
6
|
module Latin
|
7
7
|
module Util
|
8
8
|
class LatinIRB
|
9
|
-
@aFirst = Linguistics::Latin::Verb::LatinVerb.new
|
9
|
+
@aFirst = Linguistics::Latin::Verb::LatinVerb.new Text::Latex::Util::Macronconversions.convert('am\={o} am\={a}re am\={a}v\={\i} amatum', 'mc')
|
10
10
|
@aSecond = Linguistics::Latin::Verb::LatinVerb.new %q(moneō monēre monvī monitum)
|
11
11
|
@aThird = Linguistics::Latin::Verb::LatinVerb.new %q(agō agere ēgī actum)
|
12
12
|
@aThirdIO = Linguistics::Latin::Verb::LatinVerb.new %q(capiō capere cēpī captum)
|
data/lib/latinirb/version.rb
CHANGED
metadata
CHANGED
@@ -1,73 +1,108 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: latinirb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.2.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Steven G. Harms
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2011-06-02 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: latinverb
|
16
|
-
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
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
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
17
30
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
22
35
|
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: verbvector
|
23
39
|
prerelease: false
|
24
|
-
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
25
41
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0
|
30
|
-
|
31
|
-
|
32
|
-
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: active_support
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "3.0"
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: *id004
|
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:
|
33
61
|
- steven.harms@gmail.com
|
34
|
-
executables:
|
62
|
+
executables:
|
35
63
|
- latinirb
|
36
64
|
extensions: []
|
65
|
+
|
37
66
|
extra_rdoc_files: []
|
38
|
-
|
67
|
+
|
68
|
+
files:
|
39
69
|
- .gitignore
|
40
70
|
- Gemfile
|
41
71
|
- README.markdown
|
42
72
|
- Rakefile
|
43
73
|
- bin/latinirb
|
44
74
|
- latinirb.gemspec
|
75
|
+
- latinverb.rb
|
45
76
|
- lib/LatinIRB.rb
|
46
77
|
- lib/latinirb/paradigmatic_verbs.rb
|
47
78
|
- lib/latinirb/version.rb
|
48
79
|
- lib/latirb.rb
|
49
80
|
homepage: http://rubygems.org/gems/latinverb
|
50
81
|
licenses: []
|
82
|
+
|
51
83
|
post_install_message:
|
52
84
|
rdoc_options: []
|
53
|
-
|
85
|
+
|
86
|
+
require_paths:
|
54
87
|
- lib
|
55
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
89
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version:
|
61
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
95
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version:
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0"
|
67
100
|
requirements: []
|
101
|
+
|
68
102
|
rubyforge_project: latinverb
|
69
|
-
rubygems_version: 1.8.
|
103
|
+
rubygems_version: 1.8.5
|
70
104
|
signing_key:
|
71
105
|
specification_version: 3
|
72
106
|
summary: Gem designed to explore verbs created by LatinVerb
|
73
107
|
test_files: []
|
108
|
+
|