owoify_rb 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b3ebe1f808b20fe5ab8440436d9e86f69e8b464a3d269b5e1f39c8aa72b5d3b
4
- data.tar.gz: 76e5f573021b607adeccff14c70b465e06fc1618f64e3ca37c4d6c60eac37dac
3
+ metadata.gz: 20ca6820ead683de7e6057a90aeb1982be6bac15c25de8c27716c6bfeff87e4e
4
+ data.tar.gz: 6dbb2b6f58e1a23d59d1f3c93cd0faa496effcc2f80f07a412c152b2d1ea4196
5
5
  SHA512:
6
- metadata.gz: 4992903cb3f5d94e40fd5829f755368cce1a57f4321e2460e2555879861a81d62a8e5c9752af1e1bf991bee61042f23a6b56aeed9e9c9aa77c8c4e8daddbda18
7
- data.tar.gz: 4435abf330a1ef569f4dea838a03df583c01372751dcd44a16c07874947a6ffce8da76efb6ecd5a2d11867711d76dd5b350cc6d4a83db492fa3c086778086673
6
+ metadata.gz: e544218dd8762b8d4b7b4ea60655bb0fcbb827142d8d1960cdcef28576e448325b8f524ebe195cc2dc4931a1a2d88e93d9e6ce0be17a9578676e062d50383671
7
+ data.tar.gz: 75284d62ee51d98f4f0a0e65e61dbfa8cd3102f64a51faea52cde6cbc347c8685e66526e51f3958d50319cdd34f4c29e95b094743a80906c9e979deafeda00a4
data/lib/owoify_rb.rb CHANGED
@@ -1,50 +1,50 @@
1
- # frozen_string_literal: true
2
-
3
- require 'structures/word'
4
- require 'utility/interleave_arrays'
5
- require 'utility/presets'
6
-
7
- module Owoify
8
- def self.owoify(source, level = 'owo')
9
- word_matches = source.scan(/[^\s]+/).flatten
10
- space_matches = source.scan(/\s+/).flatten
11
- words = word_matches.map { |x| Word.new(x) }
12
- spaces = space_matches.map { |x| Word.new(x) }
13
- _level = level.downcase
14
- words.map! do |w|
15
- SPECIFIC_WORD_MAPPING_LIST.each do |f|
16
- w = f.call(w)
17
- end
18
- case _level
19
- when 'owo'
20
- OWO_MAPPING_LIST.each do |f|
21
- w = f.call(w)
22
- end
23
- when 'uwu'
24
- UWU_MAPPING_LIST.each do |f|
25
- w = f.call(w)
26
- end
27
- OWO_MAPPING_LIST.each do |f|
28
- w = f.call(w)
29
- end
30
- when 'uvu'
31
- UVU_MAPPING_LIST.each do |f|
32
- w = f.call(w)
33
- end
34
- UWU_MAPPING_LIST.each do |f|
35
- w = f.call(w)
36
- end
37
- OWO_MAPPING_LIST.each do |f|
38
- w = f.call(w)
39
- end
40
- else
41
- raise ArgumentError, 'The specified owoify level is not supported.'
42
- end
43
- w
44
- end
45
-
46
- result = interleave_arrays(words, spaces)
47
- result_strings = result.map(&:to_s)
48
- result_strings.join
49
- end
50
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'structures/word'
4
+ require 'utility/interleave_arrays'
5
+ require 'utility/presets'
6
+
7
+ module Owoify
8
+ def self.owoify(source, level = 'owo')
9
+ word_matches = source.scan(/[^\s]+/).flatten
10
+ space_matches = source.scan(/\s+/).flatten
11
+ words = word_matches.map { |x| Word.new(x) }
12
+ spaces = space_matches.map { |x| Word.new(x) }
13
+ actual_level = level.downcase
14
+ words.map! do |w|
15
+ SPECIFIC_WORD_MAPPING_LIST.each do |f|
16
+ w = f.call(w)
17
+ end
18
+ case actual_level
19
+ when 'owo'
20
+ OWO_MAPPING_LIST.each do |f|
21
+ w = f.call(w)
22
+ end
23
+ when 'uwu'
24
+ UWU_MAPPING_LIST.each do |f|
25
+ w = f.call(w)
26
+ end
27
+ OWO_MAPPING_LIST.each do |f|
28
+ w = f.call(w)
29
+ end
30
+ when 'uvu'
31
+ UVU_MAPPING_LIST.each do |f|
32
+ w = f.call(w)
33
+ end
34
+ UWU_MAPPING_LIST.each do |f|
35
+ w = f.call(w)
36
+ end
37
+ OWO_MAPPING_LIST.each do |f|
38
+ w = f.call(w)
39
+ end
40
+ else
41
+ raise ArgumentError, 'The specified owoify level is not supported.'
42
+ end
43
+ w
44
+ end
45
+
46
+ result = interleave_arrays(words, spaces)
47
+ result_strings = result.map(&:to_s)
48
+ result_strings.join
49
+ end
50
+ end
@@ -1,87 +1,88 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
-
5
- class Word
6
- def initialize(word)
7
- @replaced_words = Set.new
8
- @word = word
9
- end
10
-
11
- def to_s
12
- @word
13
- end
14
-
15
- private
16
-
17
- def search_value_contains_replaced_words(search_value, replace_value)
18
- @replaced_words.any? do |word|
19
- if search_value.match? word
20
- match_result = search_value.match(word)[0]
21
- return word.gsub(match_result, replace_value) == replace_value
22
- end
23
- false
24
- end
25
- end
26
-
27
- public
28
-
29
- def replace(search_value, replace_value, replace_replaced_words = false)
30
- return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
31
-
32
- replacing_word = @word
33
- replacing_word = @word.gsub(search_value, replace_value) if search_value.match? @word
34
- collection = @word.scan(search_value).flatten
35
- replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
36
-
37
- if replacing_word != @word
38
- replaced_words.each do |word|
39
- @replaced_words.add(word)
40
- end
41
- @word = replacing_word
42
- end
43
- self
44
- end
45
-
46
- def replace_with_func_single(search_value, func, replace_replaced_words = false)
47
- replace_value = func.call
48
-
49
- return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
50
-
51
- replacing_word = @word
52
- if search_value.match? @word
53
- match = @word.match(search_value)[0]
54
- replacing_word = @word.gsub(match, replace_value)
55
- end
56
- collection = @word.scan(search_value).flatten
57
- replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
58
- if replacing_word != @word
59
- replaced_words.each do |word|
60
- @replaced_words.add(word)
61
- end
62
- @word = replacing_word
63
- end
64
- self
65
- end
66
-
67
- def replace_with_func_multiple(search_value, func, replace_replaced_words = false)
68
- return self unless search_value.match? @word
69
-
70
- word = @word
71
- captures = search_value.match(word)
72
- replace_value = func.call(captures[1], captures[2])
73
-
74
- return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
75
-
76
- replacing_word = @word.gsub(captures[0], replace_value)
77
- collection = @word.scan(search_value).flatten
78
- replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
79
- if replacing_word != @word
80
- replaced_words.each do |w|
81
- @replaced_words.add(w)
82
- end
83
- @word = replacing_word
84
- end
85
- self
86
- end
87
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ # The core structure that stores information of the string to owoify and performs actual owoification.
6
+ class Word
7
+ def initialize(word)
8
+ @replaced_words = Set.new
9
+ @word = word
10
+ end
11
+
12
+ def to_s
13
+ @word
14
+ end
15
+
16
+ private
17
+
18
+ def search_value_contains_replaced_words(search_value, replace_value)
19
+ @replaced_words.any? do |word|
20
+ if search_value.match? word
21
+ match_result = search_value.match(word)[0]
22
+ return word.gsub(match_result, replace_value) == replace_value
23
+ end
24
+ false
25
+ end
26
+ end
27
+
28
+ public
29
+
30
+ def replace(search_value, replace_value, replace_replaced_words = false)
31
+ return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
32
+
33
+ replacing_word = @word
34
+ replacing_word = @word.gsub(search_value, replace_value) if search_value.match? @word
35
+ collection = @word.scan(search_value).flatten
36
+ replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
37
+
38
+ if replacing_word != @word
39
+ replaced_words.each do |word|
40
+ @replaced_words.add(word)
41
+ end
42
+ @word = replacing_word
43
+ end
44
+ self
45
+ end
46
+
47
+ def replace_with_func_single(search_value, func, replace_replaced_words = false)
48
+ replace_value = func.call
49
+
50
+ return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
51
+
52
+ replacing_word = @word
53
+ if search_value.match? @word
54
+ match = @word.match(search_value)[0]
55
+ replacing_word = @word.gsub(match, replace_value)
56
+ end
57
+ collection = @word.scan(search_value).flatten
58
+ replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
59
+ if replacing_word != @word
60
+ replaced_words.each do |word|
61
+ @replaced_words.add(word)
62
+ end
63
+ @word = replacing_word
64
+ end
65
+ self
66
+ end
67
+
68
+ def replace_with_func_multiple(search_value, func, replace_replaced_words = false)
69
+ return self unless search_value.match? @word
70
+
71
+ word = @word
72
+ captures = search_value.match(word)
73
+ replace_value = func.call(captures[1], captures[2])
74
+
75
+ return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)
76
+
77
+ replacing_word = @word.gsub(captures[0], replace_value)
78
+ collection = @word.scan(search_value).flatten
79
+ replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
80
+ if replacing_word != @word
81
+ replaced_words.each do |w|
82
+ @replaced_words.add(w)
83
+ end
84
+ @word = replacing_word
85
+ end
86
+ self
87
+ end
88
+ end
@@ -1,18 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- def interleave_arrays(a, b)
4
- arr = []
5
- observed = a
6
- other = b
7
- temp = []
8
-
9
- while observed.length.positive?
10
- arr.push(observed.delete_at(0))
11
- temp = observed
12
- observed = other
13
- other = temp
14
- end
15
-
16
- arr += other.length.positive? ? other : []
17
- arr
18
- end
1
+ # frozen_string_literal: true
2
+
3
+ def interleave_arrays(a, b)
4
+ arr = []
5
+ observed = a
6
+ other = b
7
+ temp = []
8
+
9
+ while observed.length.positive?
10
+ arr.push(observed.delete_at(0))
11
+ temp = observed
12
+ observed = other
13
+ other = temp
14
+ end
15
+
16
+ arr += other.length.positive? ? other : []
17
+ arr
18
+ end
@@ -1,266 +1,266 @@
1
- # frozen_string_literal: true
2
-
3
- require 'structures/word'
4
-
5
- O_TO_OWO = /o/.freeze
6
- EW_TO_UWU = /ew/.freeze
7
- HEY_TO_HAY = /([Hh])ey/.freeze
8
- DEAD_TO_DED_UPPER = /Dead/.freeze
9
- DEAD_TO_DED_LOWER = /dead/.freeze
10
- N_VOWEL_T_TO_ND = /n[aeiou]*t/.freeze
11
- READ_TO_WEAD_UPPER = /Read/.freeze
12
- READ_TO_WEAD_LOWER = /read/.freeze
13
- BRACKETS_TO_STARTRAILS_FORE = /[({<]/.freeze
14
- BRACKETS_TO_STARTRAILS_REAR = /[)}>]/.freeze
15
- PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_FIRST = /[.,](?![0-9])/.freeze
16
- PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_SECOND = /[!;]+/.freeze
17
- THAT_TO_DAT_UPPER = /That/.freeze
18
- THAT_TO_DAT_LOWER = /that/.freeze
19
- TH_TO_F_UPPER = /TH(?!E)/.freeze
20
- TH_TO_F_LOWER = /[Tt]h(?![Ee])/.freeze
21
- LE_TO_WAL = /le$/.freeze
22
- VE_TO_WE_UPPER = /Ve/.freeze
23
- VE_TO_WE_LOWER = /ve/.freeze
24
- RY_TO_WWY = /ry/.freeze
25
- RORL_TO_W_UPPER = /(?:R|L)/.freeze
26
- RORL_TO_W_LOWER = /(?:r|l)/.freeze
27
- LL_TO_WW = /ll/.freeze
28
- VOWEL_OR_R_EXCEPT_O_L_TO_WL_UPPER = /[AEIUR]([lL])$/.freeze
29
- VOWEL_OR_R_EXCEPT_O_L_TO_WL_LOWER = /[aeiur]l$/.freeze
30
- OLD_TO_OWLD_UPPER = /OLD/.freeze
31
- OLD_TO_OWLD_LOWER = /([Oo])ld/.freeze
32
- OL_TO_OWL_UPPER = /OL/.freeze
33
- OL_TO_OWL_LOWER = /([Oo])l/.freeze
34
- LORR_O_TO_WO_UPPER = /[LR]([oO])/.freeze
35
- LORR_O_TO_WO_LOWER = /[lr]o/.freeze
36
- SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_UPPER = /([BCDFGHJKMNPQSTXYZ])([oO])/.freeze
37
- SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_LOWER = /([bcdfghjkmnpqstxyz])o/.freeze
38
- VORW_LE_TO_WAL = /[vw]le/.freeze
39
- FI_TO_FWI_UPPER = /FI/.freeze
40
- FI_TO_FWI_LOWER = /([Ff])i/.freeze
41
- VER_TO_WER = /([Vv])er/.freeze
42
- POI_TO_PWOI = /([Pp])oi/.freeze
43
- SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL = /([DdFfGgHhJjPpQqRrSsTtXxYyZz])le$/.freeze
44
- CONSONANT_R_TO_CONSONANT_W = /([BbCcDdFfGgKkPpQqSsTtWwXxZz])r/.freeze
45
- LY_TO_WY_UPPER = /Ly/.freeze
46
- LY_TO_WY_LOWER = /ly/.freeze
47
- PLE_TO_PWE = /([Pp])le/.freeze
48
- NR_TO_NW_UPPER = /NR/.freeze
49
- NR_TO_NW_LOWER = /nr/.freeze
50
- FUC_TO_FWUC = /([Ff])uc/.freeze
51
- MOM_TO_MWOM = /([Mm])om/.freeze
52
- ME_TO_MWE = /([Mm])e/.freeze
53
- N_VOWEL_TO_NY_FIRST = /n([aeiou])/.freeze
54
- N_VOWEL_TO_NY_SECOND = /N([aeiou])/.freeze
55
- N_VOWEL_TO_NY_THIRD = /N([AEIOU])/.freeze
56
- OVE_TO_UV_UPPER = /OVE/.freeze
57
- OVE_TO_UV_LOWER = /ove/.freeze
58
- HAHA_TO_HEHE_XD = /\b(ha|hah|heh|hehe)+\b/.freeze
59
- THE_TO_TEH = /\b([Tt])he\b/.freeze
60
- YOU_TO_U_UPPER = /\bYou\b/.freeze
61
- YOU_TO_U_LOWER = /\byou\b/.freeze
62
- TIME_TO_TIM = /\b([Tt])ime\b/.freeze
63
- OVER_TO_OWOR = /([Oo])ver/.freeze
64
- WORSE_TO_WOSE = /([Ww])orse/.freeze
65
-
66
- FACES = [
67
- '(・`ω´・)', ';;w;;', 'owo', 'UwU', '>w<', '^w^', '(* ^ ω ^)',
68
- '(⌒ω⌒)', 'ヽ(*・ω・)ノ', '(o´∀`o)', '(o・ω・o)', '\(^▽^)/',
69
- '(*^ω^)', '(◕‿◕✿)', '(◕ᴥ◕)', 'ʕ•ᴥ•ʔ', 'ʕ→ᴥ←ʔ', '(*^.^*)', '(。♥‿♥。)',
70
- 'OwO', 'uwu', 'uvu', 'UvU', '(* ̄з ̄)', '(つ✧ω✧)つ', '(/ =ω=)/',
71
- '(╯°□°)╯︵ ┻━┻', '┬─┬ ノ( ゜-゜ノ)', '¯\_(ツ)_/¯'
72
- ].freeze
73
-
74
- module Mapping
75
-
76
- MAP_O_TO_OWO = lambda do |input|
77
- replacement = rand(2) > 0 ? 'owo' : 'o'
78
- input.replace(O_TO_OWO, replacement)
79
- end
80
-
81
- MAP_EW_TO_UWU = lambda do |input|
82
- input.replace(EW_TO_UWU, 'uwu')
83
- end
84
-
85
- MAP_HEY_TO_HAY = lambda do |input|
86
- input.replace(HEY_TO_HAY, '\1ay')
87
- end
88
-
89
- MAP_DEAD_TO_DED = lambda do |input|
90
- input = input.replace(DEAD_TO_DED_UPPER, 'Ded')
91
- input.replace(DEAD_TO_DED_LOWER, 'ded')
92
- end
93
-
94
- MAP_N_VOWEL_T_TO_ND = lambda do |input|
95
- input.replace(N_VOWEL_T_TO_ND, 'nd')
96
- end
97
-
98
- MAP_READ_TO_WEAD = lambda do |input|
99
- input = input.replace(READ_TO_WEAD_UPPER, 'Wead')
100
- input.replace(READ_TO_WEAD_LOWER, 'wead')
101
- end
102
-
103
- MAP_BRACKETS_TO_STAR_TRAILS = lambda do |input|
104
- input = input.replace(BRACKETS_TO_STARTRAILS_FORE, '。・:*:・゚★,。・:*:・゚☆')
105
- input.replace(BRACKETS_TO_STARTRAILS_REAR, '☆゚・:*:・。,★゚・:*:・。')
106
- end
107
-
108
- MAP_PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS = lambda do |input|
109
- num = rand * FACES.length
110
- index = num.floor
111
- input = input.replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_FIRST, lambda { " #{FACES[index]}" })
112
-
113
- num = rand * FACES.length
114
- index = num.floor
115
- input.replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_SECOND, lambda { " #{FACES[index]}" })
116
- end
117
-
118
- MAP_THAT_TO_DAT = lambda do |input|
119
- input = input.replace(THAT_TO_DAT_LOWER, 'dat')
120
- input.replace(THAT_TO_DAT_UPPER, 'Dat')
121
- end
122
-
123
- MAP_TH_TO_F = lambda do |input|
124
- input = input.replace(TH_TO_F_LOWER, 'f')
125
- input.replace(TH_TO_F_UPPER, 'F')
126
- end
127
-
128
- MAP_LE_TO_WAL = lambda do |input|
129
- input.replace(LE_TO_WAL, 'wal')
130
- end
131
-
132
- MAP_VE_TO_WE = lambda do |input|
133
- input = input.replace(VE_TO_WE_LOWER, 'we')
134
- input.replace(VE_TO_WE_UPPER, 'We')
135
- end
136
-
137
- MAP_RY_TO_WWY = lambda do |input|
138
- input.replace(RY_TO_WWY, 'wwy')
139
- end
140
-
141
- MAP_R_OR_L_TO_W = lambda do |input|
142
- input = input.replace(RORL_TO_W_LOWER, 'w')
143
- input.replace(RORL_TO_W_UPPER, 'W')
144
- end
145
-
146
- MAP_LL_TO_WW = lambda do |input|
147
- input.replace(LL_TO_WW, 'ww')
148
- end
149
-
150
- MAP_VOWEL_OR_R_EXCEPT_O_L_TO_WL = lambda do |input|
151
- input = input.replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_LOWER, 'wl')
152
- input.replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_UPPER, 'W\1')
153
- end
154
-
155
- MAP_OLD_TO_OWLD = lambda do |input|
156
- input = input.replace(OLD_TO_OWLD_LOWER, '\1wld')
157
- input.replace(OLD_TO_OWLD_UPPER, 'OWLD')
158
- end
159
-
160
- MAP_OL_TO_OWL = lambda do |input|
161
- input = input.replace(OL_TO_OWL_LOWER, '\1wl')
162
- input.replace(OL_TO_OWL_UPPER, 'OWL')
163
- end
164
-
165
- MAP_L_OR_R_O_TO_WO = lambda do |input|
166
- input = input.replace(LORR_O_TO_WO_LOWER, 'wo')
167
- input.replace(LORR_O_TO_WO_UPPER, 'W\1')
168
- end
169
-
170
- MAP_SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO = lambda do |input|
171
- input = input.replace(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_LOWER, '\1wo')
172
- input.replace_with_func_multiple(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_UPPER, lambda do |s1, s2|
173
- msg = s1
174
- msg += s2.upcase == s2 ? 'W' : 'w'
175
- msg += s2
176
- msg
177
- end)
178
- end
179
-
180
- MAP_V_OR_W_LE_TO_WAL = lambda do |input|
181
- input.replace(VORW_LE_TO_WAL, 'wal')
182
- end
183
-
184
- MAP_FI_TO_FWI = lambda do |input|
185
- input = input.replace(FI_TO_FWI_LOWER, '\1wi')
186
- input.replace(FI_TO_FWI_UPPER, 'FWI')
187
- end
188
-
189
- MAP_VER_TO_WER = lambda do |input|
190
- input.replace(VER_TO_WER, 'wer')
191
- end
192
-
193
- MAP_POI_TO_PWOI = lambda do |input|
194
- input.replace(POI_TO_PWOI, '\1woi')
195
- end
196
-
197
- MAP_SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL = lambda do |input|
198
- input.replace(SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL, '\1wal')
199
- end
200
-
201
- MAP_CONSONANT_R_TO_CONSONANT_W = lambda do |input|
202
- input.replace(CONSONANT_R_TO_CONSONANT_W, '\1w')
203
- end
204
-
205
- MAP_LY_TO_WY = lambda do |input|
206
- input = input.replace(LY_TO_WY_LOWER, 'wy')
207
- input.replace(LY_TO_WY_UPPER, 'Wy')
208
- end
209
-
210
- MAP_PLE_TO_PWE = lambda do |input|
211
- input.replace(PLE_TO_PWE, '\1we')
212
- end
213
-
214
- MAP_NR_TO_NW = lambda do |input|
215
- input = input.replace(NR_TO_NW_LOWER, 'nw')
216
- input.replace(NR_TO_NW_UPPER, 'NW')
217
- end
218
-
219
- MAP_FUC_TO_FWUC = lambda do |input|
220
- input.replace(FUC_TO_FWUC, '\1wuc')
221
- end
222
-
223
- MAP_MOM_TO_MWOM = lambda do |input|
224
- input.replace(MOM_TO_MWOM, '\1wom')
225
- end
226
-
227
- MAP_ME_TO_MWE = lambda do |input|
228
- input.replace(ME_TO_MWE, '\1we')
229
- end
230
-
231
- MAP_N_VOWEL_TO_NY = lambda do |input|
232
- input = input.replace(N_VOWEL_TO_NY_FIRST, 'ny\1')
233
- input = input.replace(N_VOWEL_TO_NY_SECOND, 'Ny\1')
234
- input.replace(N_VOWEL_TO_NY_THIRD, 'NY\1')
235
- end
236
-
237
- MAP_OVE_TO_UV = lambda do |input|
238
- input = input.replace(OVE_TO_UV_LOWER, 'uv')
239
- input.replace(OVE_TO_UV_UPPER, 'UV')
240
- end
241
-
242
- MAP_HAHA_TO_HEHE_XD = lambda do |input|
243
- input.replace(HAHA_TO_HEHE_XD, 'hehe xD')
244
- end
245
-
246
- MAP_THE_TO_TEH = lambda do |input|
247
- input.replace(THE_TO_TEH, '\1eh')
248
- end
249
-
250
- MAP_YOU_TO_U = lambda do |input|
251
- input = input.replace(YOU_TO_U_UPPER, 'U')
252
- input.replace(YOU_TO_U_LOWER, 'u')
253
- end
254
-
255
- MAP_TIME_TO_TIM = lambda do |input|
256
- input.replace(TIME_TO_TIM, '\1im')
257
- end
258
-
259
- MAP_OVER_TO_OWOR = lambda do |input|
260
- input.replace(OVER_TO_OWOR, '\1wor')
261
- end
262
-
263
- MAP_WORSE_TO_WOSE = lambda do |input|
264
- input.replace(WORSE_TO_WOSE, '\1ose')
265
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'structures/word'
4
+
5
+ O_TO_OWO = /o/.freeze
6
+ EW_TO_UWU = /ew/.freeze
7
+ HEY_TO_HAY = /([Hh])ey/.freeze
8
+ DEAD_TO_DED_UPPER = /Dead/.freeze
9
+ DEAD_TO_DED_LOWER = /dead/.freeze
10
+ N_VOWEL_T_TO_ND = /n[aeiou]*t/.freeze
11
+ READ_TO_WEAD_UPPER = /Read/.freeze
12
+ READ_TO_WEAD_LOWER = /read/.freeze
13
+ BRACKETS_TO_STARTRAILS_FORE = /[({<]/.freeze
14
+ BRACKETS_TO_STARTRAILS_REAR = /[)}>]/.freeze
15
+ PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_FIRST = /[.,](?![0-9])/.freeze
16
+ PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_SECOND = /[!;]+/.freeze
17
+ THAT_TO_DAT_UPPER = /That/.freeze
18
+ THAT_TO_DAT_LOWER = /that/.freeze
19
+ TH_TO_F_UPPER = /TH(?!E)/.freeze
20
+ TH_TO_F_LOWER = /[Tt]h(?![Ee])/.freeze
21
+ LE_TO_WAL = /le$/.freeze
22
+ VE_TO_WE_UPPER = /Ve/.freeze
23
+ VE_TO_WE_LOWER = /ve/.freeze
24
+ RY_TO_WWY = /ry/.freeze
25
+ RORL_TO_W_UPPER = /(?:R|L)/.freeze
26
+ RORL_TO_W_LOWER = /(?:r|l)/.freeze
27
+ LL_TO_WW = /ll/.freeze
28
+ VOWEL_OR_R_EXCEPT_O_L_TO_WL_UPPER = /[AEIUR]([lL])$/.freeze
29
+ VOWEL_OR_R_EXCEPT_O_L_TO_WL_LOWER = /[aeiur]l$/.freeze
30
+ OLD_TO_OWLD_UPPER = /OLD/.freeze
31
+ OLD_TO_OWLD_LOWER = /([Oo])ld/.freeze
32
+ OL_TO_OWL_UPPER = /OL/.freeze
33
+ OL_TO_OWL_LOWER = /([Oo])l/.freeze
34
+ LORR_O_TO_WO_UPPER = /[LR]([oO])/.freeze
35
+ LORR_O_TO_WO_LOWER = /[lr]o/.freeze
36
+ SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_UPPER = /([BCDFGHJKMNPQSTXYZ])([oO])/.freeze
37
+ SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_LOWER = /([bcdfghjkmnpqstxyz])o/.freeze
38
+ VORW_LE_TO_WAL = /[vw]le/.freeze
39
+ FI_TO_FWI_UPPER = /FI/.freeze
40
+ FI_TO_FWI_LOWER = /([Ff])i/.freeze
41
+ VER_TO_WER = /([Vv])er/.freeze
42
+ POI_TO_PWOI = /([Pp])oi/.freeze
43
+ SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL = /([DdFfGgHhJjPpQqRrSsTtXxYyZz])le$/.freeze
44
+ CONSONANT_R_TO_CONSONANT_W = /([BbCcDdFfGgKkPpQqSsTtWwXxZz])r/.freeze
45
+ LY_TO_WY_UPPER = /Ly/.freeze
46
+ LY_TO_WY_LOWER = /ly/.freeze
47
+ PLE_TO_PWE = /([Pp])le/.freeze
48
+ NR_TO_NW_UPPER = /NR/.freeze
49
+ NR_TO_NW_LOWER = /nr/.freeze
50
+ FUC_TO_FWUC = /([Ff])uc/.freeze
51
+ MOM_TO_MWOM = /([Mm])om/.freeze
52
+ ME_TO_MWE = /([Mm])e/.freeze
53
+ N_VOWEL_TO_NY_FIRST = /n([aeiou])/.freeze
54
+ N_VOWEL_TO_NY_SECOND = /N([aeiou])/.freeze
55
+ N_VOWEL_TO_NY_THIRD = /N([AEIOU])/.freeze
56
+ OVE_TO_UV_UPPER = /OVE/.freeze
57
+ OVE_TO_UV_LOWER = /ove/.freeze
58
+ HAHA_TO_HEHE_XD = /\b(ha|hah|heh|hehe)+\b/.freeze
59
+ THE_TO_TEH = /\b([Tt])he\b/.freeze
60
+ YOU_TO_U_UPPER = /\bYou\b/.freeze
61
+ YOU_TO_U_LOWER = /\byou\b/.freeze
62
+ TIME_TO_TIM = /\b([Tt])ime\b/.freeze
63
+ OVER_TO_OWOR = /([Oo])ver/.freeze
64
+ WORSE_TO_WOSE = /([Ww])orse/.freeze
65
+
66
+ FACES = [
67
+ '(・`ω´・)', ';;w;;', 'owo', 'UwU', '>w<', '^w^', '(* ^ ω ^)',
68
+ '(⌒ω⌒)', 'ヽ(*・ω・)ノ', '(o´∀`o)', '(o・ω・o)', '\(^▽^)/',
69
+ '(*^ω^)', '(◕‿◕✿)', '(◕ᴥ◕)', 'ʕ•ᴥ•ʔ', 'ʕ→ᴥ←ʔ', '(*^.^*)', '(。♥‿♥。)',
70
+ 'OwO', 'uwu', 'uvu', 'UvU', '(* ̄з ̄)', '(つ✧ω✧)つ', '(/ =ω=)/',
71
+ '(╯°□°)╯︵ ┻━┻', '┬─┬ ノ( ゜-゜ノ)', '¯\_(ツ)_/¯'
72
+ ].freeze
73
+
74
+ module Mapping
75
+
76
+ MAP_O_TO_OWO = lambda do |input|
77
+ replacement = rand(2).positive? ? 'owo' : 'o'
78
+ input.replace(O_TO_OWO, replacement)
79
+ end
80
+
81
+ MAP_EW_TO_UWU = lambda do |input|
82
+ input.replace(EW_TO_UWU, 'uwu')
83
+ end
84
+
85
+ MAP_HEY_TO_HAY = lambda do |input|
86
+ input.replace(HEY_TO_HAY, '\1ay')
87
+ end
88
+
89
+ MAP_DEAD_TO_DED = lambda do |input|
90
+ input = input.replace(DEAD_TO_DED_UPPER, 'Ded')
91
+ input.replace(DEAD_TO_DED_LOWER, 'ded')
92
+ end
93
+
94
+ MAP_N_VOWEL_T_TO_ND = lambda do |input|
95
+ input.replace(N_VOWEL_T_TO_ND, 'nd')
96
+ end
97
+
98
+ MAP_READ_TO_WEAD = lambda do |input|
99
+ input = input.replace(READ_TO_WEAD_UPPER, 'Wead')
100
+ input.replace(READ_TO_WEAD_LOWER, 'wead')
101
+ end
102
+
103
+ MAP_BRACKETS_TO_STAR_TRAILS = lambda do |input|
104
+ input = input.replace(BRACKETS_TO_STARTRAILS_FORE, '。・:*:・゚★,。・:*:・゚☆')
105
+ input.replace(BRACKETS_TO_STARTRAILS_REAR, '☆゚・:*:・。,★゚・:*:・。')
106
+ end
107
+
108
+ MAP_PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS = lambda do |input|
109
+ num = rand * FACES.length
110
+ index = num.floor
111
+ input = input.replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_FIRST, lambda { " #{FACES[index]}" })
112
+
113
+ num = rand * FACES.length
114
+ index = num.floor
115
+ input.replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_SECOND, lambda { " #{FACES[index]}" })
116
+ end
117
+
118
+ MAP_THAT_TO_DAT = lambda do |input|
119
+ input = input.replace(THAT_TO_DAT_LOWER, 'dat')
120
+ input.replace(THAT_TO_DAT_UPPER, 'Dat')
121
+ end
122
+
123
+ MAP_TH_TO_F = lambda do |input|
124
+ input = input.replace(TH_TO_F_LOWER, 'f')
125
+ input.replace(TH_TO_F_UPPER, 'F')
126
+ end
127
+
128
+ MAP_LE_TO_WAL = lambda do |input|
129
+ input.replace(LE_TO_WAL, 'wal')
130
+ end
131
+
132
+ MAP_VE_TO_WE = lambda do |input|
133
+ input = input.replace(VE_TO_WE_LOWER, 'we')
134
+ input.replace(VE_TO_WE_UPPER, 'We')
135
+ end
136
+
137
+ MAP_RY_TO_WWY = lambda do |input|
138
+ input.replace(RY_TO_WWY, 'wwy')
139
+ end
140
+
141
+ MAP_R_OR_L_TO_W = lambda do |input|
142
+ input = input.replace(RORL_TO_W_LOWER, 'w')
143
+ input.replace(RORL_TO_W_UPPER, 'W')
144
+ end
145
+
146
+ MAP_LL_TO_WW = lambda do |input|
147
+ input.replace(LL_TO_WW, 'ww')
148
+ end
149
+
150
+ MAP_VOWEL_OR_R_EXCEPT_O_L_TO_WL = lambda do |input|
151
+ input = input.replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_LOWER, 'wl')
152
+ input.replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_UPPER, 'W\1')
153
+ end
154
+
155
+ MAP_OLD_TO_OWLD = lambda do |input|
156
+ input = input.replace(OLD_TO_OWLD_LOWER, '\1wld')
157
+ input.replace(OLD_TO_OWLD_UPPER, 'OWLD')
158
+ end
159
+
160
+ MAP_OL_TO_OWL = lambda do |input|
161
+ input = input.replace(OL_TO_OWL_LOWER, '\1wl')
162
+ input.replace(OL_TO_OWL_UPPER, 'OWL')
163
+ end
164
+
165
+ MAP_L_OR_R_O_TO_WO = lambda do |input|
166
+ input = input.replace(LORR_O_TO_WO_LOWER, 'wo')
167
+ input.replace(LORR_O_TO_WO_UPPER, 'W\1')
168
+ end
169
+
170
+ MAP_SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO = lambda do |input|
171
+ input = input.replace(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_LOWER, '\1wo')
172
+ input.replace_with_func_multiple(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_UPPER, lambda do |s1, s2|
173
+ msg = s1
174
+ msg += s2.upcase == s2 ? 'W' : 'w'
175
+ msg += s2
176
+ msg
177
+ end)
178
+ end
179
+
180
+ MAP_V_OR_W_LE_TO_WAL = lambda do |input|
181
+ input.replace(VORW_LE_TO_WAL, 'wal')
182
+ end
183
+
184
+ MAP_FI_TO_FWI = lambda do |input|
185
+ input = input.replace(FI_TO_FWI_LOWER, '\1wi')
186
+ input.replace(FI_TO_FWI_UPPER, 'FWI')
187
+ end
188
+
189
+ MAP_VER_TO_WER = lambda do |input|
190
+ input.replace(VER_TO_WER, 'wer')
191
+ end
192
+
193
+ MAP_POI_TO_PWOI = lambda do |input|
194
+ input.replace(POI_TO_PWOI, '\1woi')
195
+ end
196
+
197
+ MAP_SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL = lambda do |input|
198
+ input.replace(SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL, '\1wal')
199
+ end
200
+
201
+ MAP_CONSONANT_R_TO_CONSONANT_W = lambda do |input|
202
+ input.replace(CONSONANT_R_TO_CONSONANT_W, '\1w')
203
+ end
204
+
205
+ MAP_LY_TO_WY = lambda do |input|
206
+ input = input.replace(LY_TO_WY_LOWER, 'wy')
207
+ input.replace(LY_TO_WY_UPPER, 'Wy')
208
+ end
209
+
210
+ MAP_PLE_TO_PWE = lambda do |input|
211
+ input.replace(PLE_TO_PWE, '\1we')
212
+ end
213
+
214
+ MAP_NR_TO_NW = lambda do |input|
215
+ input = input.replace(NR_TO_NW_LOWER, 'nw')
216
+ input.replace(NR_TO_NW_UPPER, 'NW')
217
+ end
218
+
219
+ MAP_FUC_TO_FWUC = lambda do |input|
220
+ input.replace(FUC_TO_FWUC, '\1wuc')
221
+ end
222
+
223
+ MAP_MOM_TO_MWOM = lambda do |input|
224
+ input.replace(MOM_TO_MWOM, '\1wom')
225
+ end
226
+
227
+ MAP_ME_TO_MWE = lambda do |input|
228
+ input.replace(ME_TO_MWE, '\1we')
229
+ end
230
+
231
+ MAP_N_VOWEL_TO_NY = lambda do |input|
232
+ input = input.replace(N_VOWEL_TO_NY_FIRST, 'ny\1')
233
+ input = input.replace(N_VOWEL_TO_NY_SECOND, 'Ny\1')
234
+ input.replace(N_VOWEL_TO_NY_THIRD, 'NY\1')
235
+ end
236
+
237
+ MAP_OVE_TO_UV = lambda do |input|
238
+ input = input.replace(OVE_TO_UV_LOWER, 'uv')
239
+ input.replace(OVE_TO_UV_UPPER, 'UV')
240
+ end
241
+
242
+ MAP_HAHA_TO_HEHE_XD = lambda do |input|
243
+ input.replace(HAHA_TO_HEHE_XD, 'hehe xD')
244
+ end
245
+
246
+ MAP_THE_TO_TEH = lambda do |input|
247
+ input.replace(THE_TO_TEH, '\1eh')
248
+ end
249
+
250
+ MAP_YOU_TO_U = lambda do |input|
251
+ input = input.replace(YOU_TO_U_UPPER, 'U')
252
+ input.replace(YOU_TO_U_LOWER, 'u')
253
+ end
254
+
255
+ MAP_TIME_TO_TIM = lambda do |input|
256
+ input.replace(TIME_TO_TIM, '\1im')
257
+ end
258
+
259
+ MAP_OVER_TO_OWOR = lambda do |input|
260
+ input.replace(OVER_TO_OWOR, '\1wor')
261
+ end
262
+
263
+ MAP_WORSE_TO_WOSE = lambda do |input|
264
+ input.replace(WORSE_TO_WOSE, '\1ose')
265
+ end
266
266
  end
@@ -1,28 +1,28 @@
1
- # frozen_string_literal: true
2
-
3
- require 'utility/mapping'
4
-
5
- SPECIFIC_WORD_MAPPING_LIST = [
6
- Mapping::MAP_FUC_TO_FWUC, Mapping::MAP_MOM_TO_MWOM, Mapping::MAP_TIME_TO_TIM, Mapping::MAP_ME_TO_MWE,
7
- Mapping::MAP_N_VOWEL_TO_NY, Mapping::MAP_OVER_TO_OWOR, Mapping::MAP_OVE_TO_UV, Mapping::MAP_HAHA_TO_HEHE_XD,
8
- Mapping::MAP_THE_TO_TEH, Mapping::MAP_YOU_TO_U, Mapping::MAP_READ_TO_WEAD, Mapping::MAP_WORSE_TO_WOSE
9
- ].freeze
10
-
11
- UVU_MAPPING_LIST = [
12
- Mapping::MAP_O_TO_OWO, Mapping::MAP_EW_TO_UWU, Mapping::MAP_HEY_TO_HAY, Mapping::MAP_DEAD_TO_DED,
13
- Mapping::MAP_N_VOWEL_T_TO_ND
14
- ].freeze
15
-
16
- UWU_MAPPING_LIST = [
17
- Mapping::MAP_BRACKETS_TO_STAR_TRAILS, Mapping::MAP_PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS,
18
- Mapping::MAP_THAT_TO_DAT, Mapping::MAP_TH_TO_F, Mapping::MAP_LE_TO_WAL, Mapping::MAP_VE_TO_WE, Mapping::MAP_RY_TO_WWY,
19
- Mapping::MAP_R_OR_L_TO_W
20
- ].freeze
21
-
22
- OWO_MAPPING_LIST = [
23
- Mapping::MAP_LL_TO_WW, Mapping::MAP_VOWEL_OR_R_EXCEPT_O_L_TO_WL, Mapping::MAP_OLD_TO_OWLD,
24
- Mapping::MAP_OL_TO_OWL, Mapping::MAP_L_OR_R_O_TO_WO, Mapping::MAP_SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO,
25
- Mapping::MAP_V_OR_W_LE_TO_WAL, Mapping::MAP_FI_TO_FWI, Mapping::MAP_VER_TO_WER, Mapping::MAP_POI_TO_PWOI,
26
- Mapping::MAP_SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL, Mapping::MAP_CONSONANT_R_TO_CONSONANT_W,
27
- Mapping::MAP_LY_TO_WY, Mapping::MAP_PLE_TO_PWE, Mapping::MAP_NR_TO_NW
28
- ].freeze
1
+ # frozen_string_literal: true
2
+
3
+ require 'utility/mapping'
4
+
5
+ SPECIFIC_WORD_MAPPING_LIST = [
6
+ Mapping::MAP_FUC_TO_FWUC, Mapping::MAP_MOM_TO_MWOM, Mapping::MAP_TIME_TO_TIM, Mapping::MAP_ME_TO_MWE,
7
+ Mapping::MAP_N_VOWEL_TO_NY, Mapping::MAP_OVER_TO_OWOR, Mapping::MAP_OVE_TO_UV, Mapping::MAP_HAHA_TO_HEHE_XD,
8
+ Mapping::MAP_THE_TO_TEH, Mapping::MAP_YOU_TO_U, Mapping::MAP_READ_TO_WEAD, Mapping::MAP_WORSE_TO_WOSE
9
+ ].freeze
10
+
11
+ UVU_MAPPING_LIST = [
12
+ Mapping::MAP_O_TO_OWO, Mapping::MAP_EW_TO_UWU, Mapping::MAP_HEY_TO_HAY, Mapping::MAP_DEAD_TO_DED,
13
+ Mapping::MAP_N_VOWEL_T_TO_ND
14
+ ].freeze
15
+
16
+ UWU_MAPPING_LIST = [
17
+ Mapping::MAP_BRACKETS_TO_STAR_TRAILS, Mapping::MAP_PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS,
18
+ Mapping::MAP_THAT_TO_DAT, Mapping::MAP_TH_TO_F, Mapping::MAP_LE_TO_WAL, Mapping::MAP_VE_TO_WE, Mapping::MAP_RY_TO_WWY,
19
+ Mapping::MAP_R_OR_L_TO_W
20
+ ].freeze
21
+
22
+ OWO_MAPPING_LIST = [
23
+ Mapping::MAP_LL_TO_WW, Mapping::MAP_VOWEL_OR_R_EXCEPT_O_L_TO_WL, Mapping::MAP_OLD_TO_OWLD,
24
+ Mapping::MAP_OL_TO_OWL, Mapping::MAP_L_OR_R_O_TO_WO, Mapping::MAP_SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO,
25
+ Mapping::MAP_V_OR_W_LE_TO_WAL, Mapping::MAP_FI_TO_FWI, Mapping::MAP_VER_TO_WER, Mapping::MAP_POI_TO_PWOI,
26
+ Mapping::MAP_SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL, Mapping::MAP_CONSONANT_R_TO_CONSONANT_W,
27
+ Mapping::MAP_LY_TO_WY, Mapping::MAP_PLE_TO_PWE, Mapping::MAP_NR_TO_NW
28
+ ].freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: owoify_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chehui Chou
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-25 00:00:00.000000000 Z
11
+ date: 2021-03-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This is a Ruby port of mohan-cao's owoify-js, which will help you turn
14
14
  any string into nonsensical babyspeak similar to LeafySweet's infamous Chrome extension.
@@ -27,7 +27,7 @@ homepage: https://github.com/deadshot465/owoify_rb
27
27
  licenses:
28
28
  - MIT
29
29
  metadata: {}
30
- post_install_message:
30
+ post_install_message:
31
31
  rdoc_options: []
32
32
  require_paths:
33
33
  - lib
@@ -42,8 +42,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  requirements: []
45
- rubygems_version: 3.1.2
46
- signing_key:
45
+ rubygems_version: 3.2.3
46
+ signing_key:
47
47
  specification_version: 4
48
48
  summary: Turning your worst nightmare into a Ruby gem.
49
49
  test_files: []