owoify_rb 0.0.2 → 1.0.0

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: 73be1acc0f30a91f9e109f0e17f0a8862740f76d2f3492582ba2018a187aabcc
4
+ data.tar.gz: 4b2b78c349f72689da97a4d2616e218fd33471b244c3b9e13b6f17031961b8c7
5
5
  SHA512:
6
- metadata.gz: 4992903cb3f5d94e40fd5829f755368cce1a57f4321e2460e2555879861a81d62a8e5c9752af1e1bf991bee61042f23a6b56aeed9e9c9aa77c8c4e8daddbda18
7
- data.tar.gz: 4435abf330a1ef569f4dea838a03df583c01372751dcd44a16c07874947a6ffce8da76efb6ecd5a2d11867711d76dd5b350cc6d4a83db492fa3c086778086673
6
+ metadata.gz: 38b9031fe92e33552ff008593a4bdbae9f780fdb595a80c5f32b0938c7a56f80c96899dd6fba08edf0b573ffce233ad98288dbc31c6fd20e764e00a098b68bf2
7
+ data.tar.gz: a5bd3503e6762d12799a8c1b36434809f036c071b75e075f1a8af6d6882eca6bf7c9f3997636b543609afabefab9080270d6cdffc19350e523769093e4227a73
data/lib/owoify_rb.rb CHANGED
@@ -1,50 +1,56 @@
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
+ # Owoify module is the main module where owoify function lies in.
8
+ # Since owoify is literally just a function, users are expected to invoke owoify by calling Owoify.owoify().
9
+ module Owoify
10
+ # The main entry point of the owoify function.
11
+ # Pass in the source string and the desired owoify level.
12
+ # @param [String] source The source string to owoify.
13
+ # @param [Symbol] level The desired owoness level of the result string.
14
+ # @return [String] The owoified string according to the specified owoness level.
15
+ def self.owoify(source, level = :owo)
16
+ word_matches = source.scan(/[^\s]+/).flatten
17
+ space_matches = source.scan(/\s+/).flatten
18
+ words = word_matches.map { |x| Word.new(x) }
19
+ spaces = space_matches.map { |x| Word.new(x) }
20
+ words.map! do |w|
21
+ SPECIFIC_WORD_MAPPING_LIST.each do |f|
22
+ w = f.call(w)
23
+ end
24
+ case level
25
+ when :owo
26
+ OWO_MAPPING_LIST.each do |f|
27
+ w = f.call(w)
28
+ end
29
+ when :uwu
30
+ UWU_MAPPING_LIST.each do |f|
31
+ w = f.call(w)
32
+ end
33
+ OWO_MAPPING_LIST.each do |f|
34
+ w = f.call(w)
35
+ end
36
+ when :uvu
37
+ UVU_MAPPING_LIST.each do |f|
38
+ w = f.call(w)
39
+ end
40
+ UWU_MAPPING_LIST.each do |f|
41
+ w = f.call(w)
42
+ end
43
+ OWO_MAPPING_LIST.each do |f|
44
+ w = f.call(w)
45
+ end
46
+ else
47
+ raise ArgumentError, 'The specified owoify level is not supported.'
48
+ end
49
+ w
50
+ end
51
+
52
+ result = interleave_arrays(words, spaces)
53
+ result_strings = result.map(&:to_s)
54
+ result_strings.join
55
+ end
56
+ 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
+
4
+ def interleave_arrays(a, b)
5
+ arr = []
6
+ observed = a
7
+ other = b
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,265 @@
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
266
- 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.replace(DEAD_TO_DED_UPPER, 'Ded')
91
+ .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.replace(READ_TO_WEAD_UPPER, 'Wead')
100
+ .replace(READ_TO_WEAD_LOWER, 'wead')
101
+ end
102
+
103
+ MAP_BRACKETS_TO_STAR_TRAILS = lambda do |input|
104
+ input.replace(BRACKETS_TO_STARTRAILS_FORE, '。・:*:・゚★,。・:*:・゚☆')
105
+ .replace(BRACKETS_TO_STARTRAILS_REAR, '☆゚・:*:・。,★゚・:*:・。')
106
+ end
107
+
108
+ MAP_PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS = lambda do |input|
109
+ input.replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_FIRST, lambda {
110
+ " #{FACES[rand(FACES.length)]}"
111
+ })
112
+ .replace_with_func_single(PERIOD_COMMA_EXCLAMATION_SEMICOLON_TO_KAOMOJIS_SECOND, lambda {
113
+ " #{FACES[rand(FACES.length)]}"
114
+ })
115
+ end
116
+
117
+ MAP_THAT_TO_DAT = lambda do |input|
118
+ input.replace(THAT_TO_DAT_LOWER, 'dat')
119
+ .replace(THAT_TO_DAT_UPPER, 'Dat')
120
+ end
121
+
122
+ MAP_TH_TO_F = lambda do |input|
123
+ input.replace(TH_TO_F_LOWER, 'f')
124
+ .replace(TH_TO_F_UPPER, 'F')
125
+ end
126
+
127
+ MAP_LE_TO_WAL = lambda do |input|
128
+ input.replace(LE_TO_WAL, 'wal')
129
+ end
130
+
131
+ MAP_VE_TO_WE = lambda do |input|
132
+ input.replace(VE_TO_WE_LOWER, 'we')
133
+ .replace(VE_TO_WE_UPPER, 'We')
134
+ end
135
+
136
+ MAP_RY_TO_WWY = lambda do |input|
137
+ input.replace(RY_TO_WWY, 'wwy')
138
+ end
139
+
140
+ MAP_R_OR_L_TO_W = lambda do |input|
141
+ input.replace(RORL_TO_W_LOWER, 'w')
142
+ .replace(RORL_TO_W_UPPER, 'W')
143
+ end
144
+
145
+ MAP_LL_TO_WW = lambda do |input|
146
+ input.replace(LL_TO_WW, 'ww')
147
+ end
148
+
149
+ MAP_VOWEL_OR_R_EXCEPT_O_L_TO_WL = lambda do |input|
150
+ input.replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_LOWER, 'wl')
151
+ .replace(VOWEL_OR_R_EXCEPT_O_L_TO_WL_UPPER, 'W\1')
152
+ end
153
+
154
+ MAP_OLD_TO_OWLD = lambda do |input|
155
+ input.replace(OLD_TO_OWLD_LOWER, '\1wld')
156
+ .replace(OLD_TO_OWLD_UPPER, 'OWLD')
157
+ end
158
+
159
+ MAP_OL_TO_OWL = lambda do |input|
160
+ input.replace(OL_TO_OWL_LOWER, '\1wl')
161
+ .replace(OL_TO_OWL_UPPER, 'OWL')
162
+ end
163
+
164
+ MAP_L_OR_R_O_TO_WO = lambda do |input|
165
+ input.replace(LORR_O_TO_WO_LOWER, 'wo')
166
+ .replace(LORR_O_TO_WO_UPPER, 'W\1')
167
+ end
168
+
169
+ MAP_SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO = lambda do |input|
170
+ input.replace(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_LOWER, '\1wo')
171
+ .replace_with_func_multiple(SPECIFIC_CONSONANTS_O_TO_LETTER_AND_WO_UPPER, lambda do |s1, s2|
172
+ msg = s1
173
+ msg += s2.upcase == s2 ? 'W' : 'w'
174
+ msg += s2
175
+ msg
176
+ end)
177
+ end
178
+
179
+ MAP_V_OR_W_LE_TO_WAL = lambda do |input|
180
+ input.replace(VORW_LE_TO_WAL, 'wal')
181
+ end
182
+
183
+ MAP_FI_TO_FWI = lambda do |input|
184
+ input.replace(FI_TO_FWI_LOWER, '\1wi')
185
+ .replace(FI_TO_FWI_UPPER, 'FWI')
186
+ end
187
+
188
+ MAP_VER_TO_WER = lambda do |input|
189
+ input.replace(VER_TO_WER, 'wer')
190
+ end
191
+
192
+ MAP_POI_TO_PWOI = lambda do |input|
193
+ input.replace(POI_TO_PWOI, '\1woi')
194
+ end
195
+
196
+ MAP_SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL = lambda do |input|
197
+ input.replace(SPECIFIC_CONSONANTS_LE_TO_LETTER_AND_WAL, '\1wal')
198
+ end
199
+
200
+ MAP_CONSONANT_R_TO_CONSONANT_W = lambda do |input|
201
+ input.replace(CONSONANT_R_TO_CONSONANT_W, '\1w')
202
+ end
203
+
204
+ MAP_LY_TO_WY = lambda do |input|
205
+ input.replace(LY_TO_WY_LOWER, 'wy')
206
+ .replace(LY_TO_WY_UPPER, 'Wy')
207
+ end
208
+
209
+ MAP_PLE_TO_PWE = lambda do |input|
210
+ input.replace(PLE_TO_PWE, '\1we')
211
+ end
212
+
213
+ MAP_NR_TO_NW = lambda do |input|
214
+ input.replace(NR_TO_NW_LOWER, 'nw')
215
+ .replace(NR_TO_NW_UPPER, 'NW')
216
+ end
217
+
218
+ MAP_FUC_TO_FWUC = lambda do |input|
219
+ input.replace(FUC_TO_FWUC, '\1wuc')
220
+ end
221
+
222
+ MAP_MOM_TO_MWOM = lambda do |input|
223
+ input.replace(MOM_TO_MWOM, '\1wom')
224
+ end
225
+
226
+ MAP_ME_TO_MWE = lambda do |input|
227
+ input.replace(ME_TO_MWE, '\1we')
228
+ end
229
+
230
+ MAP_N_VOWEL_TO_NY = lambda do |input|
231
+ input.replace(N_VOWEL_TO_NY_FIRST, 'ny\1')
232
+ .replace(N_VOWEL_TO_NY_SECOND, 'Ny\1')
233
+ .replace(N_VOWEL_TO_NY_THIRD, 'NY\1')
234
+ end
235
+
236
+ MAP_OVE_TO_UV = lambda do |input|
237
+ input.replace(OVE_TO_UV_LOWER, 'uv')
238
+ .replace(OVE_TO_UV_UPPER, 'UV')
239
+ end
240
+
241
+ MAP_HAHA_TO_HEHE_XD = lambda do |input|
242
+ input.replace(HAHA_TO_HEHE_XD, 'hehe xD')
243
+ end
244
+
245
+ MAP_THE_TO_TEH = lambda do |input|
246
+ input.replace(THE_TO_TEH, '\1eh')
247
+ end
248
+
249
+ MAP_YOU_TO_U = lambda do |input|
250
+ input.replace(YOU_TO_U_UPPER, 'U')
251
+ .replace(YOU_TO_U_LOWER, 'u')
252
+ end
253
+
254
+ MAP_TIME_TO_TIM = lambda do |input|
255
+ input.replace(TIME_TO_TIM, '\1im')
256
+ end
257
+
258
+ MAP_OVER_TO_OWOR = lambda do |input|
259
+ input.replace(OVER_TO_OWOR, '\1wor')
260
+ end
261
+
262
+ MAP_WORSE_TO_WOSE = lambda do |input|
263
+ input.replace(WORSE_TO_WOSE, '\1ose')
264
+ end
265
+ 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: 1.0.0
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: 2022-04-24 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.3.7
46
+ signing_key:
47
47
  specification_version: 4
48
48
  summary: Turning your worst nightmare into a Ruby gem.
49
49
  test_files: []