latinverb 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +28 -6
- data/README.markdown +1 -1
- data/Rakefile +1 -0
- data/latinverb.gemspec +5 -3
- data/lib/latinverb/components/chart_presenter.rb +81 -0
- data/lib/latinverb/components/classifier/strategies/defective_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/deponent_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/impersonal_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/irregular_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/present_only_verb_classification_strategy.rb +21 -0
- data/lib/latinverb/components/classifier/strategies/regular_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/semideponent_verb_classification_strategy.rb +19 -0
- data/lib/latinverb/components/classifier/strategies/verb_classification_strategy.rb +31 -0
- data/lib/latinverb/components/classifier/strategies/very_irregular_verb_classification_strategy.rb +20 -0
- data/lib/latinverb/components/classifier.rb +76 -0
- data/lib/latinverb/components/imperatives_handler.rb +40 -0
- data/lib/latinverb/components/infinitivizer.rb +50 -0
- data/lib/latinverb/components/participler.rb +58 -0
- data/lib/latinverb/components/passive_infinitive_factory.rb +42 -0
- data/lib/latinverb/components/present_only_checker.rb +32 -0
- data/lib/latinverb/components/principal_parts_extractor.rb +35 -0
- data/lib/latinverb/components/stem_deriver.rb +81 -0
- data/lib/latinverb/components/type_evaluator.rb +35 -0
- data/lib/latinverb/components/validator.rb +33 -0
- data/lib/latinverb/components.rb +9 -0
- data/lib/latinverb/dynamic_method_resolver.rb +41 -0
- data/lib/latinverb/errors.rb +10 -0
- data/lib/latinverb/imperative_block/imperative_rule_factory.rb +35 -0
- data/lib/latinverb/imperative_block.rb +71 -0
- data/lib/latinverb/paradigmatic_verbs.rb +21 -0
- data/lib/latinverb/serialization/hash.rb +17 -0
- data/lib/latinverb/serialization/json.rb +41 -0
- data/lib/latinverb/serialization/yaml.rb +15 -0
- data/lib/latinverb/serialization.rb +3 -0
- data/lib/latinverb/tense_block/null_tense_block.rb +12 -0
- data/lib/latinverb/tense_block/vector_resolution_delegate.rb +89 -0
- data/lib/latinverb/tense_block.rb +52 -0
- data/lib/latinverb/tense_method_applicator/defective_checker.rb +21 -0
- data/lib/{linguistics/latin/verb/latinverb/classmethods.rb → latinverb/tense_method_applicator/deponent_string_deriver.rb} +15 -69
- data/lib/latinverb/tense_method_applicator/first_builder.rb +98 -0
- data/lib/latinverb/tense_method_applicator/fourth.rb +100 -0
- data/lib/latinverb/tense_method_applicator/fourth_builder.rb +100 -0
- data/lib/latinverb/tense_method_applicator/irregular_builder.rb +117 -0
- data/lib/latinverb/tense_method_applicator/mutator_for_classification_factory.rb +38 -0
- data/lib/latinverb/tense_method_applicator/mutator_for_verb_type.rb +38 -0
- data/lib/latinverb/tense_method_applicator/mutators/deponent/imperative_mutator.rb +49 -0
- data/lib/latinverb/tense_method_applicator/mutators/deponent/infinitive_mutator.rb +42 -0
- data/lib/latinverb/tense_method_applicator/mutators/deponent/participle_mutator.rb +47 -0
- data/lib/latinverb/tense_method_applicator/mutators/deponent/tense_block_mutator.rb +55 -0
- data/lib/latinverb/tense_method_applicator/mutators/deponent.rb +41 -0
- data/lib/latinverb/tense_method_applicator/mutators/impersonal.rb +27 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_imperative_mood_future_tense_strategy.rb +29 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_imperative_mood_present_tense_strategy.rb +29 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_future_tense_strategy.rb +35 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_futureperfect_tense_strategy.rb +28 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_imperfect_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_pastperfect_tense_strategy.rb +28 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_perfect_tense_strategy.rb +29 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_indicative_mood_present_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_subjunctive_mood_imperfect_tense_strategy.rb +29 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_subjunctive_mood_pastperfect_tense_strategy.rb +30 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_subjunctive_mood_perfect_tense_strategy.rb +30 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/active_voice_subjunctive_mood_present_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/imperatives.rb +53 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_future_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_futureperfect_tense_strategy.rb +27 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_imperfect_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_pastperfect_tense_strategy.rb +27 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_perfect_tense_strategy.rb +27 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_indicative_mood_present_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_subjunctive_mood_imperfect_tense_strategy.rb +30 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_subjunctive_mood_pastperfect_tense_strategy.rb +33 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_subjunctive_mood_perfect_tense_strategy.rb +33 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/passive_voice_subjunctive_mood_present_tense_strategy.rb +24 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant/triplicate_and_pluralize_formatters.rb +26 -0
- data/lib/latinverb/tense_method_applicator/mutators/invariant.rb +65 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular/infinitives_builder.rb +35 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular/json_deserializer.rb +52 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular/json_revivifier.rb +48 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular/participles_builder.rb +35 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular/present_only_irregular_mask.rb +37 -0
- data/lib/latinverb/tense_method_applicator/mutators/irregular.rb +25 -0
- data/lib/latinverb/tense_method_applicator/mutators/present_only.rb +18 -0
- data/lib/latinverb/tense_method_applicator/mutators/regular.rb +17 -0
- data/lib/latinverb/tense_method_applicator/mutators/semideponent.rb +88 -0
- data/lib/latinverb/tense_method_applicator/perfect_tense_remover.rb +26 -0
- data/lib/latinverb/tense_method_applicator/second_builder.rb +105 -0
- data/lib/latinverb/tense_method_applicator/tense_methods_vectorizer.rb +73 -0
- data/lib/latinverb/tense_method_applicator/third_builder.rb +93 -0
- data/lib/latinverb/tense_method_applicator/thirdio_builder.rb +100 -0
- data/lib/latinverb/tense_method_applicator.rb +55 -0
- data/lib/latinverb/version.rb +2 -3
- data/lib/latinverb.rb +63 -419
- data/test/{testDeponentFirstConjugation.rb → integration/deponent_first_conjugation_test.rb} +1 -1
- data/test/{testDeponentFourthConjugation.rb → integration/deponent_fourth_conjugation_test.rb} +1 -1
- data/test/{testDeponentSecondConjugation.rb → integration/deponent_second_conjugation_test.rb} +1 -1
- data/test/{testDeponentThirdConjugation.rb → integration/deponent_third_conjugation_test.rb} +2 -2
- data/test/{testDeponentThirdIOConjugation.rb → integration/deponent_third_io_conjugation_test.rb} +1 -1
- data/test/{testFirstConjugation.rb → integration/first_conjugation_test.rb} +3 -7
- data/test/{testFreakishVerbs.rb → integration/freakish_vs.rb_test.rb} +4 -4
- data/test/{testIrregularSum.rb → integration/irregular_sum_test.rb} +1 -1
- data/test/{testIrregulars.rb → integration/irregulars_test.rb} +1 -1
- data/test/{testLatinVerb.rb → integration/latin_verb_test.rb} +5 -25
- data/test/{testThirdConjugation.rb → integration/third_conjugation_test.rb} +19 -21
- data/test/unit/latinverb_accessible_reader_test.rb +18 -0
- data/test/unit/principal_parts_extractor_test.rb +33 -0
- metadata +151 -79
- data/lib/latinverb/chart.rb +0 -94
- data/lib/linguistics/latin/verb/classification_types.rb +0 -61
- data/lib/linguistics/latin/verb/constants.rb +0 -201
- data/lib/linguistics/latin/verb/deponent_tense_methods.rb +0 -85
- data/lib/linguistics/latin/verb/imperative_block.rb +0 -118
- data/lib/linguistics/latin/verb/infinitive_block.rb +0 -39
- data/lib/linguistics/latin/verb/infinitives.rb +0 -212
- data/lib/linguistics/latin/verb/irregulars.rb +0 -4393
- data/lib/linguistics/latin/verb/latinverb/data.rb +0 -87
- data/lib/linguistics/latin/verb/latinverb/defective_checker.rb +0 -17
- data/lib/linguistics/latin/verb/latinverb/deponent.rb +0 -159
- data/lib/linguistics/latin/verb/latinverb/display.rb +0 -22
- data/lib/linguistics/latin/verb/latinverb/impersonal.rb +0 -34
- data/lib/linguistics/latin/verb/latinverb/irregular.rb +0 -83
- data/lib/linguistics/latin/verb/latinverb/latin_verb_type_evaluator.rb +0 -32
- data/lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb +0 -100
- data/lib/linguistics/latin/verb/latinverb/latinverb_input_sanitizer.rb +0 -32
- data/lib/linguistics/latin/verb/latinverb/latinverb_pp_extractor.rb +0 -106
- data/lib/linguistics/latin/verb/latinverb/metaprogramming.rb +0 -80
- data/lib/linguistics/latin/verb/latinverb/semideponent.rb +0 -28
- data/lib/linguistics/latin/verb/latinverb/validation.rb +0 -42
- data/lib/linguistics/latin/verb/latinverb/verbvector_description.rb +0 -50
- data/lib/linguistics/latin/verb/participle_block.rb +0 -36
- data/lib/linguistics/latin/verb/participles.rb +0 -202
- data/lib/linguistics/latin/verb/phonographia.rb +0 -109
- data/lib/linguistics/latin/verb/supine.rb +0 -42
- data/lib/linguistics/latin/verb/tense_block.rb +0 -227
- data/lib/linguistics/latin/verb/tense_definitions/first.rb +0 -92
- data/lib/linguistics/latin/verb/tense_definitions/fourth.rb +0 -92
- data/lib/linguistics/latin/verb/tense_definitions/impersonal.rb +0 -25
- data/lib/linguistics/latin/verb/tense_definitions/invariant.rb +0 -613
- data/lib/linguistics/latin/verb/tense_definitions/irregular.rb +0 -82
- data/lib/linguistics/latin/verb/tense_definitions/second.rb +0 -97
- data/lib/linguistics/latin/verb/tense_definitions/third.rb +0 -86
- data/lib/linguistics/latin/verb/tense_definitions/third_io.rb +0 -91
- data/test/testDeserializeInfinitives.rb +0 -36
- /data/test/{testAmbiguousLookups.rb → integration/ambiguous_lookups_test.rb} +0 -0
- /data/test/{testClusterResolution.rb → integration/cluster_resolution_test.rb} +0 -0
- /data/test/{testDataStructures.rb → integration/data_structures_test.rb} +0 -0
- /data/test/{testDefectSemiImp.rb → integration/defect_semi_imp_test.rb} +0 -0
- /data/test/{testFourthConjugation.rb → integration/fourth_conjugation_test.rb} +0 -0
- /data/test/{testImperativeBlock.rb → integration/imperative_block_test.rb} +0 -0
- /data/test/{testMacronRules.rb → integration/macron_rules_test.rb} +0 -0
- /data/test/{testSecondConjugation.rb → integration/second_conjugation_test.rb} +0 -0
- /data/test/{testThirdIOConjugation.rb → integration/third_io_conjugation_test.rb} +0 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: c7d01401c1e463c6685484ef6aed12e2ddb89f57
|
|
4
|
+
data.tar.gz: 90d118e985a430efb4f1b9c78c6c32224e5a3ade
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: d0bd88ebc7d39429081475d0bc6491b2bb009edd706db40c3bc1670d41739e0428ec8fc920396cd7fd9d5637dc3beaf9ea21812506bc1abb3c6db910345a6c4e
|
|
7
|
+
data.tar.gz: a8515ecbadfbd60bd5148830997c8377219ae57b884cf3966e15f5d680e5f6598664510d726738f54320ccb3fa50baf594351b8d2d93fe5bf8d6024b1ab19d44
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,24 +1,46 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
latinverb (0.9.
|
|
4
|
+
latinverb (0.9.3)
|
|
5
|
+
activesupport
|
|
6
|
+
linguistics_latin
|
|
5
7
|
macronconversions
|
|
8
|
+
rake
|
|
6
9
|
rdoc
|
|
7
|
-
verbvector
|
|
8
10
|
|
|
9
11
|
GEM
|
|
10
12
|
remote: http://rubygems.org/
|
|
11
13
|
specs:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
activesupport (4.0.0)
|
|
15
|
+
i18n (~> 0.6, >= 0.6.4)
|
|
16
|
+
minitest (~> 4.2)
|
|
17
|
+
multi_json (~> 1.3)
|
|
18
|
+
thread_safe (~> 0.1)
|
|
19
|
+
tzinfo (~> 0.3.37)
|
|
20
|
+
atomic (1.1.14)
|
|
21
|
+
autotest-standalone (4.5.11)
|
|
22
|
+
byebug (2.2.2)
|
|
23
|
+
columnize (~> 0.3.6)
|
|
24
|
+
debugger-linecache (~> 1.2.0)
|
|
25
|
+
columnize (0.3.6)
|
|
26
|
+
debugger-linecache (1.2.0)
|
|
27
|
+
i18n (0.6.5)
|
|
28
|
+
json (1.8.1)
|
|
29
|
+
linguistics_latin (0.0.1)
|
|
14
30
|
macronconversions (0.0.1)
|
|
15
|
-
|
|
31
|
+
minitest (4.7.5)
|
|
32
|
+
multi_json (1.8.2)
|
|
33
|
+
rake (10.1.0)
|
|
34
|
+
rdoc (4.0.1)
|
|
16
35
|
json (~> 1.4)
|
|
17
|
-
|
|
36
|
+
thread_safe (0.1.3)
|
|
37
|
+
atomic
|
|
38
|
+
tzinfo (0.3.38)
|
|
18
39
|
|
|
19
40
|
PLATFORMS
|
|
20
41
|
ruby
|
|
21
42
|
|
|
22
43
|
DEPENDENCIES
|
|
23
44
|
autotest-standalone
|
|
45
|
+
byebug
|
|
24
46
|
latinverb!
|
data/README.markdown
CHANGED
|
@@ -14,7 +14,7 @@ and get back `amaretur`.
|
|
|
14
14
|
### HANDLING AMBIGUITY
|
|
15
15
|
|
|
16
16
|
LatinVerb also has tolerances for ambiguity. Where
|
|
17
|
-
|
|
17
|
+
`passive_voice_subjunctive_mood_imperfect_tense_third_person_singular_number`
|
|
18
18
|
is considered a "full" vector that uniquely identifies one value, it is
|
|
19
19
|
possible to pass "incomplete" vectors such as
|
|
20
20
|
`passive_voice_subjunctive_mood_imperfect_tense_third_person` which
|
data/Rakefile
CHANGED
data/latinverb.gemspec
CHANGED
|
@@ -20,7 +20,9 @@ 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.
|
|
24
|
-
s.
|
|
25
|
-
s.
|
|
23
|
+
s.add_runtime_dependency("macronconversions")
|
|
24
|
+
s.add_runtime_dependency("linguistics_latin")
|
|
25
|
+
s.add_runtime_dependency("rdoc")
|
|
26
|
+
s.add_runtime_dependency("rake")
|
|
27
|
+
s.add_runtime_dependency("activesupport")
|
|
26
28
|
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class ChartPresenter
|
|
6
|
+
def initialize(verb)
|
|
7
|
+
@verb = verb
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def chart
|
|
11
|
+
f="%9s%15s%15s%15s\n"
|
|
12
|
+
f_subjunctive="%9s%15s%15s%15s%15s\n"
|
|
13
|
+
c_prep "Present System", [
|
|
14
|
+
@verb.active_voice_indicative_mood_present_tense,
|
|
15
|
+
@verb.active_voice_indicative_mood_imperfect_tense,
|
|
16
|
+
@verb.active_voice_indicative_mood_future_tense
|
|
17
|
+
], %w/Present Imperfect Future/,f
|
|
18
|
+
puts "\n"
|
|
19
|
+
c_prep "Perfect System", [ @verb.active_voice_indicative_mood_perfect_tense,
|
|
20
|
+
@verb.active_voice_indicative_mood_pastperfect_tense,
|
|
21
|
+
@verb.active_voice_indicative_mood_futureperfect_tense
|
|
22
|
+
], %w/Perfect Past-Perfect Future-Perfect/,f
|
|
23
|
+
puts "\n"
|
|
24
|
+
c_prep "Passive Present System", [
|
|
25
|
+
@verb.passive_voice_indicative_mood_present_tense,
|
|
26
|
+
@verb.passive_voice_indicative_mood_imperfect_tense,
|
|
27
|
+
@verb.passive_voice_indicative_mood_future_tense
|
|
28
|
+
], %w/Present Imperfect Future/,f
|
|
29
|
+
puts "\n"
|
|
30
|
+
c_prep "Passive Perfect System", [ @verb.passive_voice_indicative_mood_perfect_tense,
|
|
31
|
+
@verb.passive_voice_indicative_mood_pastperfect_tense,
|
|
32
|
+
@verb.passive_voice_indicative_mood_futureperfect_tense
|
|
33
|
+
], %w/Perfect Past-Perfect Future-Perfect/,f
|
|
34
|
+
puts "\n"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
c_prep "Subjunctives", [ @verb.active_voice_subjunctive_mood_present_tense,
|
|
38
|
+
@verb.active_voice_subjunctive_mood_imperfect_tense,
|
|
39
|
+
@verb.active_voice_subjunctive_mood_perfect_tense,
|
|
40
|
+
@verb.active_voice_subjunctive_mood_pastperfect_tense
|
|
41
|
+
], %w/Present Imperfect Perfect Past-Perfect/,f_subjunctive
|
|
42
|
+
puts "\n"
|
|
43
|
+
c_prep "Passive Subjunctives", [ @verb.active_voice_subjunctive_mood_present_tense,
|
|
44
|
+
@verb.active_voice_subjunctive_mood_imperfect_tense,
|
|
45
|
+
@verb.active_voice_subjunctive_mood_perfect_tense,
|
|
46
|
+
@verb.active_voice_subjunctive_mood_pastperfect_tense
|
|
47
|
+
], %w/Present Imperfect Perfect Past-Perfect/,f_subjunctive
|
|
48
|
+
puts "\n"
|
|
49
|
+
puts "Participles"
|
|
50
|
+
@verb.methods.grep(/_participle$/).each do |p|
|
|
51
|
+
printf "%42s %42s\n", p.to_s.gsub('_', ' ').gsub(/\b\w/){$&.upcase}, @verb.send(p)
|
|
52
|
+
end
|
|
53
|
+
puts "\n"
|
|
54
|
+
puts "Infinitives"
|
|
55
|
+
@verb.methods.grep(/infinitive$/).each do |p|
|
|
56
|
+
printf "%42s %42s\n", (p.to_s.gsub('_', ' ').gsub(/\b\w/){$&.upcase}), @verb.send(p)
|
|
57
|
+
end
|
|
58
|
+
return nil
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
alias_method :c, :chart
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def c_prep(heading, rays, subtitles, format_string)
|
|
65
|
+
puts heading
|
|
66
|
+
puts '=' * heading.length + "\n"
|
|
67
|
+
printf format_string, '', *subtitles
|
|
68
|
+
underbars = subtitles.map{|j| j.gsub!( /./, '=' )}
|
|
69
|
+
printf format_string, '', *underbars
|
|
70
|
+
vertical_transform( rays ).each{|a| printf format_string, *a}
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def vertical_transform( opts = [] )
|
|
74
|
+
# Get the length of the first array to be verticalized
|
|
75
|
+
['1st Sg.', '2nd Sg.', '3rd Sg.','1st Pl.', '2nd Pl.', '3rd Pl.'].zip(*opts)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class DefectiveVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
Classification::Defective
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
Linguistics::Latin::Verb::DEFECTIVE_VERBS.member? first_pres
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class DeponentVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
return Classification::Deponent
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
infinitive =~ /ī$/ && first_pres =~ /r$/
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/latinverb/components/classifier/strategies/impersonal_verb_classification_strategy.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class ImpersonalVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
Classification::Impersonal
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
Linguistics::Latin::Verb::IMPERSONAL_VERBS.member?(input)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class IrregularVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
Classification::Irregular
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
Linguistics::Latin::Verb::IRREGULAR_VERBS.member? first_pres
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/latinverb/components/classifier/strategies/present_only_verb_classification_strategy.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'latinverb/components/present_only_checker'
|
|
2
|
+
|
|
3
|
+
module Linguistics
|
|
4
|
+
module Latin
|
|
5
|
+
module Verb
|
|
6
|
+
class LatinVerb
|
|
7
|
+
class LatinVerbClassifier
|
|
8
|
+
class PresentonlyVerbClassificationStrategy < VerbClassificationStrategy
|
|
9
|
+
def self.classification
|
|
10
|
+
Classification::PresentOnly
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def applicable?
|
|
14
|
+
PresentOnlyChecker.new(input).present_only?
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class RegularVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
Classification::Regular
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/latinverb/components/classifier/strategies/semideponent_verb_classification_strategy.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class SemideponentVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
def self.classification
|
|
8
|
+
Classification::Semideponent
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def applicable?
|
|
12
|
+
Linguistics::Latin::Verb::SEMI_DEPONENTS.keys.any?{ |k| first_pres=~/#{k}$/} && input !~ /PreventDeponentInfiniteRegress/
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class VerbClassificationStrategy
|
|
7
|
+
def initialize(classifier)
|
|
8
|
+
@classifier = classifier
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def first_pres
|
|
14
|
+
return "" unless input
|
|
15
|
+
input.split(/\s+/)[0]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def infinitive
|
|
19
|
+
return "" unless input
|
|
20
|
+
input.split(/\s+/)[1]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def input
|
|
24
|
+
@classifier.input || ''
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/latinverb/components/classifier/strategies/very_irregular_verb_classification_strategy.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class LatinVerbClassifier
|
|
6
|
+
class VeryIrregularVerbClassificationStrategy < VerbClassificationStrategy
|
|
7
|
+
# Very irregular irregulars, A&G206, e/f
|
|
8
|
+
def self.classification
|
|
9
|
+
Classification::Irregular
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def applicable?
|
|
13
|
+
input =~ %r'^(aiō|quaesō|ovāre)$'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require_relative 'classifier/strategies/verb_classification_strategy'
|
|
2
|
+
require_relative 'classifier/strategies/defective_verb_classification_strategy'
|
|
3
|
+
require_relative 'classifier/strategies/irregular_verb_classification_strategy'
|
|
4
|
+
require_relative 'classifier/strategies/semideponent_verb_classification_strategy'
|
|
5
|
+
require_relative 'classifier/strategies/impersonal_verb_classification_strategy'
|
|
6
|
+
require_relative 'classifier/strategies/very_irregular_verb_classification_strategy'
|
|
7
|
+
require_relative 'classifier/strategies/deponent_verb_classification_strategy'
|
|
8
|
+
require_relative 'classifier/strategies/present_only_verb_classification_strategy'
|
|
9
|
+
require_relative 'classifier/strategies/regular_verb_classification_strategy'
|
|
10
|
+
|
|
11
|
+
module Linguistics
|
|
12
|
+
module Latin
|
|
13
|
+
module Verb
|
|
14
|
+
class LatinVerb
|
|
15
|
+
class LatinVerbClassifier
|
|
16
|
+
attr_reader :classification, :input
|
|
17
|
+
|
|
18
|
+
def initialize(input, opts={})
|
|
19
|
+
@input = input
|
|
20
|
+
@strategies = opts[:strategies] || default_strategies
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def classification
|
|
24
|
+
applicable_strategy = @strategies.detect do |strategy|
|
|
25
|
+
strategy.new(self).applicable?
|
|
26
|
+
end
|
|
27
|
+
applicable_strategy.classification
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def present_only?
|
|
31
|
+
classification == Linguistics::Latin::Verb::Classification::PresentOnly
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def deponent?
|
|
35
|
+
classification == Linguistics::Latin::Verb::Classification::Deponent
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def semideponent?
|
|
39
|
+
classification == Linguistics::Latin::Verb::Classification::Semideponent
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def impersonal?
|
|
43
|
+
classification == Linguistics::Latin::Verb::Classification::Impersonal
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def irregular?
|
|
47
|
+
classification == Linguistics::Latin::Verb::Classification::Irregular
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def regular?
|
|
51
|
+
classification == Linguistics::Latin::Verb::Classification::Regular
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def short_class
|
|
55
|
+
classification.to_s.gsub(/.*::(\w+)$/,"\\1")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def default_strategies
|
|
61
|
+
[
|
|
62
|
+
DefectiveVerbClassificationStrategy,
|
|
63
|
+
IrregularVerbClassificationStrategy,
|
|
64
|
+
SemideponentVerbClassificationStrategy,
|
|
65
|
+
ImpersonalVerbClassificationStrategy,
|
|
66
|
+
VeryIrregularVerbClassificationStrategy,
|
|
67
|
+
PresentonlyVerbClassificationStrategy,
|
|
68
|
+
DeponentVerbClassificationStrategy,
|
|
69
|
+
RegularVerbClassificationStrategy
|
|
70
|
+
]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class ImperativesHandler
|
|
6
|
+
extend Forwardable
|
|
7
|
+
|
|
8
|
+
def_delegators :@verb, :stem, :present_active_infinitive
|
|
9
|
+
|
|
10
|
+
IMPERATIVE_EXCEPTIONS = {
|
|
11
|
+
"ducere" => %w(duc ducite),
|
|
12
|
+
"dicere" => %w(dic dicite),
|
|
13
|
+
"facere" => %w(fac facite),
|
|
14
|
+
"ferre" => %w(fer ferte),
|
|
15
|
+
"nolere" => %w(nolo nolite)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def initialize(verb)
|
|
19
|
+
@verb = verb
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def imperatives
|
|
23
|
+
args = exceptional_imperative? ? calculate_exceptional_imperatives : [stem, present_active_infinitive]
|
|
24
|
+
Linguistics::Latin::Verb::ImperativeBlock.new(*args, @verb)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def exceptional_imperative?
|
|
30
|
+
IMPERATIVE_EXCEPTIONS.has_key?(present_active_infinitive)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def calculate_exceptional_imperatives
|
|
34
|
+
IMPERATIVE_EXCEPTIONS[present_active_infinitive]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require_relative './passive_infinitive_factory'
|
|
2
|
+
|
|
3
|
+
module Linguistics
|
|
4
|
+
module Latin
|
|
5
|
+
module Verb
|
|
6
|
+
class LatinVerb
|
|
7
|
+
class Infinitivizer
|
|
8
|
+
extend Forwardable
|
|
9
|
+
|
|
10
|
+
def_delegators :@verb, :first_person_perfect, :future_active_participle, :verb_type, :present_active_infinitive, :perfect_passive_participle, :supine
|
|
11
|
+
|
|
12
|
+
def initialize(verb)
|
|
13
|
+
@verb = verb
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def infinitives
|
|
17
|
+
{
|
|
18
|
+
:present_active_infinitive => present_active_infinitive,
|
|
19
|
+
:perfect_active_infinitive => perfect_active_infinitive,
|
|
20
|
+
:future_active_infinitive => future_active_infinitive,
|
|
21
|
+
:present_passive_infinitive => present_passive_infinitive,
|
|
22
|
+
:perfect_passive_infinitive => perfect_passive_infinitive,
|
|
23
|
+
:future_passive_infinitive => future_passive_infinitive
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def perfect_active_infinitive
|
|
28
|
+
first_person_perfect + "sse"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def future_active_infinitive
|
|
32
|
+
future_active_participle.sub(/,.*/,'') + " esse"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def present_passive_infinitive
|
|
36
|
+
PassiveInfinitiveVactory.new(@verb).passive_infinitive
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def perfect_passive_infinitive
|
|
40
|
+
perfect_passive_participle + " esse"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def future_passive_infinitive
|
|
44
|
+
supine[:accusative] + " īrī"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class Participler
|
|
6
|
+
include Linguistics::Latin::Phonographia
|
|
7
|
+
extend Forwardable
|
|
8
|
+
|
|
9
|
+
def_delegators :@verb, :passive_perfect_participle, :participial_stem
|
|
10
|
+
|
|
11
|
+
def initialize(verb)
|
|
12
|
+
@verb = verb
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def present_active_participle
|
|
16
|
+
raise "Participial stem was nil" if participial_stem.nil?
|
|
17
|
+
endings = %w(ns ntis)
|
|
18
|
+
endings.collect{ |x| fix_macrons(participial_stem + x.chomp) }.join(', ')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def future_active_participle
|
|
22
|
+
mybase = passive_perfect_participle.gsub(/u[sm]$/, "ūr")
|
|
23
|
+
singular_endings = %w(us a um)
|
|
24
|
+
singular_endings.collect{ |x| mybase + "#{x}".chomp }.join(', ')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def perfect_passive_participle
|
|
28
|
+
mybase = passive_perfect_participle.sub(/u[sm]$/,'')
|
|
29
|
+
singular_endings=%w(us a um)
|
|
30
|
+
singular_endings.collect{ |x| mybase + "#{x}".chomp }.join(', ')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def future_passive_participle
|
|
34
|
+
mybase = participial_stem + "nd"
|
|
35
|
+
singular_endings = %w(us a um)
|
|
36
|
+
singular_endings.collect{ |x| fix_macrons(mybase + "#{x}".chomp) }.join(', ')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def gerundive
|
|
40
|
+
@verb.future_passive_participle
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def gerund
|
|
44
|
+
b = gerundive.sub( /.*\s+(.*)um.*$/, "\\1" )
|
|
45
|
+
b += "ī, ō, etc."
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def supine
|
|
49
|
+
acc = passive_perfect_participle
|
|
50
|
+
abl = acc.sub( /^(.*)um$/, "\\1" )
|
|
51
|
+
abl += "ū"
|
|
52
|
+
{:ablative => abl, :accusative => acc}
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class Infinitivizer
|
|
6
|
+
class PassiveInfinitiveVactory
|
|
7
|
+
extend Forwardable
|
|
8
|
+
def_delegators :@verb, :present_active_infinitive, :verb_type
|
|
9
|
+
|
|
10
|
+
MAPPING = {
|
|
11
|
+
First: [/(.*)e$/,"\\1ī"],
|
|
12
|
+
Second: [/(.*)e$/,"\\1ī"],
|
|
13
|
+
ThirdIO: [/(.*)ere$/,"\\1ī"],
|
|
14
|
+
Third: [/(.*)ere$/,"\\1ī"],
|
|
15
|
+
Fourth: [/(.*)e$/,"\\1ī"],
|
|
16
|
+
Irregular: [/(.*)/,"\\1"]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def initialize(verb)
|
|
21
|
+
@verb = verb
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def passive_infinitive
|
|
25
|
+
present_active_infinitive.gsub(*mutation_for_type)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def mutation_for_type
|
|
31
|
+
MAPPING[type_key]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def type_key
|
|
35
|
+
verb_type.ordinal_name_key
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Linguistics
|
|
2
|
+
module Latin
|
|
3
|
+
module Verb
|
|
4
|
+
class LatinVerb
|
|
5
|
+
class PresentOnlyChecker
|
|
6
|
+
def initialize(original_string)
|
|
7
|
+
@original_string = original_string
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def present_only?
|
|
11
|
+
listed_as_present_only?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def listed_as_present_only?
|
|
17
|
+
Linguistics::Latin::Verb::PRESENT_ONLY.member?( first_person_present_tense ) ||
|
|
18
|
+
Linguistics::Latin::Verb::PRESENT_ONLY.member?( present_active_infinitive )
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def first_person_present_tense
|
|
22
|
+
@original_string.split(/\s+/)[0]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def present_active_infinitive
|
|
26
|
+
@original_string.split(/\s+/)[1]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|