conjugate 1.3.13 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }