conjugate 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.DS_Store +0 -0
- data/conjugate-0.0.1.gem +0 -0
- data/conjugate.gemspec +14 -0
- data/lib/.DS_Store +0 -0
- data/lib/conjugate/.DS_Store +0 -0
- data/lib/conjugate/spanish.rb +77 -0
- data/lib/conjugate/templates/spanish_irregular_verbs.rb +1479 -0
- data/lib/conjugate/templates/spanish_templates.rb +3876 -0
- data/lib/conjugate.rb +6 -0
- metadata +53 -0
data/.DS_Store
ADDED
Binary file
|
data/conjugate-0.0.1.gem
ADDED
Binary file
|
data/conjugate.gemspec
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'conjugate'
|
3
|
+
s.version = '1.0'
|
4
|
+
s.date = '2012-02-15'
|
5
|
+
s.summary = "Conjugate Verbs using a version of the templates defined here http://en.wiktionary.org/wiki/Category:Spanish_conjugation-table_templates"
|
6
|
+
s.description = s.summary
|
7
|
+
s.authors = ["Jeremy Geros"]
|
8
|
+
s.email = 'jeremy@govocab.com'
|
9
|
+
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
|
13
|
+
s.homepage = ''
|
14
|
+
end
|
data/lib/.DS_Store
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'conjugate/templates/spanish_templates'
|
2
|
+
require 'conjugate/templates/spanish_irregular_verbs'
|
3
|
+
|
4
|
+
module Conjugate
|
5
|
+
module Spanish
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def generate_list_of_know_irregular_verbs
|
9
|
+
puts "- " + SpanishIrregularVerbs.keys.sort.join("\n- ")
|
10
|
+
end
|
11
|
+
|
12
|
+
@dividing_infinitive_regex = /\{{3}\d+\}{3}(\w+)/
|
13
|
+
|
14
|
+
|
15
|
+
def conjugate(opts ={})
|
16
|
+
template = template(opts)
|
17
|
+
tense = tense(opts[:tense])
|
18
|
+
|
19
|
+
verb = opts[:verb]
|
20
|
+
|
21
|
+
infinitive = template[:infinitive].dup
|
22
|
+
verb_parts = divide_infinitive(infinitive, verb)
|
23
|
+
|
24
|
+
return nil if template[tense].nil? || template[tense][opts[:pronoun].to_sym].nil?
|
25
|
+
|
26
|
+
conjugation_template = template[tense][opts[:pronoun].to_sym].dup
|
27
|
+
positions = conjugation_template.scan(/\{{3}(\d+)\}{3}/).flatten
|
28
|
+
|
29
|
+
positions.each do |p|
|
30
|
+
conjugation_template.gsub!(/\{{3}#{p}\}{3}/, verb_parts[p.to_i - 1])
|
31
|
+
end
|
32
|
+
conjugation_template
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_irregular(verb)
|
37
|
+
SpanishIrregularVerbs[verb]
|
38
|
+
end
|
39
|
+
|
40
|
+
def regular_ending(verb)
|
41
|
+
verb[-2..-1]
|
42
|
+
end
|
43
|
+
|
44
|
+
def template(opts)
|
45
|
+
SpanishTemplates[(opts[:template] || find_irregular(opts[:verb]) || regular_ending(opts[:verb])).to_sym]
|
46
|
+
end
|
47
|
+
|
48
|
+
def tense(t)
|
49
|
+
(common_name(t) || :present).to_sym
|
50
|
+
end
|
51
|
+
|
52
|
+
def common_name(t)
|
53
|
+
return nil unless t
|
54
|
+
changable_names = {:past => :preterite}
|
55
|
+
tense = changable_names[t.to_sym] || t
|
56
|
+
tense
|
57
|
+
end
|
58
|
+
|
59
|
+
def divide_infinitive(infinitive, verb)
|
60
|
+
inserts = infinitive.scan(@dividing_infinitive_regex).flatten
|
61
|
+
|
62
|
+
word_parts = []
|
63
|
+
word_copy = verb.dup
|
64
|
+
|
65
|
+
inserts.each do |letters|
|
66
|
+
sub_word = word_copy.scan(/(.+)#{letters}/).flatten.first
|
67
|
+
sub_word ||= ""
|
68
|
+
|
69
|
+
word_parts << sub_word
|
70
|
+
word_copy = word_copy.gsub(/^#{sub_word}#{letters}/, '')
|
71
|
+
end
|
72
|
+
word_parts << word_copy unless word_copy == ""
|
73
|
+
word_parts
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|