llt-form_builder 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +3 -0
- data/.travis.yml +4 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +8 -0
- data/lib/llt/form/adjective.rb +19 -0
- data/lib/llt/form/adverb.rb +13 -0
- data/lib/llt/form/cardinal.rb +31 -0
- data/lib/llt/form/conjunction.rb +7 -0
- data/lib/llt/form/declinable.rb +23 -0
- data/lib/llt/form/demonstrative_pronoun.rb +7 -0
- data/lib/llt/form/ethnic.rb +6 -0
- data/lib/llt/form/fp.rb +6 -0
- data/lib/llt/form/gerund.rb +9 -0
- data/lib/llt/form/gerundive.rb +12 -0
- data/lib/llt/form/indefinite_pronoun.rb +7 -0
- data/lib/llt/form/infinitive.rb +13 -0
- data/lib/llt/form/interrogative_pronoun.rb +7 -0
- data/lib/llt/form/noun.rb +17 -0
- data/lib/llt/form/participle.rb +9 -0
- data/lib/llt/form/personal_pronoun.rb +13 -0
- data/lib/llt/form/ppa.rb +6 -0
- data/lib/llt/form/ppp.rb +6 -0
- data/lib/llt/form/preposition.rb +32 -0
- data/lib/llt/form/pronoun.rb +17 -0
- data/lib/llt/form/relative_pronoun.rb +7 -0
- data/lib/llt/form/subjunction.rb +7 -0
- data/lib/llt/form/supinum.rb +6 -0
- data/lib/llt/form/uninflectable.rb +22 -0
- data/lib/llt/form/verb.rb +28 -0
- data/lib/llt/form/verbal_noun.rb +18 -0
- data/lib/llt/form.rb +80 -0
- data/lib/llt/form_builder/adjective_builder.rb +86 -0
- data/lib/llt/form_builder/adverb_builder.rb +25 -0
- data/lib/llt/form_builder/declinable_builder.rb +164 -0
- data/lib/llt/form_builder/ethnic_builder.rb +17 -0
- data/lib/llt/form_builder/fp_builder.rb +13 -0
- data/lib/llt/form_builder/gerund_builder.rb +37 -0
- data/lib/llt/form_builder/gerundive_builder.rb +24 -0
- data/lib/llt/form_builder/helpers/adjective_like_building.rb +29 -0
- data/lib/llt/form_builder/helpers/pronoun_segments.rb +226 -0
- data/lib/llt/form_builder/helpers/stem_hash_parser.rb +263 -0
- data/lib/llt/form_builder/helpers/verb_segments.rb +562 -0
- data/lib/llt/form_builder/infinitivum_builder.rb +19 -0
- data/lib/llt/form_builder/irregular_gerund_builder.rb +7 -0
- data/lib/llt/form_builder/irregular_gerundive_builder.rb +7 -0
- data/lib/llt/form_builder/irregular_ppa_builder.rb +7 -0
- data/lib/llt/form_builder/irregular_praesens_builder.rb +5 -0
- data/lib/llt/form_builder/irregular_praesens_infinitivum_builder.rb +5 -0
- data/lib/llt/form_builder/noun_builder.rb +24 -0
- data/lib/llt/form_builder/perfectum_builder.rb +14 -0
- data/lib/llt/form_builder/perfectum_infinitivum_builder.rb +7 -0
- data/lib/llt/form_builder/personal_pronoun_builder.rb +107 -0
- data/lib/llt/form_builder/ppa_builder.rb +20 -0
- data/lib/llt/form_builder/ppp_builder.rb +10 -0
- data/lib/llt/form_builder/praesens_builder.rb +41 -0
- data/lib/llt/form_builder/praesens_infinitivum_builder.rb +9 -0
- data/lib/llt/form_builder/pronoun_builder.rb +106 -0
- data/lib/llt/form_builder/supinum_builder.rb +23 -0
- data/lib/llt/form_builder/verb_builder.rb +37 -0
- data/lib/llt/form_builder/version.rb +5 -0
- data/lib/llt/form_builder.rb +370 -0
- data/lib/llt/stem/adjective_pack.rb +122 -0
- data/lib/llt/stem/adjective_stem.rb +23 -0
- data/lib/llt/stem/ethnic_stem.rb +9 -0
- data/lib/llt/stem/noun_pack.rb +14 -0
- data/lib/llt/stem/noun_stem.rb +26 -0
- data/lib/llt/stem/pack.rb +46 -0
- data/lib/llt/stem/verb_pack.rb +53 -0
- data/lib/llt/stem/verb_stem.rb +18 -0
- data/lib/llt/stem.rb +145 -0
- data/lib/llt/stem_builder.rb +53 -0
- data/llt-form_builder.gemspec +30 -0
- data/spec/lib/llt/form/adjective_spec.rb +10 -0
- data/spec/lib/llt/form/adverb_spec.rb +17 -0
- data/spec/lib/llt/form/conjunction_spec.rb +23 -0
- data/spec/lib/llt/form/demonstrative_pronoun_spec.rb +14 -0
- data/spec/lib/llt/form/fp_spec.rb +12 -0
- data/spec/lib/llt/form/functions_spec.rb +13 -0
- data/spec/lib/llt/form/gerund_spec.rb +10 -0
- data/spec/lib/llt/form/gerundive_spec.rb +13 -0
- data/spec/lib/llt/form/noun_spec.rb +18 -0
- data/spec/lib/llt/form/ppa_spec.rb +12 -0
- data/spec/lib/llt/form/ppp_spec.rb +12 -0
- data/spec/lib/llt/form/preposition_spec.rb +43 -0
- data/spec/lib/llt/form/supinum_spec.rb +9 -0
- data/spec/lib/llt/form/verb_spec.rb +14 -0
- data/spec/lib/llt/form_builder/adjective_builder_spec.rb +182 -0
- data/spec/lib/llt/form_builder/adverb_builder_spec.rb +27 -0
- data/spec/lib/llt/form_builder/ethnic_builder_spec.rb +17 -0
- data/spec/lib/llt/form_builder/form_builder_spec.rb +16 -0
- data/spec/lib/llt/form_builder/fp_builder_spec.rb +42 -0
- data/spec/lib/llt/form_builder/gerund_builder_spec.rb +80 -0
- data/spec/lib/llt/form_builder/gerundive_builder_spec.rb +102 -0
- data/spec/lib/llt/form_builder/helpers/stem_hash_parser_spec.rb +197 -0
- data/spec/lib/llt/form_builder/irregular_gerund_builder_spec.rb +22 -0
- data/spec/lib/llt/form_builder/irregular_gerundive_builder_spec.rb +21 -0
- data/spec/lib/llt/form_builder/irregular_praesens_builder_spec.rb +14 -0
- data/spec/lib/llt/form_builder/irregular_praesens_infinitivum_builder_spec.rb +32 -0
- data/spec/lib/llt/form_builder/noun_builder_spec.rb +245 -0
- data/spec/lib/llt/form_builder/personal_pronoun_builder_spec.rb +49 -0
- data/spec/lib/llt/form_builder/ppa_builder_spec.rb +137 -0
- data/spec/lib/llt/form_builder/ppp_builder_spec.rb +45 -0
- data/spec/lib/llt/form_builder/pronoun_builder_spec.rb +203 -0
- data/spec/lib/llt/form_builder/supinum_builder_spec.rb +24 -0
- data/spec/lib/llt/form_builder/verb_builder_spec.rb +557 -0
- data/spec/lib/llt/form_spec.rb +27 -0
- data/spec/lib/llt/stem/adjective_pack_spec.rb +78 -0
- data/spec/lib/llt/stem/adjective_stem_spec.rb +15 -0
- data/spec/lib/llt/stem/noun_pack_spec.rb +20 -0
- data/spec/lib/llt/stem/noun_stem_spec.rb +14 -0
- data/spec/lib/llt/stem/verb_pack_spec.rb +56 -0
- data/spec/lib/llt/stem_builder_spec.rb +20 -0
- data/spec/spec_helper.rb +21 -0
- metadata +330 -0
data/lib/llt/stem.rb
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'llt/helpers'
|
2
|
+
|
3
|
+
module LLT
|
4
|
+
class Stem
|
5
|
+
include Helpers::Initialize
|
6
|
+
include Helpers::Transformer
|
7
|
+
include Helpers::Normalizer
|
8
|
+
|
9
|
+
files = %w{ noun_stem verb_stem adjective_stem ethnic_stem
|
10
|
+
pack noun_pack verb_pack adjective_pack }
|
11
|
+
files.each do |file|
|
12
|
+
require "llt/stem/#{file}"
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :type, :stem
|
16
|
+
|
17
|
+
def initialize(type, args)
|
18
|
+
@type = t.send(type, :full)
|
19
|
+
extract_normalized_args!(args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
#class Stem
|
24
|
+
# attr_reader :stem, :metrical, :detailed_type
|
25
|
+
#
|
26
|
+
# include LLT::Helpers::Initialize
|
27
|
+
# include LLT::Helpers::Transformer
|
28
|
+
#
|
29
|
+
# # this should hold inflection type info as well
|
30
|
+
# # subclass for type
|
31
|
+
#
|
32
|
+
# def initialize(type, stem, metrical = nil, args)
|
33
|
+
# @type = type
|
34
|
+
# @stem = stem
|
35
|
+
# @metrical = metrical
|
36
|
+
# extract_args!(args)
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# def init_keys
|
40
|
+
# %i{ special_info }
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# def unicode
|
44
|
+
# @stem
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# def to_s
|
48
|
+
# "#{type_info}:\t#{stem} (#{@metrical})\t#{@special_info}"
|
49
|
+
# end
|
50
|
+
# alias :inspect :to_s
|
51
|
+
#
|
52
|
+
# def type_info
|
53
|
+
# shortened_type
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# def shortened_type
|
57
|
+
# case @type
|
58
|
+
# when :adverb then :adv
|
59
|
+
# when :conjunction then :conj
|
60
|
+
# else @type
|
61
|
+
# end
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# def type
|
65
|
+
# @type ||= self.class.name.chomp("Stem").downcase.to_sym
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# def inflectable_class_type
|
69
|
+
# @inflectable_class
|
70
|
+
# end
|
71
|
+
#end
|
72
|
+
#
|
73
|
+
#class ComplexStem < Stem
|
74
|
+
# def init_keys
|
75
|
+
# super + %i{ inflectable_class }
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# def type_info
|
79
|
+
# "#{super} #{inflectable_class_type} #{additional_stem_info}"
|
80
|
+
# end
|
81
|
+
#end
|
82
|
+
#
|
83
|
+
#class VerbStem < ComplexStem
|
84
|
+
# # what happens when a lemma has two different stems? it infl class right, even for perfstems?
|
85
|
+
# def init_keys
|
86
|
+
# super + %i{ tense deponens }
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# def additional_stem_info
|
90
|
+
# @tense
|
91
|
+
# end
|
92
|
+
#
|
93
|
+
# def type_info
|
94
|
+
# super + (@deponens ? " #{dep_status}" : "")
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# def dep_status
|
98
|
+
# "dep".green if @deponens
|
99
|
+
# end
|
100
|
+
#end
|
101
|
+
#
|
102
|
+
##class NounStem < ComplexStem
|
103
|
+
## def init_keys
|
104
|
+
## super + %i{ sexus } # nominative?
|
105
|
+
## end
|
106
|
+
##
|
107
|
+
## def additional_stem_info
|
108
|
+
## @sexus
|
109
|
+
## end
|
110
|
+
##
|
111
|
+
## def inflectable_class_type
|
112
|
+
## case @inflectable_class
|
113
|
+
## when 1 then "A"
|
114
|
+
## when 2 then "O"
|
115
|
+
## when 3 then "C"
|
116
|
+
## when 31 then
|
117
|
+
## when 32 then
|
118
|
+
## when 33 then
|
119
|
+
## when 4 then "U"
|
120
|
+
## when 5 then "E"
|
121
|
+
## end
|
122
|
+
## end
|
123
|
+
##end
|
124
|
+
#
|
125
|
+
#class AdjectiveStem < ComplexStem
|
126
|
+
# def init_keys
|
127
|
+
# super + %i{ number_of_endings }
|
128
|
+
# end
|
129
|
+
#
|
130
|
+
# def additional_stem_info
|
131
|
+
# @number_of_endings
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
# def shortened_type
|
135
|
+
# :adj
|
136
|
+
# end
|
137
|
+
#
|
138
|
+
# def inflectable_class_type
|
139
|
+
# case @inflectable_class
|
140
|
+
# when 1 then "A/O"
|
141
|
+
# when 3 then "Third"
|
142
|
+
# when 5 then "Pronominal"
|
143
|
+
# end
|
144
|
+
# end
|
145
|
+
#end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'llt/stem'
|
2
|
+
require 'llt/helpers/constantize'
|
3
|
+
|
4
|
+
module LLT
|
5
|
+
class StemBuilder
|
6
|
+
extend Helpers::Constantize
|
7
|
+
|
8
|
+
def self.build(type, args, source)
|
9
|
+
type = parse_type_and_extend_args(type, args)
|
10
|
+
pre = complex_stems.include?(type) ? type : ""
|
11
|
+
cl = constant_by_type(:pack, prefix: pre, namespace: LLT::Stem)
|
12
|
+
cl.new(type, args, source)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.complex_stems
|
18
|
+
%i{ noun adjective verb }
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.parse_type_and_extend_args(type, args)
|
22
|
+
if type == :persona || type == :place
|
23
|
+
add_to_args(type, args)
|
24
|
+
:noun
|
25
|
+
else
|
26
|
+
type
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.add_to_args(type, args)
|
31
|
+
args[type] = true
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.pack_factory(args)
|
35
|
+
build(:verb, args, 'llt')
|
36
|
+
end
|
37
|
+
|
38
|
+
# TODO 02.10.13 16:07 by LFDM
|
39
|
+
# Fill in the string values of the various stems
|
40
|
+
|
41
|
+
# edo deliberately left out atm...
|
42
|
+
IRREGULAR_STEMS = {
|
43
|
+
esse: pack_factory(pr: "e/s/es/er", pf: "fu", inflection_class: :esse),
|
44
|
+
posse: pack_factory(pr: "pos/pot", pf: "potu", inflection_class: :posse),
|
45
|
+
ferre: pack_factory(pr: "fer", pf: "tul", ppp: "lat", inflection_class: :ferre),
|
46
|
+
fieri: pack_factory(pr: "fi", inflection_class: :fieri),
|
47
|
+
ire: pack_factory(pr: "", pf: "", ppp: "", inflection_class: :ire),
|
48
|
+
velle: pack_factory(pr: "", pf: "volu", inflection_class: :velle),
|
49
|
+
nolle: pack_factory(pr: "", pf: "nolu", inflection_class: :nolle),
|
50
|
+
malle: pack_factory(pr: "", pf: "malu", inflection_class: :malle),
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'llt/form_builder/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "llt-form_builder"
|
8
|
+
spec.version = LLT::FormBuilder::VERSION
|
9
|
+
spec.authors = ["LFDM", "lichtr"]
|
10
|
+
spec.email = ["1986gh@gmail.com", "robert.lichtensteiner@gmail.com"]
|
11
|
+
spec.description = %q{Builds valid Latin forms of given stems}
|
12
|
+
spec.summary = %q{#{spec.description}}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "simplecov", "~> 0.7"
|
25
|
+
spec.add_development_dependency "blunt_stub_factory"
|
26
|
+
spec.add_development_dependency "yard"
|
27
|
+
spec.add_dependency "llt-constants"
|
28
|
+
spec.add_dependency "llt-core_extensions"
|
29
|
+
spec.add_dependency "llt-helpers"
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Adverb do
|
4
|
+
describe "#string" do
|
5
|
+
it "returns the string value" do
|
6
|
+
adv = LLT::Form::Adverb.new(string: 'semper')
|
7
|
+
adv.string.should == 'semper'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#stem" do
|
12
|
+
it "is an alias for string" do
|
13
|
+
adv = LLT::Form::Adverb.new(string: 'semper')
|
14
|
+
adv.stem.should == 'semper'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Conjunction do
|
4
|
+
let(:conj) { LLT::Form::Conjunction.new(string: 'et') }
|
5
|
+
|
6
|
+
describe "#string" do
|
7
|
+
it "returns the string value" do
|
8
|
+
conj.string.should == 'et'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#stem" do
|
13
|
+
it "is an alias to string" do
|
14
|
+
conj.stem.should == 'et'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#lemma" do
|
19
|
+
it "is another alias for string" do
|
20
|
+
conj.lemma.should == 'et'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::DemonstrativePronoun do
|
4
|
+
let(:dem_pron) { LLT::Form::DemonstrativePronoun.new({}) }
|
5
|
+
|
6
|
+
it "has function demonstrative_pronoun" do
|
7
|
+
dem_pron.has_f?(:demonstrative_pronoun).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "includes its inflection_class in its functions" do
|
11
|
+
dem_pron.instance_variable_set('@inflection_class', :hic)
|
12
|
+
dem_pron.has_f?(:hic).should be_true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Fp do
|
4
|
+
let(:fp) { LLT::Form::Fp.new({}) }
|
5
|
+
|
6
|
+
it "has functions fp, substantive, adjective and participle" do
|
7
|
+
fp.has_f?(:fp).should be_true
|
8
|
+
fp.has_f?(:substantive).should be_true
|
9
|
+
fp.has_f?(:adjective).should be_true
|
10
|
+
fp.has_f?(:participle).should be_true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Verb do
|
4
|
+
describe "#init_function" do
|
5
|
+
it "returns the correct initial functions of a verb" do
|
6
|
+
pending
|
7
|
+
options = { ending: "i" }
|
8
|
+
args = [{type: :perfectum, stem: "amav", inflection_class: 1, options: options}]
|
9
|
+
verb = LLT::FormBuilder.build(*args).first
|
10
|
+
verb.init_function.should == [:verb]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Gerundive do
|
4
|
+
let(:gerundive) { LLT::Form::Gerundive.new({}) }
|
5
|
+
|
6
|
+
it "has function gerundive" do
|
7
|
+
gerundive.has_f?(:gerundive).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "has function substantive - to play the role of a dominant participle" do
|
11
|
+
gerundive.has_f?(:substantive).should be_true
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Noun do
|
4
|
+
let(:noun) { LLT::Form::Noun.new({}) }
|
5
|
+
|
6
|
+
it "has functions noun and substantive" do
|
7
|
+
noun.has_f?(:noun).should be_true
|
8
|
+
noun.has_f?(:substantive).should be_true
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#stems=" do
|
12
|
+
it "sets a noun's stems" do
|
13
|
+
dummy = double
|
14
|
+
noun.stems = dummy
|
15
|
+
noun.stems.should == dummy
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Ppa do
|
4
|
+
let(:ppa) { LLT::Form::Ppa.new({}) }
|
5
|
+
|
6
|
+
it "has functions ppa, substantive, adjective and participle" do
|
7
|
+
ppa.has_f?(:ppa).should be_true
|
8
|
+
ppa.has_f?(:substantive).should be_true
|
9
|
+
ppa.has_f?(:adjective).should be_true
|
10
|
+
ppa.has_f?(:participle).should be_true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Ppp do
|
4
|
+
let(:ppp) { LLT::Form::Ppp.new({}) }
|
5
|
+
|
6
|
+
it "has functions ppp, substantive, adjective and participle" do
|
7
|
+
ppp.has_f?(:ppp).should be_true
|
8
|
+
ppp.has_f?(:substantive).should be_true
|
9
|
+
ppp.has_f?(:adjective).should be_true
|
10
|
+
ppp.has_f?(:participle).should be_true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Preposition do
|
4
|
+
describe "#takes_4th?" do
|
5
|
+
it "returns true if an acc is taken" do
|
6
|
+
args = { string: 'super', takes_4th: true, takes_6th: false }
|
7
|
+
prep = LLT::Form::Preposition.new(args)
|
8
|
+
prep.takes_4th?.should be_true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#takes_6th?" do
|
13
|
+
it "returns true if an abl is taken" do
|
14
|
+
args = { string: 'ex', takes_4th: false, takes_6th: true }
|
15
|
+
prep = LLT::Form::Preposition.new(args)
|
16
|
+
prep.takes_6th?.should be_true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#string" do
|
21
|
+
it "returns the string value" do
|
22
|
+
args = { string: 'ex', takes_4th: false, takes_6th: true }
|
23
|
+
prep = LLT::Form::Preposition.new(args)
|
24
|
+
prep.string.should == 'ex'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#stem" do
|
29
|
+
it "is an alias for string" do
|
30
|
+
args = { string: 'ex', takes_4th: false, takes_6th: true }
|
31
|
+
prep = LLT::Form::Preposition.new(args)
|
32
|
+
prep.stem.should == 'ex'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#lemma" do
|
37
|
+
it "is another alias for string" do
|
38
|
+
args = { string: 'ex', takes_4th: false, takes_6th: true }
|
39
|
+
prep = LLT::Form::Preposition.new(args)
|
40
|
+
prep.lemma.should == 'ex'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::Form::Verb do
|
4
|
+
let(:verb) { LLT::Form::Verb.new({}) }
|
5
|
+
|
6
|
+
it "has function verb" do
|
7
|
+
verb.has_f?(:verb)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "has a function named after its conjugation with irregular verbs" do
|
11
|
+
verb.instance_variable_set('@inflection_class', :esse)
|
12
|
+
verb.has_f?(:esse).should be_true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::FormBuilder do
|
4
|
+
include LLT::Helpers::Normalizer
|
5
|
+
|
6
|
+
describe ".build" do
|
7
|
+
def form_builder_strings(args)
|
8
|
+
forms = LLT::FormBuilder.build(*args)
|
9
|
+
forms.map(&:to_s)
|
10
|
+
end
|
11
|
+
|
12
|
+
def with_adjective(options)
|
13
|
+
args = [{type: :adjective, nominative: "atrox", stem: "atroc", inflection_class: 3,
|
14
|
+
number_of_endings: 1, comparatio: :positivus, options: options}]
|
15
|
+
LLT::FormBuilder.build(*args)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with adjectives" do
|
19
|
+
context "without options" do
|
20
|
+
it "builds all forms of A/O" do
|
21
|
+
args = [{type: :adjective, stem: "amic", inflection_class: 1, number_of_endings: 3, comparatio: :positivus}]
|
22
|
+
form_builder_strings(args).should == %w{amicus amici amico amicum amice amico amici amicorum amicis amicos amici amicis
|
23
|
+
amica amicae amicae amicam amica amica amicae amicarum amicis amicas amicae amicis
|
24
|
+
amicum amici amico amicum amicum amico amica amicorum amicis amica amica amicis
|
25
|
+
amice}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "gets casus, numerus and sexus right" do
|
29
|
+
args = [{type: :adjective, stem: "amic", inflection_class: 1, number_of_endings: 3, comparatio: :positivus}]
|
30
|
+
forms = LLT::FormBuilder.build(*args)
|
31
|
+
amicus = forms[ 0]
|
32
|
+
amico = forms[ 5]
|
33
|
+
amicam = forms[15]
|
34
|
+
amica_n = forms[30]
|
35
|
+
|
36
|
+
amicus.casus.should == 1
|
37
|
+
amicus.numerus.should == 1
|
38
|
+
amicus.sexus.should == :m
|
39
|
+
|
40
|
+
amico.casus.should == 6
|
41
|
+
amico.numerus.should == 1
|
42
|
+
amico.sexus.should == :m
|
43
|
+
|
44
|
+
amicam.casus.should == 4
|
45
|
+
amicam.numerus.should == 1
|
46
|
+
amicam.sexus.should == :f
|
47
|
+
|
48
|
+
amica_n.casus.should == 1
|
49
|
+
amica_n.numerus.should == 2
|
50
|
+
amica_n.sexus.should == :n
|
51
|
+
end
|
52
|
+
|
53
|
+
it "builds all forms of A/O like pulcher" do
|
54
|
+
args = [{type: :adjective, nominative: "pulcher", stem: "pulchr", inflection_class: 1, number_of_endings: 3, comparatio: :positivus}]
|
55
|
+
form_builder_strings(args).should ==%w{pulcher pulchri pulchro pulchrum pulcher pulchro pulchri pulchrorum pulchris pulchros pulchri pulchris
|
56
|
+
pulchra pulchrae pulchrae pulchram pulchra pulchra pulchrae pulchrarum pulchris pulchras pulchrae pulchris
|
57
|
+
pulchrum pulchri pulchro pulchrum pulchrum pulchro pulchra pulchrorum pulchris pulchra pulchra pulchris
|
58
|
+
pulchre}
|
59
|
+
end
|
60
|
+
|
61
|
+
it "builds all forms of Third with 1 endings" do
|
62
|
+
args = [{type: :adjective, nominative: "atrox", stem: "atroc", inflection_class: 3, number_of_endings: 1, comparatio: :positivus}]
|
63
|
+
form_builder_strings(args).should == %w{atrox atrocis atroci atrocem atrox atroci atroces atrocium atrocibus atroces atroces atrocibus
|
64
|
+
atrox atrocis atroci atrocem atrox atroci atroces atrocium atrocibus atroces atroces atrocibus
|
65
|
+
atrox atrocis atroci atrox atrox atroci atrocia atrocium atrocibus atrocia atrocia atrocibus
|
66
|
+
atrociter}
|
67
|
+
end
|
68
|
+
|
69
|
+
it "builds all forms of Third with 2 endings" do
|
70
|
+
args = [{type: :adjective, nominative: "facilis", stem: "facil", inflection_class: 3, number_of_endings: 2, comparatio: :positivus}]
|
71
|
+
form_builder_strings(args).should == %w{facilis facilis facili facilem facilis facili faciles facilium facilibus faciles faciles facilibus
|
72
|
+
facilis facilis facili facilem facilis facili faciles facilium facilibus faciles faciles facilibus
|
73
|
+
facile facilis facili facile facile facili facilia facilium facilibus facilia facilia facilibus
|
74
|
+
facile}
|
75
|
+
end
|
76
|
+
|
77
|
+
it "builds all forms of Third with 3 endings" do
|
78
|
+
args = [{type: :adjective, nominative: "celer", stem: "celer", inflection_class: 3, number_of_endings: 3, comparatio: :positivus}]
|
79
|
+
form_builder_strings(args).should == %w{celer celeris celeri celerem celer celeri celeres celerium celeribus celeres celeres celeribus
|
80
|
+
celeris celeris celeri celerem celeris celeri celeres celerium celeribus celeres celeres celeribus
|
81
|
+
celere celeris celeri celere celere celeri celeria celerium celeribus celeria celeria celeribus
|
82
|
+
celeriter}
|
83
|
+
end
|
84
|
+
|
85
|
+
it "builds all forms of Pronominal" do
|
86
|
+
args = [{type: :adjective, nominative: "totus", stem: "tot", inflection_class: 5, number_of_endings: 3, comparatio: :positivus}]
|
87
|
+
form_builder_strings(args).should == %w{totus totius toti totum tote toto toti totorum totis totos toti totis
|
88
|
+
tota totius toti totam tota tota totae totarum totis totas totae totis
|
89
|
+
totum totius toti totum totum toto tota totorum totis tota tota totis
|
90
|
+
tote} # is tote even a form?
|
91
|
+
end
|
92
|
+
|
93
|
+
it "builds all forms of comparativus stems" do
|
94
|
+
args = [{type: :adjective, stem: "altior", inflection_class: 1, number_of_endings: 3, comparatio: :comparativus}]
|
95
|
+
form_builder_strings(args).should == %w{altior altioris altiori altiorem altior altiore altiores altiorum altioribus altiores altiores altioribus
|
96
|
+
altior altioris altiori altiorem altior altiore altiores altiorum altioribus altiores altiores altioribus
|
97
|
+
altius altioris altiori altius altius altiore altiora altiorum altioribus altiora altiora altioribus
|
98
|
+
altius}
|
99
|
+
end
|
100
|
+
|
101
|
+
it "knows the comparison sign for comparatives" do
|
102
|
+
args = [{type: :adjective, stem: "altior", inflection_class: 1, number_of_endings: 3, comparatio: :comparativus}]
|
103
|
+
forms = LLT::FormBuilder.build(*args)
|
104
|
+
altioris = forms[1]
|
105
|
+
altioris.comparison_sign.should == "ior"
|
106
|
+
end
|
107
|
+
|
108
|
+
it "buids all forms of superlativus stems" do
|
109
|
+
args = [{type: :adjective, stem: "altissim", inflection_class: 1, number_of_endings: 3, comparatio: :superlativus}]
|
110
|
+
form_builder_strings(args).should == %w{altissimus altissimi altissimo altissimum altissime altissimo altissimi altissimorum altissimis altissimos altissimi altissimis
|
111
|
+
altissima altissimae altissimae altissimam altissima altissima altissimae altissimarum altissimis altissimas altissimae altissimis
|
112
|
+
altissimum altissimi altissimo altissimum altissimum altissimo altissima altissimorum altissimis altissima altissima altissimis
|
113
|
+
altissime}
|
114
|
+
end
|
115
|
+
|
116
|
+
it "knows the comparison sign for superlatives" do
|
117
|
+
args = [{type: :adjective, stem: "altissim", inflection_class: 1, number_of_endings: 3, comparatio: :superlativus}]
|
118
|
+
forms = LLT::FormBuilder.build(*args)
|
119
|
+
altissimi = forms[1]
|
120
|
+
altissimi.comparison_sign.should == "issim"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "handles metrical stems" do
|
124
|
+
args = [{type: :adjective, stem: "altīssīm", inflection_class: 1, number_of_endings: 3, comparatio: :superlativus}]
|
125
|
+
forms = LLT::FormBuilder.build(*args)
|
126
|
+
altissimi = forms[1]
|
127
|
+
altissimi.comparison_sign.should == "īssīm"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context "with options that select a specfic form given in a stem" do
|
132
|
+
it "returns only forms specified in options" do
|
133
|
+
options = { sexus: :f }
|
134
|
+
res = with_adjective(options)
|
135
|
+
res.should have(12).items
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context "with options that indicate the word's components" do
|
140
|
+
it "builds correct forms only (several possibilities)" do
|
141
|
+
res = with_adjective(ending: "is")
|
142
|
+
res2 = with_adjective(ending: "ibus")
|
143
|
+
res .should have(3).items
|
144
|
+
res2.should have(6).items
|
145
|
+
end
|
146
|
+
|
147
|
+
it "builds correct forms only with nominative" do
|
148
|
+
res = with_adjective(ending: "")
|
149
|
+
res.should have(7).items
|
150
|
+
end
|
151
|
+
|
152
|
+
it "doesn't build incorrect forms" do
|
153
|
+
res = with_adjective(ending: "orum")
|
154
|
+
res.should be_empty
|
155
|
+
end
|
156
|
+
|
157
|
+
it "builds correct forms of improviso" do
|
158
|
+
opts = { ending: "o", validate: true }
|
159
|
+
args = {type: :adjective, stem: "improvis", nom: "improvisus", inflection_class: 1, noe: 3, comparatio: :positivus, options: opts}
|
160
|
+
LLT::FormBuilder.build(args).should have(4).item
|
161
|
+
end
|
162
|
+
|
163
|
+
it "builds correct forms of noster" do
|
164
|
+
opts = { ending: "", validate: true }
|
165
|
+
args = { type: :adjective, stem: "nostr", nom: "noster", inflection_class: 1, noe: 3, comparatio: :positivus, options: opts}
|
166
|
+
forms = LLT::FormBuilder.build(args)
|
167
|
+
forms.should have(2).items
|
168
|
+
nom, voc = forms
|
169
|
+
nom.casus.should == 1
|
170
|
+
voc.casus.should == 5
|
171
|
+
end
|
172
|
+
|
173
|
+
it "builds correct forms of laete (vocative and adverb)" do
|
174
|
+
opts = { ending: "e", validate: true }
|
175
|
+
args = { type: :adjective, nom: "laetus", stem: "laet", inflection_class: 1, number_of_endings: 3, options: opts }
|
176
|
+
forms = LLT::FormBuilder.build(args)
|
177
|
+
forms.should have(2).items
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LLT::FormBuilder do
|
4
|
+
describe ".build" do
|
5
|
+
it "builds the correct adverb form - positivus" do
|
6
|
+
args = { type: :adverb, comparatio: :positivus, stem: "alt", inflection_class: 1 }
|
7
|
+
forms = LLT::FormBuilder.build(args)
|
8
|
+
forms.should have(1).item
|
9
|
+
forms.first.to_s(:segmentized).should == "alt-e"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "builds the correct adverb form - comparativus" do
|
13
|
+
args = { type: :adverb, comparatio: :comparativus, stem: "altius", inflection_class: 1 }
|
14
|
+
forms = LLT::FormBuilder.build(args)
|
15
|
+
forms.should have(1).item
|
16
|
+
forms.first.to_s(:segmentized).should == "alt-ius"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "builds the correct adverb form - superlativus" do
|
20
|
+
args = { type: :adverb, comparatio: :superlativus, stem: "altissim", inflection_class: 1 }
|
21
|
+
forms = LLT::FormBuilder.build(args)
|
22
|
+
forms.should have(1).item
|
23
|
+
forms.first.to_s(:segmentized).should == "alt-issim-e"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|