portuguese_pluralizer 0.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.
- checksums.yaml +7 -0
- data/lib/portuguese_pluralizer.rb +139 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 24fe77b3747fa45bf5d0b78a5f3bd54fb23d0ce0
|
4
|
+
data.tar.gz: 19a14ffae831d8431813041c0b889aca26a5087d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f4e0016b9c351e146e195ecb64a7def81e433949250a9c41c9fe668d3adf8587697e01b856e1d678a7604f896c81557f45863bd21f3a31990fb2913f12c11750
|
7
|
+
data.tar.gz: 4ccfa40ff1bb16fe293921c443b5b1836be51ace7b45533bf39af97dcd124eaef470e51fa7ca6b03677b1468d8e5aced662b7af1ef6a22695757419361eb6825
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
class String
|
3
|
+
|
4
|
+
PORTUGUESE_CIRCUMFLEX_VOWELS = "êô"
|
5
|
+
PORTUGUESE_TILDE_VOWELS = "ãõ"
|
6
|
+
PORTUGUESE_ACUTE_VOWELS = "áéíó"
|
7
|
+
PORTUGUESE_ACCENTED_VOWELS = PORTUGUESE_ACUTE_VOWELS + PORTUGUESE_CIRCUMFLEX_VOWELS + PORTUGUESE_TILDE_VOWELS
|
8
|
+
PORTUGUESE_NON_ACCENTED_VOWELS = "aeiou"
|
9
|
+
PORTUGUESE_VOWELS = PORTUGUESE_NON_ACCENTED_VOWELS + PORTUGUESE_ACCENTED_VOWELS
|
10
|
+
PORTUGUESE_CONSONANTS = "bcçdfghjlmnpqrsvxz"
|
11
|
+
|
12
|
+
PORTUGUESE_ACUTE_VOWEL_MAP = {
|
13
|
+
'a' => 'á',
|
14
|
+
'e' => 'é',
|
15
|
+
'i' => 'í',
|
16
|
+
'o' => 'ó',
|
17
|
+
'u' => 'ú'
|
18
|
+
}
|
19
|
+
|
20
|
+
PORTUGUESE_CIRCUMFLEX_VOWEL_MAP = {
|
21
|
+
'e' => 'ê',
|
22
|
+
'o' => 'ô'
|
23
|
+
}
|
24
|
+
|
25
|
+
PORTUGUESE_TILDE_VOWEL_MAP = {
|
26
|
+
'a' => 'ã',
|
27
|
+
'o' => 'õ'
|
28
|
+
}
|
29
|
+
|
30
|
+
PORTUGUESE_UNACCENT_VOWEL_MAP = {}
|
31
|
+
PORTUGUESE_UNACCENT_VOWEL_MAP.merge!(PORTUGUESE_ACUTE_VOWEL_MAP.invert)
|
32
|
+
PORTUGUESE_UNACCENT_VOWEL_MAP.merge!(PORTUGUESE_CIRCUMFLEX_VOWEL_MAP.invert)
|
33
|
+
PORTUGUESE_UNACCENT_VOWEL_MAP.merge!(PORTUGUESE_TILDE_VOWEL_MAP.invert)
|
34
|
+
|
35
|
+
def portuguese_pluralizer_unaccent
|
36
|
+
PORTUGUESE_UNACCENT_VOWEL_MAP.fetch(self,self)
|
37
|
+
end
|
38
|
+
|
39
|
+
def portuguese_pluralizer_has_accent?
|
40
|
+
if m = match(/["#{PORTUGUESE_ACCENTED_VOWELS}"]/)
|
41
|
+
true
|
42
|
+
else
|
43
|
+
false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def portuguese_pluralizer_last_vowel
|
48
|
+
m = match(/\w*(["#{PORTUGUESE_VOWELS}"])["#{PORTUGUESE_CONSONANTS}"]?$/)
|
49
|
+
m[1].to_s
|
50
|
+
end
|
51
|
+
|
52
|
+
def portuguese_pluralizer_acute
|
53
|
+
PORTUGUESE_ACUTE_VOWEL_MAP.fetch(self,self)
|
54
|
+
end
|
55
|
+
|
56
|
+
def portuguese_pluralizer_unacute
|
57
|
+
PORTUGUESE_ACUTE_VOWEL_MAP.invert.fetch(self,self)
|
58
|
+
end
|
59
|
+
|
60
|
+
def portuguese_pluralizer_circumflex
|
61
|
+
PORTUGUESE_CIRCUMFLEX_MAP.fetch(self,self)
|
62
|
+
end
|
63
|
+
|
64
|
+
def portuguese_pluralizer_uncircumflex
|
65
|
+
PORTUGUESE_CIRCUMFLEX_MAP.invert.fetch(self,self)
|
66
|
+
end
|
67
|
+
|
68
|
+
def portuguese_pluralizer_tilde
|
69
|
+
PORTUGUESE_TILDE_VOWEL_MAP.fetch(self,self)
|
70
|
+
end
|
71
|
+
|
72
|
+
def portuguese_pluralizer_untilde
|
73
|
+
PORTUGUESE_TILDE_VOWEL_MAP.invert.fetch(self,self)
|
74
|
+
end
|
75
|
+
|
76
|
+
def portuguese_pluralizer_last_consonant
|
77
|
+
m = match(/\w*["#{PORTUGUESE_VOWELS}"]?(["#{PORTUGUESE_CONSONANTS}"])$/)
|
78
|
+
m[1].to_s
|
79
|
+
end
|
80
|
+
|
81
|
+
def portuguese_pluralizer_last_letter
|
82
|
+
self[-1]
|
83
|
+
end
|
84
|
+
|
85
|
+
def pluralize_portuguese
|
86
|
+
case self
|
87
|
+
# If the singular ends in -n just add -s
|
88
|
+
when /\w*["#{PORTUGUESE_VOWELS}"]n$/ then self + 's'
|
89
|
+
# If the singular ends in -m, drop -m and add -ns
|
90
|
+
when /\w*["#{PORTUGUESE_VOWELS}"]m$/ then gsub(/m$/,'ns')
|
91
|
+
# If the singular ends in ãe just add -s
|
92
|
+
when /\w*ãe$/ then self + 's'
|
93
|
+
# If the singular ends with -ção or -são add -ões
|
94
|
+
when /\w*[çs]ão$/ then gsub(/ão/,"ões")
|
95
|
+
# If the singular ends with r,s,z or x...
|
96
|
+
when /\w*[rszx]$/
|
97
|
+
# If the singular ends with s or x
|
98
|
+
if portuguese_pluralizer_last_letter == "s" or portuguese_pluralizer_last_letter == "x"
|
99
|
+
# And the last vowel is accented, unaccent it before adding -es
|
100
|
+
if portuguese_pluralizer_last_vowel.portuguese_pluralizer_has_accent?
|
101
|
+
gsub!(/#{portuguese_pluralizer_last_vowel}/,portuguese_pluralizer_last_vowel.portuguese_pluralizer_unaccent)
|
102
|
+
self + 'es'
|
103
|
+
# But if the last vowel isn't accented and ends in s just return singular as is for plural
|
104
|
+
else
|
105
|
+
self
|
106
|
+
end
|
107
|
+
# If it doesn't end in s or x but r or z just add -es
|
108
|
+
else
|
109
|
+
self + 'es'
|
110
|
+
end
|
111
|
+
# If ends with an unaccented vowel and l
|
112
|
+
when /\w*["#{PORTUGUESE_NON_ACCENTED_VOWELS}"]l$/
|
113
|
+
# And the last vowel is i or e
|
114
|
+
if portuguese_pluralizer_last_vowel == 'i' or portuguese_pluralizer_last_vowel == 'e'
|
115
|
+
# And if it has an accent swap the last vowel + l with -eis
|
116
|
+
if portuguese_pluralizer_has_accent?
|
117
|
+
gsub(/#{portuguese_pluralizer_last_vowel}l$/,"eis")
|
118
|
+
# And if it doesn't have an acccent and the last vowel is i, swap the last vowel + l with -is
|
119
|
+
elsif portuguese_pluralizer_last_vowel == 'i'
|
120
|
+
gsub(/#{portuguese_pluralizer_last_vowel}l$/,"is")
|
121
|
+
# Otherwise if it doesn't have an accent and the the last vowel is e, give the last vowel an acute accent and add -is
|
122
|
+
elsif portuguese_pluralizer_last_vowel == 'e'
|
123
|
+
gsub(/#{portuguese_pluralizer_last_vowel}l$/,portuguese_pluralizer_last_vowel.portuguese_pluralizer_acute + "is")
|
124
|
+
end
|
125
|
+
# If the last vowel is o and
|
126
|
+
elsif portuguese_pluralizer_last_vowel == 'o'
|
127
|
+
# and has an accent just turn the -l to -is
|
128
|
+
if portuguese_pluralizer_has_accent?
|
129
|
+
gsub(/l$/,"is")
|
130
|
+
else
|
131
|
+
gsub(/#{portuguese_pluralizer_last_vowel}l$/,portuguese_pluralizer_last_vowel.portuguese_pluralizer_acute + "is")
|
132
|
+
end
|
133
|
+
else
|
134
|
+
gsub(/l$/,"is")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: portuguese_pluralizer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Martinez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-18 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A simple gem that extends the String class to allow pluralization of
|
14
|
+
Portuguese nouns
|
15
|
+
email:
|
16
|
+
- rubyproblemsolving@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/portuguese_pluralizer.rb
|
22
|
+
homepage: http://rubygems.org/gems/portuguese_pluralizer
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.4.5
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: Portuguese Pluralizer
|
46
|
+
test_files: []
|