katsuyou 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,51 @@
1
+ module Katsuyou
2
+ class VerbConjugation < Struct.new(
3
+ :conjugation_type,
4
+ # Present
5
+ :present,
6
+ :present_polite,
7
+ :present_negative,
8
+ :present_negative_polite,
9
+ # Past
10
+ :past,
11
+ :past_polite,
12
+ :past_negative,
13
+ :past_negative_polite,
14
+ # Conjunctive
15
+ :conjunctive,
16
+ :conjunctive_polite,
17
+ :conjunctive_negative,
18
+ :conjunctive_negative_polite,
19
+ # Provisional
20
+ :provisional,
21
+ :provisional_negative,
22
+ # Volitional
23
+ :volitional,
24
+ :volitional_polite,
25
+ # Imperative
26
+ :imperative,
27
+ :imperative_negative,
28
+ # Potential
29
+ :potential,
30
+ :potential_polite,
31
+ :potential_negative,
32
+ :potential_negative_polite,
33
+ # Passive
34
+ :passive,
35
+ :passive_polite,
36
+ :passive_negative,
37
+ :passive_negative_polite,
38
+ # Causative
39
+ :causative,
40
+ :causative_polite,
41
+ :causative_negative,
42
+ :causative_negative_polite,
43
+ # Causative-passive
44
+ :causative_passive,
45
+ :causative_passive_polite,
46
+ :causative_passive_negative,
47
+ :causative_passive_negative_polite,
48
+ keyword_init: true
49
+ )
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ module Katsuyou
2
+ class VerbEnding
3
+ end
4
+ end
5
+
6
+ require_relative "godan_verb_ending"
7
+ require_relative "ichidan_verb_ending"
8
+ require_relative "kuru_verb_ending"
9
+ require_relative "suru_verb_ending"
10
+
11
+ module Katsuyou
12
+ class VerbEnding
13
+ def self.for(type)
14
+ case type.category
15
+ when :godan_verb then GodanVerbEnding.new(type)
16
+ when :ichidan_verb then IchidanVerbEnding.new(type)
17
+ when :kuru_verb then KuruVerbEnding.new(type)
18
+ when :suru_verb then SuruVerbEnding.new(type)
19
+ end
20
+ end
21
+
22
+ def initialize(type)
23
+ @type = type
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,215 @@
1
+ module Katsuyou
2
+ class VerbStem
3
+ def self.for(text, conjugation_type)
4
+ if conjugation_type.code == "v5r-i"
5
+ AruVerbStem.new(text, conjugation_type)
6
+ elsif conjugation_type.code == "vk"
7
+ KuruVerbStem.new(text, conjugation_type)
8
+ elsif conjugation_type.category == :suru_verb
9
+ SuruVerbStem.new(text, conjugation_type)
10
+ else
11
+ new(text, conjugation_type)
12
+ end
13
+ end
14
+
15
+ def initialize(text, conjugation_type)
16
+ @stem = text[0...-1]
17
+ @conjugation_type = conjugation_type
18
+ end
19
+
20
+ [
21
+ :present_polite,
22
+ :present_negative,
23
+ :present_negative_polite,
24
+ :past,
25
+ :past_polite,
26
+ :past_negative,
27
+ :past_negative_polite,
28
+ :conjunctive,
29
+ :conjunctive_polite,
30
+ :conjunctive_negative,
31
+ :conjunctive_negative_polite,
32
+ :provisional,
33
+ :provisional_negative,
34
+ :volitional,
35
+ :volitional_polite,
36
+ :imperative,
37
+ :potential,
38
+ :potential_polite,
39
+ :potential_negative,
40
+ :potential_negative_polite,
41
+ :passive,
42
+ :passive_polite,
43
+ :passive_negative,
44
+ :passive_negative_polite,
45
+ :causative,
46
+ :causative_polite,
47
+ :causative_negative,
48
+ :causative_negative_polite,
49
+ :causative_passive,
50
+ :causative_passive_polite,
51
+ :causative_passive_negative,
52
+ :causative_passive_negative_polite
53
+ ].each do |conjugated_form|
54
+ define_method conjugated_form do
55
+ @stem
56
+ end
57
+ end
58
+ end
59
+
60
+ class AruVerbStem < VerbStem
61
+ def initialize(text, conjugation_type)
62
+ @shortened_stem = text[0...-2]
63
+ super
64
+ end
65
+
66
+ def present_negative
67
+ @shortened_stem
68
+ end
69
+
70
+ def past_negative
71
+ @shortened_stem
72
+ end
73
+
74
+ def conjunctive_negative
75
+ @shortened_stem
76
+ end
77
+
78
+ def provisional_negative
79
+ @shortened_stem
80
+ end
81
+ end
82
+
83
+ class KuruVerbStem < VerbStem
84
+ def initialize(text, conjugation_type)
85
+ @replace_ku = text[-2] == "く"
86
+ super
87
+ end
88
+
89
+ [
90
+ :present_polite,
91
+ :present_negative_polite,
92
+ :past,
93
+ :past_polite,
94
+ :past_negative_polite,
95
+ :conjunctive,
96
+ :conjunctive_polite,
97
+ :conjunctive_negative_polite,
98
+ :volitional_polite
99
+ ].each do |conjugated_form|
100
+ define_method conjugated_form do
101
+ maybe_replace(super(), "き")
102
+ end
103
+ end
104
+
105
+ [
106
+ :present_negative,
107
+ :past_negative,
108
+ :conjunctive_negative,
109
+ :provisional_negative,
110
+ :volitional,
111
+ :imperative,
112
+ :potential,
113
+ :potential_polite,
114
+ :potential_negative,
115
+ :potential_negative_polite,
116
+ :passive,
117
+ :passive_polite,
118
+ :passive_negative,
119
+ :passive_negative_polite,
120
+ :causative,
121
+ :causative_polite,
122
+ :causative_negative,
123
+ :causative_negative_polite,
124
+ :causative_passive,
125
+ :causative_passive_polite,
126
+ :causative_passive_negative,
127
+ :causative_passive_negative_polite
128
+ ].each do |conjugated_form|
129
+ define_method conjugated_form do
130
+ maybe_replace(super(), "こ")
131
+ end
132
+ end
133
+
134
+ private
135
+
136
+ def maybe_replace(stem, replacement)
137
+ return stem unless @replace_ku
138
+ stem.dup.tap do |s|
139
+ s[-1] = replacement
140
+ end
141
+ end
142
+ end
143
+
144
+ class SuruVerbStem < VerbStem
145
+ def initialize(text, conjugation_type)
146
+ @replace_su = text[-2] == "す"
147
+ super(text, conjugation_type)
148
+ end
149
+
150
+ [
151
+ :present_polite,
152
+ :present_negative,
153
+ :present_negative_polite,
154
+ :past,
155
+ :past_negative,
156
+ :past_polite,
157
+ :past_negative_polite,
158
+ :conjunctive,
159
+ :conjunctive_polite,
160
+ :conjunctive_negative,
161
+ :conjunctive_negative_polite,
162
+ :provisional_negative,
163
+ :volitional,
164
+ :volitional_polite,
165
+ :imperative
166
+ ].each do |conjugated_form|
167
+ define_method conjugated_form do
168
+ maybe_replace(super(), "し")
169
+ end
170
+ end
171
+
172
+ [
173
+ :potential,
174
+ :potential_polite,
175
+ :potential_negative,
176
+ :potential_negative_polite
177
+ ].each do |conjugated_form|
178
+ define_method conjugated_form do
179
+ if @conjugation_type.code == "vs-s"
180
+ @stem[0..-2] + "しえ"
181
+ else
182
+ @stem[0..-2] + "でき"
183
+ end
184
+ end
185
+ end
186
+
187
+ [
188
+ :passive,
189
+ :passive_polite,
190
+ :passive_negative,
191
+ :passive_negative_polite,
192
+ :causative,
193
+ :causative_polite,
194
+ :causative_negative,
195
+ :causative_negative_polite,
196
+ :causative_passive,
197
+ :causative_passive_polite,
198
+ :causative_passive_negative,
199
+ :causative_passive_negative_polite
200
+ ].each do |conjugated_form|
201
+ define_method conjugated_form do
202
+ maybe_replace(super(), "さ")
203
+ end
204
+ end
205
+
206
+ private
207
+
208
+ def maybe_replace(stem, replacement)
209
+ return stem unless @replace_su
210
+ stem.dup.tap do |s|
211
+ s[-1] = replacement
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,3 @@
1
+ module Katsuyou
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,59 @@
1
+ require_relative "verb_stem"
2
+ require_relative "verb_ending"
3
+
4
+ module Katsuyou
5
+ class ZipsEndings
6
+ def call(text, conjugation_type)
7
+ text = conjugation_type.code == "vs" ? text + "する" : text
8
+ stem = VerbStem.for(text, conjugation_type)
9
+ ending = VerbEnding.for(conjugation_type)
10
+
11
+ {
12
+ # Present
13
+ present: text,
14
+ present_polite: stem.present_polite + ending.present_polite,
15
+ present_negative: stem.present_negative + ending.present_negative,
16
+ present_negative_polite: stem.present_negative_polite + ending.present_negative_polite,
17
+ # Past
18
+ past: stem.past + ending.past,
19
+ past_polite: stem.past_polite + ending.past_polite,
20
+ past_negative: stem.past_negative + ending.past_negative,
21
+ past_negative_polite: stem.past_negative_polite + ending.past_negative_polite,
22
+ # Conjunctive
23
+ conjunctive: stem.conjunctive + ending.conjunctive,
24
+ conjunctive_polite: stem.conjunctive_polite + ending.conjunctive_polite,
25
+ conjunctive_negative: stem.conjunctive_negative + ending.conjunctive_negative,
26
+ conjunctive_negative_polite: stem.conjunctive_negative_polite + ending.conjunctive_negative_polite,
27
+ # Provisional
28
+ provisional: stem.provisional + ending.provisional,
29
+ provisional_negative: stem.provisional_negative + ending.provisional_negative,
30
+ # Volitional
31
+ volitional: stem.volitional + ending.volitional,
32
+ volitional_polite: stem.volitional_polite + ending.volitional_polite,
33
+ # Imperative
34
+ imperative: stem.imperative + ending.imperative,
35
+ imperative_negative: text + "な",
36
+ # Potential
37
+ potential: stem.potential + ending.potential,
38
+ potential_polite: stem.potential_polite + ending.potential_polite,
39
+ potential_negative: stem.potential_negative + ending.potential_negative,
40
+ potential_negative_polite: stem.potential_negative_polite + ending.potential_negative_polite,
41
+ # Passive
42
+ passive: stem.passive + ending.passive,
43
+ passive_polite: stem.passive_polite + ending.passive_polite,
44
+ passive_negative: stem.passive_negative + ending.passive_negative,
45
+ passive_negative_polite: stem.passive_negative_polite + ending.passive_negative_polite,
46
+ # Causative
47
+ causative: stem.causative + ending.causative,
48
+ causative_polite: stem.causative_polite + ending.causative_polite,
49
+ causative_negative: stem.causative_negative + ending.causative_negative,
50
+ causative_negative_polite: stem.causative_negative_polite + ending.causative_negative_polite,
51
+ # Causative-passive
52
+ causative_passive: stem.causative_passive + ending.causative_passive,
53
+ causative_passive_polite: stem.causative_passive_polite + ending.causative_passive_polite,
54
+ causative_passive_negative: stem.causative_passive_negative + ending.causative_passive_negative,
55
+ causative_passive_negative_polite: stem.causative_passive_negative_polite + ending.causative_passive_negative_polite
56
+ }
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: katsuyou
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Justin Searls
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - searls@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - ".travis.yml"
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - LICENSE.txt
25
+ - README.md
26
+ - Rakefile
27
+ - bin/console
28
+ - bin/setup
29
+ - katsuyou.gemspec
30
+ - lib/katsuyou.rb
31
+ - lib/katsuyou/checks_conjugability.rb
32
+ - lib/katsuyou/conjugates_verb.rb
33
+ - lib/katsuyou/conjugation_type.rb
34
+ - lib/katsuyou/determines_type.rb
35
+ - lib/katsuyou/godan_verb_ending.rb
36
+ - lib/katsuyou/ichidan_verb_ending.rb
37
+ - lib/katsuyou/kuru_verb_ending.rb
38
+ - lib/katsuyou/suru_verb_ending.rb
39
+ - lib/katsuyou/verb_conjugation.rb
40
+ - lib/katsuyou/verb_ending.rb
41
+ - lib/katsuyou/verb_stem.rb
42
+ - lib/katsuyou/version.rb
43
+ - lib/katsuyou/zips_endings.rb
44
+ homepage: https://github.com/searls/katsuyou
45
+ licenses:
46
+ - GPL-3.0-only
47
+ metadata:
48
+ homepage_uri: https://github.com/searls/katsuyou
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 2.3.0
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubygems_version: 3.1.2
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Conjugates Japanese words
68
+ test_files: []