latinverb 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|