katsuyou 1.0.0

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.
@@ -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: []