latinirb 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ pkg/*
2
+ .DS_*
3
+ *.gem
4
+ *.sw?
5
+ *.vim
6
+ **/*.vim
7
+ .bundle
8
+ .rvmrc
9
+ *doc
10
+ tags
11
+ TODO
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in latinirb.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,260 @@
1
+ # LatinIRB
2
+
3
+ ## DESCRIPTION
4
+
5
+ LatinIRB is an IRB session in which a user can interact with paradigmatic
6
+ Latin verbs (`@aFirst`, `@aSecond`, `@aThird`, `@aThirdIO`, `@aFourth`) as
7
+ calculated heuristically by the LatinVerb library.
8
+
9
+ The methods of chief interest will be those that are _vectors_ within the
10
+ LatinVerb parlance i.e. methods that uniquely identify a specific conjugated
11
+ form of a verb.
12
+
13
+ An primary use case would be:
14
+
15
+ ```ruby
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
+ ```
20
+
21
+ Upon opening the script, the student may play with verbs offered for
22
+ exploration. These are the standard paradigmatics verbs presented in
23
+ Wheelock:
24
+
25
+ <table>
26
+ <tr><th>Varible </th> <th>Parts </th> <th> Meaning</th></tr>
27
+ <tr><td>@aFirst </td> <td>amō amāre amāvī amatum </td> <td> to love / like</td></tr>
28
+ <tr><td>@aSecond </td> <td>moneō monēre monvī monitum</td> <td> to warn / advise</td></tr>
29
+ <tr><td>@aThird </td> <td>agō agere ēgī actum </td> <td> to do / lead / undertake</td></tr>
30
+ <tr><td>@aThirdIO</td> <td>capiō capere cēpī captum </td> <td> to grab / seize</td></tr>
31
+ <tr><td>@aFourth </td> <td>audiō audīre audīvī auditum</td> <td> to hear</td></tr>
32
+ </table>
33
+
34
+ ## INSTANTIATING
35
+
36
+ Because LatinVerb attempts to preserve the phonographic data of a Latin verb,
37
+ the quantity of the vowels, the LatinVerb-definining string _must_ contain the
38
+ macron data so that the heuristics work.
39
+
40
+ To this end, you may use
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"))
46
+ lv.active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number #=> amō
47
+
48
+ ## VIEWING
49
+
50
+ The environment takes advantage of Ruby's UTF-8 support to display the verbs
51
+ with macrons (notation representing the quantity of the vowels). I recommend
52
+ that you use urxvt or Apple's Terminal.app for viewing these entries.
53
+
54
+ ## GENERATING VERBS
55
+
56
+ Typically, in the code I have used the macron-ized character because Vim and my Terminal of choice
57
+ both understand it.
58
+
59
+ LatinVerb#new %w(amō amāre amāvī amatum)
60
+
61
+ ## EXECUTING METHODS
62
+
63
+ Every verb in latin is a "vector" comprised of the voice / mood / tense /
64
+ number / and person
65
+
66
+ ### CHART VIEW
67
+
68
+ To view the chart of a verb, use `LatinVerb#chart`. This is a basic chart that
69
+ will look familiar to students.
70
+
71
+ ### SINGULAR VECTOR
72
+
73
+ As such methods are of the form
74
+
75
+ (active|passive)\_voice\_(indicative|subjunctive)\_mood\_(present|imperfect|perfect|pastperfect|futureperfect|etc.)tense\_first\_person\_singular\_number
76
+
77
+ This will return a single value. Where the result is ambiguous (e.g. 'number' is not provided) multiple values are returned.
78
+ an exhaustive list of options follows below.
79
+
80
+ ### MULTIPLEX VECTORS
81
+
82
+ 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# This value can be accessed as @collections
84
+ is shared per attr\_reader
85
+
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
+
91
+ ### Comprehensive List of Singular Vectors
92
+
93
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number
94
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_second\_person\_singular\_number
95
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_third\_person\_singular\_number
96
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_first\_person\_plural\_number
97
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_second\_person\_plural\_number
98
+ * LatinVerb#active\_voice\_indicative\_mood\_present\_tense\_third\_person\_plural\_number
99
+
100
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_singular\_number
101
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_singular\_number
102
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_singular\_number
103
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_plural\_number
104
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_plural\_number
105
+ * LatinVerb#active\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_plural\_number
106
+
107
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_first\_person\_singular\_number
108
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_second\_person\_singular\_number
109
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_third\_person\_singular\_number
110
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_first\_person\_plural\_number
111
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_second\_person\_plural\_number
112
+ * LatinVerb#active\_voice\_indicative\_mood\_future\_tense\_third\_person\_plural\_number
113
+
114
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_singular\_number
115
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_singular\_number
116
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_singular\_number
117
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_plural\_number
118
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_plural\_number
119
+ * LatinVerb#active\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_plural\_number
120
+
121
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_singular\_number
122
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_singular\_number
123
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_singular\_number
124
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_plural\_number
125
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_plural\_number
126
+ * LatinVerb#active\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_plural\_number
127
+
128
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_singular\_number
129
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_singular\_number
130
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_singular\_number
131
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_plural\_number
132
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_plural\_number
133
+ * LatinVerb#active\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_plural\_number
134
+
135
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_first\_person\_singular\_number
136
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_second\_person\_singular\_number
137
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_third\_person\_singular\_number
138
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_first\_person\_plural\_number
139
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_second\_person\_plural\_number
140
+ * LatinVerb#passive\_voice\_indicative\_mood\_present\_tense\_third\_person\_plural\_number
141
+
142
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_singular\_number
143
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_singular\_number
144
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_singular\_number
145
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_first\_person\_plural\_number
146
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_second\_person\_plural\_number
147
+ * LatinVerb#passive\_voice\_indicative\_mood\_imperfect\_tense\_third\_person\_plural\_number
148
+
149
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_first\_person\_singular\_number
150
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_second\_person\_singular\_number
151
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_third\_person\_singular\_number
152
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_first\_person\_plural\_number
153
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_second\_person\_plural\_number
154
+ * LatinVerb#passive\_voice\_indicative\_mood\_future\_tense\_third\_person\_plural\_number
155
+
156
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_singular\_number
157
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_singular\_number
158
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_singular\_number
159
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_first\_person\_plural\_number
160
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_second\_person\_plural\_number
161
+ * LatinVerb#passive\_voice\_indicative\_mood\_perfect\_tense\_third\_person\_plural\_number.to\_s)
162
+
163
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_singular\_number
164
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_singular\_number
165
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_singular\_number
166
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_first\_person\_plural\_number
167
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_second\_person\_plural\_number
168
+ * LatinVerb#passive\_voice\_indicative\_mood\_pastperfect\_tense\_third\_person\_plural\_number.to\_s)
169
+
170
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_singular\_number
171
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_singular\_number
172
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_singular\_number
173
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_first\_person\_plural\_number
174
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_second\_person\_plural\_number
175
+ * LatinVerb#passive\_voice\_indicative\_mood\_futureperfect\_tense\_third\_person\_plural\_number
176
+
177
+
178
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_singular\_number
179
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_singular\_number
180
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_singular\_number
181
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_plural\_number
182
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_plural\_number
183
+ * LatinVerb#active\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_plural\_number
184
+
185
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_singular\_number
186
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_singular\_number
187
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_singular\_number
188
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_plural\_number
189
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_plural\_number
190
+ * LatinVerb#active\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_plural\_number
191
+
192
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_singular\_number
193
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_singular\_number
194
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_singular\_number
195
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_plural\_number
196
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_plural\_number
197
+ * LatinVerb#active\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_plural\_number
198
+
199
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_singular\_number
200
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_singular\_number
201
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_singular\_number
202
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_plural\_number
203
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_plural\_number
204
+ * LatinVerb#active\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_plural\_number
205
+
206
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_singular\_number
207
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_singular\_number
208
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_singular\_number
209
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_first\_person\_plural\_number
210
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_second\_person\_plural\_number
211
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_present\_tense\_third\_person\_plural\_number
212
+
213
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_singular\_number
214
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_singular\_number
215
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_singular\_number
216
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_first\_person\_plural\_number
217
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_second\_person\_plural\_number
218
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_imperfect\_tense\_third\_person\_plural\_number
219
+
220
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_singular\_number
221
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_singular\_number
222
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_singular\_number
223
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_first\_person\_plural\_number
224
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_second\_person\_plural\_number
225
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_perfect\_tense\_third\_person\_plural\_number
226
+
227
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_singular\_number
228
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_singular\_number
229
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_singular\_number
230
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_first\_person\_plural\_number
231
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_second\_person\_plural\_number
232
+ * LatinVerb#passive\_voice\_subjunctive\_mood\_pastperfect\_tense\_third\_person\_plural\_number
233
+
234
+ * LatinVerb#imperatives[0]
235
+ * LatinVerb#imperatives[1]
236
+
237
+ * LatinVerb#present\_active\_participle
238
+ * LatinVerb#future\_active\_participle
239
+ * LatinVerb#perfect\_passive\_participle
240
+ * LatinVerb#future\_passive\_participle
241
+
242
+ * LatinVerb#present\_active\_infinitive
243
+ * LatinVerb#perfect\_active\_infinitive
244
+ * LatinVerb#future\_active\_infinitive
245
+ * LatinVerb#present\_passive\_infinitive
246
+ * LatinVerb#perfect\_passive\_infinitive)
247
+
248
+ ## AUTHOR
249
+
250
+ Steven G. Harms (http://stevengharms.com)
251
+
252
+ ## THANKS
253
+
254
+ Thanks to the Austin Ruby coders group who answered questions that helped me put
255
+ this all together. Thanks also to the Reject^{2} conference at the Lone Star
256
+ Ruby Conference 2008 who helped me think through some of the metaprogrammatic
257
+ approaches. Thanks to Professor James Burleson of Austin Community College who
258
+ insisted, old-style, of a mastery of the rote basics of Latin. Thanks also to
259
+ Lauren Roth ( http://www.laurennroth.com) for her support and encouragement and
260
+ understanding of my pre-dawn hack sessions.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ require "rake/rdoctask"
3
+
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ # Generate documentation
7
+ Rake::RDocTask.new do |rd|
8
+ rd.rdoc_files.include("lib/**/*.rb")
9
+ rd.rdoc_dir = "rdoc"
10
+ end
11
+
12
+ #Added to get testing working
13
+ require 'rake/testtask'
14
+ Rake::TestTask.new(:test)
data/bin/latinirb ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Add the gem libraries to the Ruby path
4
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
5
+
6
+ require 'LatinIRB'
7
+ Linguistics::Latin::Util::LatinIRB.begin
data/latinirb.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "latinirb/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "latinirb"
7
+ s.version = Linguistics::Latin::Util::LatinIRB::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Steven G. Harms"]
10
+ s.email = ["steven.harms@gmail.com"]
11
+ s.homepage = "http://rubygems.org/gems/latinverb"
12
+ s.summary = %q{Gem designed to explore verbs created by LatinVerb}
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
+
15
+
16
+ s.rubyforge_project = "latinverb"
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ s.add_dependency("latinverb",">=0.9.3")
24
+ end
data/lib/LatinIRB.rb ADDED
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'irb'
4
+ require 'irb/completion'
5
+ require 'latinverb'
6
+ require 'latinirb/paradigmatic_verbs'
7
+ require 'macronconversions'
8
+ require 'pp'
9
+
10
+ # Monkey-patch to change the gets behavior. In the gem, the FileInputMethod
11
+ # class's 'gets' method always prints out what was read. This should be
12
+ # suppressed by the IRB class's Context class's ECHO state, but this is not
13
+ # used, possibly a bug depending on what the semantics of that @echo variable
14
+ # are meant to mean.
15
+
16
+ module IRB
17
+ class FileInputMethod < InputMethod
18
+ def gets
19
+ @io.gets
20
+ end
21
+ end
22
+ end
23
+
24
+ module Linguistics
25
+ module Latin
26
+ module Util
27
+ class LatinIRB
28
+ def self.begin
29
+ #---
30
+ #
31
+ # This method is taken from irb.rb's IRB.start method. I trimmed
32
+ # out some of the conditional possibilities that I did not want to
33
+ # handle here (because they're not necessary).
34
+ #
35
+ # Run the basic setup script and pull the configuration object
36
+ # (IRB::Context) back into the present scope. Then we set that
37
+ # object's options and proceed.
38
+ #
39
+ #+++
40
+
41
+ IRB.setup(nil)
42
+ @CONF = IRB.conf
43
+
44
+ # This will be the script IRB sources on execution. You can
45
+ # pre-define variables (@aFirst, etc.) and convenience methods here.
46
+
47
+ @CONF[:SCRIPT]="lib/latirb.rb"
48
+
49
+ # No, do not tell me what you read in
50
+ @CONF[:ECHO]=false
51
+
52
+ # Nor tell me how it evaluated
53
+ @CONF[:VERBOSE]=false
54
+
55
+ # We need this module
56
+ @CONF[:LOAD_MODULES]=["latinverb"]
57
+
58
+ # Create an irb object that is programmed to (silently, per above)
59
+ # source a configuration file that ends with a call to 'irb' itself
60
+ # after defining several instance variables
61
+
62
+ irb = IRB::Irb.new(nil, @CONF[:SCRIPT])
63
+
64
+ # Create a LatinIRB prompt
65
+ @CONF[:PROMPT][:LATINIRB] = {
66
+ :PROMPT_I => "LatinIRB > ",
67
+ :PROMPT_S => "LatinIRB%l> ",
68
+ :PROMPT_C => "LatinIRB > ",
69
+ :PROMPT_N => "LatinIRB ?> ",
70
+ :RETURN => " => %s \n",
71
+ :AUTO_INDENT => true
72
+ }
73
+ @CONF[:PROMPT_MODE]=:LATINIRB
74
+
75
+ # Unless this is set, eval_input will fail. Make sure this is
76
+ # set.
77
+ @CONF[:MAIN_CONTEXT] = irb.context
78
+
79
+ # This corrects the tab-completion behavior as provided by
80
+ # irb/completion.rb. In the even that what's tabbed-after matches
81
+ # the RegExp, it should invoke this process. If the receiver is a
82
+ # LatinVerb, the full complement of vectors should be provided as
83
+ # complet-able. IF NOT, then the pairing is passed to the standard
84
+ # CompletionProc.
85
+
86
+ Readline.completion_proc = calculate_completion_proc
87
+
88
+ # We have finished the configuration at this point, so now we need
89
+ # to kick up the REPL after providing preliminary instruction.
90
+ puts "Beginning a LatinVerb session."
91
+
92
+ puts "The following verbs have been made available to this session via latirb.rb:"
93
+
94
+ instance_variables.grep(/[a-z]/).each{|x| puts " * #{x}"}
95
+
96
+ puts "Tab-completion of the conjugation \"vectors\" is supported."
97
+
98
+ trap("SIGINT") do
99
+ irb.signal_handle
100
+ end
101
+
102
+ begin
103
+ catch(:IRB_EXIT) do
104
+ # Start the REPL
105
+ irb.eval_input
106
+ end
107
+ end
108
+
109
+ puts "Vale! Come back to LatinIRB soon."
110
+ end
111
+
112
+ ##
113
+ #
114
+ # Used to override IRB::InputCompletor::select_message for handling
115
+ # tab-completion of instance variables. Code is largely taken from
116
+ # that method with the addition of the /^@/ condition. In
117
+ # IRB::Completor, when an array of matches has been identified, they
118
+ # are sent as the "candidates" while the "receiver" bears the match
119
+ # based on the regex of "message."
120
+ #
121
+ ##
122
+
123
+ def self.select_message(receiver, message, candidates)
124
+ candidates.grep(/^#{message}/).collect do |e|
125
+ case e
126
+ when /^[a-zA-Z_]/
127
+ receiver + "." + e
128
+ when /^[0-9]/
129
+ when /^@/
130
+ e
131
+ when *Operators
132
+ #receiver + " " + e
133
+ end
134
+ end
135
+ end
136
+
137
+ ##
138
+ #
139
+ # As part of the TAB completion, Readline must be provided a
140
+ # completion proc that will be used to generate the matching results
141
+ # that will be appended to the line at whose end the TAB key was
142
+ # struck. This method provides that proc.
143
+ #
144
+ ##
145
+
146
+ def self.calculate_completion_proc
147
+ proc do |input|
148
+ bind = IRB.conf[:MAIN_CONTEXT].workspace.binding
149
+
150
+ input =~ /^([^."].*)\.([^.]*)$/
151
+ begin
152
+ receiver = $1
153
+ message = Regexp.quote($2)
154
+ rObj = instance_variable_get(receiver.to_sym)
155
+ rescue Exception
156
+ end
157
+
158
+ if rObj.class == Linguistics::Latin::Verb::LatinVerb
159
+ IRB::InputCompletor::select_message(receiver, message, rObj.instance_methods.grep(/^#{message}/))
160
+ elsif input =~ /^@/
161
+ # This handles instance variables. input is @someInstanceVariable's @aSomeIn<TAB>
162
+ self.select_message(input, input, eval("instance_variables", bind).grep(/^@a/))
163
+ else
164
+ IRB::InputCompletor::CompletionProc.call input
165
+ end
166
+ end
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,17 @@
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 %q(amō amāre amāvī amatum)
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
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+ module Linguistics
3
+ module Latin
4
+ module Util
5
+ class LatinIRB
6
+ VERSION = "0.0.2" # :nodoc:
7
+ end
8
+ end
9
+ end
10
+ end
data/lib/latirb.rb ADDED
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ # Basic definitions
3
+ @aFirst = Linguistics::Latin::Verb::LatinVerb.new %q(amō amāre amāvī amatum)
4
+ @aSecond = Linguistics::Latin::Verb::LatinVerb.new %q(moneō monēre monvī monitum)
5
+ @aThird = Linguistics::Latin::Verb::LatinVerb.new %q(agō agere ēgī actum)
6
+ @aThirdIO = Linguistics::Latin::Verb::LatinVerb.new %q(capiō capere cēpī captum)
7
+ @aFourth = Linguistics::Latin::Verb::LatinVerb.new %q(audiō audīre audīvī auditum)
8
+
9
+ # It's handy to have these two methods defined here for simple tests of the
10
+ # code and demonstrations.
11
+
12
+ def j
13
+ puts @aFirst.active_voice_indicative_mood_present_tense_first_person_singular_number
14
+ end
15
+ def b(f)
16
+ puts f.active_voice_indicative_mood_present_tense_first_person_singular_number
17
+ end
18
+
19
+ # Start up the REPL
20
+ irb
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: latinirb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Steven G. Harms
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: latinverb
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.3
30
+ description: This gem takes initial data describing a LatinVerb and allows this is
31
+ be instantiated into an IRB session. Here the verb can be queried or displayed.
32
+ email:
33
+ - steven.harms@gmail.com
34
+ executables:
35
+ - latinirb
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - .gitignore
40
+ - Gemfile
41
+ - README.markdown
42
+ - Rakefile
43
+ - bin/latinirb
44
+ - latinirb.gemspec
45
+ - lib/LatinIRB.rb
46
+ - lib/latinirb/paradigmatic_verbs.rb
47
+ - lib/latinirb/version.rb
48
+ - lib/latirb.rb
49
+ homepage: http://rubygems.org/gems/latinverb
50
+ licenses: []
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project: latinverb
69
+ rubygems_version: 1.8.23
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Gem designed to explore verbs created by LatinVerb
73
+ test_files: []