conjugate 1.3.13 → 1.4.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.
data/conjugate.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'conjugate'
3
- s.version = '1.3.13'
3
+ s.version = '1.4.0'
4
4
  s.date = '2012-02-15'
5
5
  s.summary = "Conjugate Verbs using a version of the templates defined here http://en.wiktionary.org/wiki/Category:Spanish_verb_inflection-table_templates"
6
6
  s.description = s.summary
@@ -0,0 +1,82 @@
1
+ module Common
2
+
3
+ @@dividing_infinitive_regex = /\{{3}\d+\}{3}(\w+)/
4
+
5
+ def conjugate(opts ={})
6
+ @debug = opts[:debug].nil? ? false : true
7
+
8
+ template = template(opts)
9
+ debug(template)
10
+ tense = tense(opts[:tense])
11
+
12
+ verb = opts[:verb]
13
+ debug(verb)
14
+
15
+ infinitive = template[:infinitive].dup
16
+ debug(infinitive)
17
+
18
+ verb_parts = divide_infinitive(infinitive, verb)
19
+ debug(verb_parts)
20
+
21
+ return nil if template[tense].nil? || template[tense][opts[:pronoun].to_sym].nil?
22
+
23
+ conjugation_template = template[tense][opts[:pronoun].to_sym].dup
24
+ debug(conjugation_template)
25
+
26
+ positions = conjugation_template.scan(/\{{3}(\d+)\}{3}/).flatten
27
+ debug(positions)
28
+
29
+ positions.each do |p|
30
+ if opts[:highlight]
31
+ conjugation_template.gsub!(/\{{3}#{p}\}{3}/, "<span class='regular'>#{ verb_parts[p.to_i - 1] }</span>")
32
+ else
33
+ conjugation_template.gsub!(/\{{3}#{p}\}{3}/, verb_parts[p.to_i - 1])
34
+ end
35
+ end
36
+ conjugation_template
37
+ end
38
+
39
+ def regular_ending(verb)
40
+ verb[-2..-1]
41
+ end
42
+
43
+ def tense(t)
44
+ (common_name(t) || :present).to_sym
45
+ end
46
+
47
+ def divide_infinitive(infinitive, verb)
48
+ inserts = infinitive.scan(@@dividing_infinitive_regex).flatten
49
+ debug(inserts)
50
+
51
+ word_parts = []
52
+ word_copy = verb.dup
53
+
54
+ inserts.each do |letters|
55
+ sub_word = ""
56
+ if letters.length <= 1
57
+ sub_word = word_copy.scan(/(.[^#{letters}]*)#{letters}/).flatten.first
58
+ else
59
+ sub_word = word_copy.scan(/(.+)#{letters}/).flatten.first
60
+ end
61
+ sub_word ||= ""
62
+
63
+ word_parts << sub_word
64
+ word_copy = word_copy.gsub(/^#{sub_word}#{letters}/, '')
65
+ end
66
+ word_parts << word_copy unless word_copy == ""
67
+ word_parts
68
+ end
69
+
70
+ def debug(info)
71
+ if @debug
72
+ puts info.inspect
73
+ end
74
+ end
75
+
76
+ # stubbed method individual languages override this to support multiple tenses names
77
+ def common_name(t)
78
+ return nil unless t
79
+ tense
80
+ end
81
+
82
+ end
@@ -0,0 +1,30 @@
1
+ require 'conjugate/french_templates/templates'
2
+ require 'conjugate/french_templates/irregular_verbs'
3
+ require 'conjugate/common'
4
+
5
+ module Conjugate
6
+ module French
7
+ extend self
8
+ extend Common
9
+
10
+ def generate_list_of_know_irregular_verbs
11
+ puts "- " + FrenchIrregularVerbs.keys.sort.join("\n- ")
12
+ end
13
+
14
+ def find_irregular(verb)
15
+ FrenchIrregularVerbs[verb.downcase]
16
+ end
17
+
18
+ def template(opts)
19
+ FrenchTemplates[(opts[:template] || find_irregular(opts[:verb]) || regular_ending(opts[:verb])).to_sym]
20
+ end
21
+
22
+ def common_name(t)
23
+ return nil unless t
24
+ changable_names = {:past => :preterite}
25
+ tense = changable_names[t.to_sym] || t
26
+ tense
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,342 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ FrenchIrregularVerbs = {
4
+ 'être' => :être,
5
+
6
+ 'faire' => :faire,
7
+
8
+ 'dire' => :dire,
9
+
10
+ 'avoir' => :avoir,
11
+
12
+ 'aller' => :aller,
13
+
14
+ 'voir' => :voir,
15
+
16
+ 'savoir' => :savoir,
17
+
18
+ 'pouvoir' => :pouvoir,
19
+
20
+ 'vouloir' => :vouloir,
21
+
22
+ 'falloir' => :falloir,
23
+
24
+ 'rompre' => :pre,
25
+
26
+ 'corrompre' => :pre,
27
+
28
+ 'interrompre' => :pre,
29
+
30
+ 'cueillir' => :ir_e,
31
+
32
+ 'accueillir' => :ir_e,
33
+
34
+ 'recueillir' => :ir_e,
35
+
36
+ 'couvrir' => :rir,
37
+
38
+ 'découvrir' => :rir,
39
+
40
+ 'entrouvrir' => :rir,
41
+
42
+ 'ouvrir' => :rir,
43
+
44
+ 'recouvrir' => :rir,
45
+
46
+ 'offrir' => :rir,
47
+
48
+ 'souffrir' => :rir,
49
+
50
+ 'annoncer' => :cer,
51
+
52
+ 'avancer' => :cer,
53
+
54
+ 'commencer' => :cer,
55
+
56
+ 'dénoncer' => :cer,
57
+
58
+ 'divorcer' => :cer,
59
+
60
+ 'effacer' => :cer,
61
+
62
+ 'lancer' => :cer,
63
+
64
+ 'menacer' => :cer,
65
+
66
+ 'placer' => :cer,
67
+
68
+ 'prononcer' => :cer,
69
+
70
+ 'remplacer' => :cer,
71
+
72
+ 'renoncer' => :cer,
73
+
74
+ 'arranger' => :ger,
75
+
76
+ 'bouger' => :ger,
77
+
78
+ 'changer' => :ger,
79
+
80
+ 'corriger' => :ger,
81
+
82
+ 'décourager' => :ger,
83
+
84
+ 'déménager' => :ger,
85
+
86
+ 'déranger' => :ger,
87
+
88
+ 'diriger' => :ger,
89
+
90
+ 'encourager' => :ger,
91
+
92
+ 'engager' => :ger,
93
+
94
+ 'exiger' => :ger,
95
+
96
+ 'juger' => :ger,
97
+
98
+ 'loger' => :ger,
99
+
100
+ 'manger' => :ger,
101
+
102
+ 'mélanger' => :ger,
103
+
104
+ 'nager' => :ger,
105
+
106
+ 'obliger' => :ger,
107
+
108
+ 'partager' => :ger,
109
+
110
+ 'rédiger' => :ger,
111
+
112
+ 'voyager' => :ger,
113
+
114
+ 'balayer' => :ayer,
115
+
116
+ 'effrayer' => :ayer,
117
+
118
+ 'essayer' => :ayer,
119
+
120
+ 'payer' => :ayer,
121
+
122
+ 'broyer' => :yer,
123
+
124
+ 'employer' => :yer,
125
+
126
+ 'envoyer' => :yer,
127
+
128
+ 'nettoyer' => :yer,
129
+
130
+ 'noyer' => :yer,
131
+
132
+ 'renvoyer' => :yer,
133
+
134
+ 'tutoyer' => :yer,
135
+
136
+ 'vouvoyer' => :yer,
137
+
138
+ 'appuyer' => :yer,
139
+
140
+ 'ennuyer' => :yer,
141
+
142
+ 'essuyer' => :yer,
143
+
144
+ 'acheter' => :e_er,
145
+
146
+ 'amener' => :e_er,
147
+
148
+ 'emmener' => :e_er,
149
+
150
+ 'enlever' => :e_er,
151
+
152
+ 'geler' => :e_er,
153
+
154
+ 'harceler' => :e_er,
155
+
156
+ 'lever' => :e_er,
157
+
158
+ 'mener' => :e_er,
159
+
160
+ 'peler' => :e_er,
161
+
162
+ 'peser' => :e_er,
163
+
164
+ 'promener' => :e_er,
165
+
166
+ 'céder' => :é_er,
167
+
168
+ 'célébrer' => :é_er,
169
+
170
+ 'compléter' => :é_er,
171
+
172
+ 'considérer' => :é_er,
173
+
174
+ 'différer' => :é_er,
175
+
176
+ 'espérer' => :é_er,
177
+
178
+ 'exagérer' => :é_er,
179
+
180
+ 'gérer' => :é_er,
181
+
182
+ 'inquiéter' => :é_er,
183
+
184
+ 'modérer' => :é_er,
185
+
186
+ 'pénétrer' => :é_er,
187
+
188
+ 'posséder' => :é_er,
189
+
190
+ 'préférer' => :é_er,
191
+
192
+ 'proteéger' => :é_er,
193
+
194
+ 'refléter' => :é_er,
195
+
196
+ 'répéter' => :é_er,
197
+
198
+ 'révéler' => :é_er,
199
+
200
+ 'suggérer' => :é_er,
201
+
202
+ 'zébrer' => :é_er,
203
+
204
+ 'appeler' => :xx_er,
205
+
206
+ 'épeler' => :xx_er,
207
+
208
+ 'rappeler' => :xx_er,
209
+
210
+ 'renouveler' => :xx_er,
211
+
212
+ 'feuilleter' => :xx_er,
213
+
214
+ 'hoqueter' => :xx_er,
215
+
216
+ 'jeter' => :xx_er,
217
+
218
+ 'projeter' => :xx_er,
219
+
220
+ 'rejeter' => :xx_er,
221
+
222
+ 'dormir' => :ir_s,
223
+
224
+ 'endormir' => :ir_s,
225
+
226
+ 'redormir' => :ir_s,
227
+
228
+ 'rendormir' => :ir_s,
229
+
230
+ 'mentir' => :ir_s,
231
+
232
+ 'repentir' => :ir_s,
233
+
234
+ 'partir' => :ir_s,
235
+
236
+ 'départir' => :ir_s,
237
+
238
+ 'repartir' => :ir_s,
239
+
240
+ 'sentir' => :ir_s,
241
+
242
+ 'consentir' => :ir_s,
243
+
244
+ 'pressentir' => :ir_s,
245
+
246
+ 'ressentir' => :ir_s,
247
+
248
+ 'servir' => :ir_s,
249
+
250
+ 'sortir' => :ir_s,
251
+
252
+ 'prendre' => :prendre,
253
+
254
+ 'apprendre' => :prendre,
255
+
256
+ 'comprendre' => :prendre,
257
+
258
+ 'entreprendre' => :prendre,
259
+
260
+ 'méprendre' => :prendre,
261
+
262
+ 'reprendre' => :prendre,
263
+
264
+ 'surprendre' => :prendre,
265
+
266
+ 'battre' => :ttre,
267
+
268
+ 'mettre' => :ttre,
269
+
270
+ 'abattre' => :ttre,
271
+
272
+ 'combattre' => :ttre,
273
+
274
+ 'débattre' => :ttre,
275
+
276
+ 'admettre' => :ttre,
277
+
278
+ 'commettre' => :ttre,
279
+
280
+ 'compromettre' => :ttre,
281
+
282
+ 'permettre' => :ttre,
283
+
284
+ 'promettre' => :ttre,
285
+
286
+ 'soumettre' => :ttre,
287
+
288
+ 'transmettre' => :ttre,
289
+
290
+ 'craindre' => :re_gn,
291
+
292
+ 'teindre' => :re_gn,
293
+
294
+ 'joindre' => :re_gn,
295
+
296
+ 'contraindre' => :re_gn,
297
+
298
+ 'peindre' => :re_gn,
299
+
300
+ 'astreindre' => :re_gn,
301
+
302
+ 'atteindre' => :re_gn,
303
+
304
+ 'ceindre' => :re_gn,
305
+
306
+ 'dépeindre' => :re_gn,
307
+
308
+ 'déteindre' => :re_gn,
309
+
310
+ 'empreindre' => :re_gn,
311
+
312
+ 'enfreindre' => :re_gn,
313
+
314
+ 'épreindre' => :re_gn,
315
+
316
+ 'éteindre' => :re_gn,
317
+
318
+ 'étreindre' => :re_gn,
319
+
320
+ 'feindre' => :re_gn,
321
+
322
+ 'geindre' => :re_gn,
323
+
324
+ 'peindre' => :re_gn,
325
+
326
+ 'repeindre' => :re_gn,
327
+
328
+ 'restreindre' => :re_gn,
329
+
330
+ 'reteindre' => :re_gn,
331
+
332
+ 'adjoindre' => :re_gn,
333
+
334
+ 'conjoindre' => :re_gn,
335
+
336
+ 'disjoindre' => :re_gn,
337
+
338
+ 'enjoindre' => :re_gn,
339
+
340
+ 'rejoindre' => :re_gn
341
+
342
+ }