rumoji 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -5
- data/Gemfile +1 -5
- data/README.md +8 -5
- data/bin/rumoji +5 -1
- data/lib/rumoji.rb +4 -44
- data/lib/rumoji/emoji.rb +10 -12
- data/lib/rumoji/emoji/nature.rb +20 -0
- data/lib/rumoji/emoji/objects.rb +52 -1
- data/lib/rumoji/emoji/people.rb +34 -1
- data/lib/rumoji/emoji/places.rb +40 -0
- data/lib/rumoji/emoji/symbols.rb +7 -1
- data/lib/rumoji/version.rb +1 -1
- data/spec/rumoji/emoji_spec.rb +0 -7
- data/spec/rumoji_spec.rb +43 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d83823b144c636ce611e5e87d07fd4623b9197b2
|
4
|
+
data.tar.gz: bbf3349521e988be0cabf61970a4cad2faf901e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4046adf578b2bf4d84edfaf06f6d245f54a4d56afda351354aed64b37d16f65f5bf6bb80901e2eab0d651d40e7e7584b1cf6c914b5502b153662dfea4f80e3cf
|
7
|
+
data.tar.gz: 1cf5c46f092e4384cd4886f7f2cddbd7feb74513a9dbfa8d240ccddf8586eae40826bd9ccc7c5ed5e69cfe81683fd620aae447d803ecb34701eb4d84a96df848
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -6,9 +6,13 @@ Why would you want to do this? Read this blog post: http://mwunsch.tumblr.com/po
|
|
6
6
|
|
7
7
|
## tl;dr
|
8
8
|
|
9
|
-
|
9
|
+
>By doing this, you can ensure that users across devices can see the
|
10
|
+
>author’s intention. You can always show users an image, but you can’t
|
11
|
+
>show them a range of characters their system does not support.
|
10
12
|
|
11
|
-
|
13
|
+
This gem is primarily for handling emoji characters in user-generated
|
14
|
+
content. Depending on your technical stack, these characters could end
|
15
|
+
up being lost.
|
12
16
|
|
13
17
|
## Usage
|
14
18
|
|
@@ -29,7 +33,7 @@ Why would you want to do this? Read this blog post: http://mwunsch.tumblr.com/po
|
|
29
33
|
|
30
34
|
gem install rumoji
|
31
35
|
|
32
|
-
Note that rumoji has only been tested in
|
36
|
+
Note that rumoji has only been tested in Rubies >= 1.9!!!
|
33
37
|
|
34
38
|
### Some examples:
|
35
39
|
|
@@ -53,5 +57,4 @@ _Having trouble discerning what's happening in this README?_ You might be on a d
|
|
53
57
|
Thanks!
|
54
58
|
|
55
59
|
## Copyright
|
56
|
-
Copyright (c) 2012 -
|
57
|
-
|
60
|
+
Copyright (c) 2012 - 2016 Mark Wunsch. Licensed under the [MIT License](http://opensource.org/licenses/mit-license.php).
|
data/bin/rumoji
CHANGED
data/lib/rumoji.rb
CHANGED
@@ -8,49 +8,18 @@ module Rumoji
|
|
8
8
|
|
9
9
|
# Transform emoji into its cheat-sheet code
|
10
10
|
def encode(str)
|
11
|
-
|
12
|
-
encode_io(io).string
|
11
|
+
str.gsub(Emoji::ALL_REGEXP) { |match| (emoji = Emoji.find_by_string(match)) && emoji.code || match }
|
13
12
|
end
|
14
13
|
|
15
14
|
# Transform a cheat-sheet code into an Emoji
|
16
15
|
def decode(str)
|
17
|
-
str.gsub(/:([
|
16
|
+
str.gsub(/:([^\s:]?[\w-]+):/) {|sym| (Emoji.find($1.intern) || sym).to_s }
|
18
17
|
end
|
19
18
|
|
20
19
|
def encode_io(readable, writeable=StringIO.new(""))
|
21
|
-
|
22
|
-
|
23
|
-
readable.each_codepoint do |codepoint|
|
24
|
-
possible_emoji = Emoji.select_by_codepoint(codepoint)
|
25
|
-
|
26
|
-
sequence = if possible_emoji.empty?
|
27
|
-
# If this codepoint is not part of an emoji
|
28
|
-
# just write it back out, along with any previously stored codepoints.
|
29
|
-
dump_codepoints_to_string(previous_codepoints << codepoint)
|
30
|
-
elsif !possible_emoji.any?(&:multiple?)
|
31
|
-
# If this codepoint is part of an emoji, but not one
|
32
|
-
# that contains multiple codepoints, write out the
|
33
|
-
# first possiblity's cheat code and the previously stored codepoints
|
34
|
-
dump_codepoints_to_string(previous_codepoints) << possible_emoji.first.code
|
35
|
-
else
|
36
|
-
# This codepoint is a part of an emoji with multiple
|
37
|
-
# codepoints, so push it onto the stack.
|
38
|
-
previous_codepoints.push(codepoint)
|
39
|
-
# Check and see if this completes the emoji, otherwise,
|
40
|
-
# write out an empty string.
|
41
|
-
if found = possible_emoji.find {|e| e.codepoints.eql?(previous_codepoints) }
|
42
|
-
previous_codepoints.clear and found.code
|
43
|
-
else
|
44
|
-
""
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
writeable.write sequence
|
20
|
+
readable.each_line do |line|
|
21
|
+
writeable.write encode(line)
|
49
22
|
end
|
50
|
-
|
51
|
-
# Write any remaining codepoints.
|
52
|
-
writeable.write dump_codepoints_to_string(previous_codepoints) if previous_codepoints.any?
|
53
|
-
|
54
23
|
writeable
|
55
24
|
end
|
56
25
|
|
@@ -60,13 +29,4 @@ module Rumoji
|
|
60
29
|
end
|
61
30
|
writeable
|
62
31
|
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def dump_codepoints_to_string(codepoints)
|
67
|
-
codepoints.pack("U*").tap do
|
68
|
-
codepoints.clear
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
32
|
end
|
data/lib/rumoji/emoji.rb
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
module Rumoji
|
3
3
|
class Emoji
|
4
4
|
|
5
|
-
attr_reader :name
|
5
|
+
attr_reader :name, :string
|
6
6
|
|
7
7
|
def initialize(string, symbols, name = nil)
|
8
|
+
@string = string
|
8
9
|
@codepoints = string.codepoints
|
9
10
|
@cheat_codes = [symbols].flatten
|
10
11
|
@name = name || @cheat_codes.first.to_s.upcase.gsub("_", " ")
|
@@ -23,7 +24,7 @@ module Rumoji
|
|
23
24
|
end
|
24
25
|
|
25
26
|
def to_s
|
26
|
-
|
27
|
+
@string
|
27
28
|
end
|
28
29
|
|
29
30
|
def hash
|
@@ -31,7 +32,7 @@ module Rumoji
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def hex
|
34
|
-
@codepoints.map{|point| point.to_s(16).upcase }.join("-")
|
35
|
+
@hex ||= @codepoints.map{|point| point.to_s(16).upcase }.join("-")
|
35
36
|
end
|
36
37
|
|
37
38
|
def codepoints
|
@@ -50,21 +51,18 @@ module Rumoji
|
|
50
51
|
|
51
52
|
ALL = PEOPLE | NATURE | OBJECTS | PLACES | SYMBOLS
|
52
53
|
|
54
|
+
ALL_REGEXP = Regexp.new(ALL.map(&:string).join('|'))
|
55
|
+
|
53
56
|
def self.find(symbol)
|
54
57
|
ALL.find {|emoji| emoji.include? symbol }
|
55
58
|
end
|
56
59
|
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.select_by_codepoint(codepoint)
|
62
|
-
ALL.select {|emoji| emoji.codepoints.include? codepoint }
|
60
|
+
STRING_LOOKUP = ALL.each.with_object({}) do |emoji, lookup|
|
61
|
+
lookup[emoji.string] = emoji
|
63
62
|
end
|
64
63
|
|
65
|
-
def self.
|
66
|
-
|
64
|
+
def self.find_by_string(string)
|
65
|
+
STRING_LOOKUP[string]
|
67
66
|
end
|
68
|
-
|
69
67
|
end
|
70
68
|
end
|
data/lib/rumoji/emoji/nature.rb
CHANGED
@@ -15,6 +15,16 @@ module Rumoji
|
|
15
15
|
self.new("\u{1F300}", [:cyclone]), # "typhoon, hurricane
|
16
16
|
self.new("\u{1F301}", [:foggy]),
|
17
17
|
self.new("\u{1F30A}", [:ocean], "WATER WAVE"),
|
18
|
+
self.new("\u{1F324}", [:sun_behind_small_cloud], "WHITE SUN WITH SMALL CLOUD"),
|
19
|
+
self.new("\u{1F325}", [:sun_behind_large_cloud], "WHITE SUN BEHIND CLOUD"),
|
20
|
+
self.new("\u{1F326}", [:sun_behind_cloud_with_rain], "WHITE SUN BEHIND CLOUD WITH RAIN"),
|
21
|
+
self.new("\u{1F327}", [:cloud_with_rain], "CLOUD WITH RAIN"),
|
22
|
+
self.new("\u{1F328}", [:cloud_with_snow], "CLOUD WITH SNOW"),
|
23
|
+
self.new("\u{1F329}", [:cloud_with_lightning], "CLOUD WITH LIGHTNING"),
|
24
|
+
self.new("\u{1F32A}", [:cloud_with_tornado], "CLOUD WITH TORNADO"),
|
25
|
+
self.new("\u{1F32B}", [:fog], "FOG"),
|
26
|
+
self.new("\u{1F32C}", [:wind_face], "WIND BLOWING FACE"),
|
27
|
+
|
18
28
|
# Animals
|
19
29
|
self.new("\u{1F431}", [:cat], "CAT FACE"),
|
20
30
|
self.new("\u{1F436}", [:dog], "DOG FACE"),
|
@@ -78,6 +88,15 @@ module Rumoji
|
|
78
88
|
self.new("\u{1F408}", [:cat2], "CAT"),
|
79
89
|
self.new("\u{1F429}", [:poodle]),
|
80
90
|
self.new("\u{1F43E}", [:paw_prints]),
|
91
|
+
self.new("\u{1F981}", [:lion]),
|
92
|
+
self.new("\u{1F984}", [:unicorn]),
|
93
|
+
self.new("\u{1F983}", [:turkey]),
|
94
|
+
self.new("\u{1F980}", [:crab]),
|
95
|
+
self.new("\u{1F982}", [:scorpion]),
|
96
|
+
self.new("\u{1f577}", [:spider]),
|
97
|
+
self.new("\u{1f578}", [:spider_web]),
|
98
|
+
self.new("\u{1f54A}", [:dove_of_peace]),
|
99
|
+
self.new("\u{1F43F}", [:chipmunk]),
|
81
100
|
# Flowers
|
82
101
|
self.new("\u{1F490}", [:bouquet]),
|
83
102
|
self.new("\u{1F338}", [:cherry_blossom]),
|
@@ -101,6 +120,7 @@ module Rumoji
|
|
101
120
|
self.new("\u{1F33E}", [:ear_of_rice]),
|
102
121
|
self.new("\u{1F41A}", [:shell], "SPIRAL SHELL"),
|
103
122
|
self.new("\u{1F310}", [:globe_with_meridians]), # "used to indicate international input source, world clocks with time zones, etc."
|
123
|
+
self.new("\u{1F3F5}", [:rosette]),
|
104
124
|
# Moon
|
105
125
|
self.new("\u{1F31E}", [:sun_with_face]),
|
106
126
|
self.new("\u{1F31D}", [:full_moon_with_face]),
|
data/lib/rumoji/emoji/objects.rb
CHANGED
@@ -259,7 +259,58 @@ module Rumoji
|
|
259
259
|
self.new("\u{1f45a}", [:womans_clothes]),
|
260
260
|
self.new("\u{1f452}", [:womans_hat]),
|
261
261
|
self.new("\u{1f527}", [:wrench]),
|
262
|
-
self.new("\u{1f4b4}", [:yen])
|
262
|
+
self.new("\u{1f4b4}", [:yen]),
|
263
|
+
self.new("\u{1f6CD}", [:shopping_bags], "SHOPPING BAGS"),
|
264
|
+
self.new("\u{1f4ff}", [:prayer_beads], "PRAYER BEADS"),
|
265
|
+
self.new("\u{1f336}", [:hot_pepper]),
|
266
|
+
self.new("\u{1f9c0}", [:cheese_wedge]),
|
267
|
+
self.new("\u{1f32d}", [:hot_dog]),
|
268
|
+
self.new("\u{1f32e}", [:taco]),
|
269
|
+
self.new("\u{1f32f}", [:burrito]),
|
270
|
+
self.new("\u{1f37f}", [:popcorn]),
|
271
|
+
self.new("\u{1f37e}", [:bottle_popping_cork]),
|
272
|
+
self.new("\u{1f3fa}", [:amphora]),
|
273
|
+
self.new("\u{1f579}", [:joystick]),
|
274
|
+
self.new("\u{1f3f9}", [:bow_arrow]),
|
275
|
+
self.new("\u{1f5e1}", [:dagger_knife]),
|
276
|
+
self.new("\u{1f3f3}", [:waving_white_flag]),
|
277
|
+
self.new("\u{1f3f4}", [:waving_black_flag]),
|
278
|
+
self.new("\u{1f6e2}", [:oil_drum]),
|
279
|
+
self.new("\u{1f6e1}", [:shield]),
|
280
|
+
self.new("\u{1f5dc}", [:compression]),
|
281
|
+
self.new("\u{1f6e0}", [:hammer_wrench]),
|
282
|
+
self.new("\u{1f5dd}", [:old_key]),
|
283
|
+
self.new("\u{1f5d1}", [:wastebasket]),
|
284
|
+
self.new("\u{1f5c4}", [:file_cabinet]),
|
285
|
+
self.new("\u{1f5c3}", [:card_file_box]),
|
286
|
+
self.new("\u{1f587}", [:linked_paperclips]),
|
287
|
+
self.new("\u{1f5d3}", [:spiral_calendar]),
|
288
|
+
self.new("\u{1f5d2}", [:spiral_note_pad]),
|
289
|
+
self.new("\u{1f5c2}", [:card_index_dividers]),
|
290
|
+
self.new("\u{1f58d}", [:lower_left_crayon]),
|
291
|
+
self.new("\u{1f58c}", [:lower_left_paintbrush]),
|
292
|
+
self.new("\u{1f58a}", [:lower_left_ballpoint]),
|
293
|
+
self.new("\u{1f58b}", [:lower_left_fountain]),
|
294
|
+
self.new("\u{1f5f3}", [:ballot_box_with_ballot]),
|
295
|
+
self.new("\u{1f5de}", [:rollet_newspaper]),
|
296
|
+
self.new("\u{1f56f}", [:candle]),
|
297
|
+
self.new("\u{1f4f8}", [:camera_flash]),
|
298
|
+
self.new("\u{1f4fd}", [:film_projector]),
|
299
|
+
self.new("\u{1f5b2}", [:trackball]),
|
300
|
+
self.new("\u{1f5b1}", [:three_button_mouse]),
|
301
|
+
self.new("\u{1f5a8}", [:printer]),
|
302
|
+
self.new("\u{1f4bb}", [:desktop_computer]),
|
303
|
+
self.new("\u{1f39b}", [:control_knobs]),
|
304
|
+
self.new("\u{1f39a}", [:level_slider]),
|
305
|
+
self.new("\u{1f399}", [:studio_microphone]),
|
306
|
+
self.new("\u{1f321}", [:thermometer]),
|
307
|
+
self.new("\u{1f570}", [:mantelpiece_clock]),
|
308
|
+
self.new("\u{1f6cb}", [:couch_lamp]),
|
309
|
+
self.new("\u{1f6cf}", [:bed]),
|
310
|
+
self.new("\u{1f6cc}", [:person_bed]),
|
311
|
+
self.new("\u{1f6ce}", [:bellhop_bell]),
|
312
|
+
self.new("\u{1f37d}", [:fork_knife_plate]),
|
313
|
+
|
263
314
|
]
|
264
315
|
end
|
265
316
|
end
|
data/lib/rumoji/emoji/people.rb
CHANGED
@@ -6,7 +6,7 @@ require 'set'
|
|
6
6
|
module Rumoji
|
7
7
|
class Emoji
|
8
8
|
PEOPLE = Set[
|
9
|
-
self.new("\u{1F604}", [:smile], "SMILING FACE WITH OPEN MOUTH AND SMILING EYES"),
|
9
|
+
self.new("\u{1F604}", [:smile, :simple_smile], "SMILING FACE WITH OPEN MOUTH AND SMILING EYES"),
|
10
10
|
self.new("\u{1F606}", [:laughing], "SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES"),
|
11
11
|
self.new("\u{1F60A}", [:blush], "SMILING FACE WITH SMILING EYES"),
|
12
12
|
self.new("\u{1F603}", [:smiley], "SMILING FACE WITH OPEN MOUTH"),
|
@@ -93,6 +93,23 @@ module Rumoji
|
|
93
93
|
self.new("\u{1F3B6}", [:notes], "MULTIPLE MUSICAL NOTES"), # "dancing notes, mood, melody"
|
94
94
|
self.new("\u{1F3B5}", [:musical_note]), # "music, being in good mood"
|
95
95
|
self.new("\u{1F525}", [:fire], "FIRE"),
|
96
|
+
self.new("\u{1F917}", [:hugging], "HUGGING FACE"),
|
97
|
+
self.new("\u{1F914}", [:thinking], "THINKING FACE"),
|
98
|
+
self.new("\u{1F644}", [:rolling_eyes], "FACE WITH ROLLING EYES"),
|
99
|
+
self.new("\u{1F910}", [:zipper_mouth], "ZIPPER-MOUTH FACE"),
|
100
|
+
self.new("\u{1F913}", [:nerd], "NERD FACE"),
|
101
|
+
self.new("\u{1F643}", [:upside_down], "UPSIDE-DOWN FACE"),
|
102
|
+
self.new("\u{1F912}", [:face_thermometer], "FACE WITH THERMOMETER"),
|
103
|
+
self.new("\u{1F915}", [:head_bandage], "FACE WITH HEAD-BANDAGE"),
|
104
|
+
self.new("\u{1F911}", [:money_mouth], "MONEY-MOUTH FACE"),
|
105
|
+
self.new("\u{1F916}", [:robot], "ROBOT FACE"),
|
106
|
+
self.new("\u{1F575}", [:sleuth], "SLEUTH OR SPY"),
|
107
|
+
self.new("\u{1F3CB}", [:weight_lifter], "WEIGHT LIFTER"),
|
108
|
+
self.new("\u{1F3CC}", [:golfer], "GOLFER"),
|
109
|
+
self.new("\u{1F574}", [:man_levitating], "MAN IN BUSINESS SUIT LEVITATING"),
|
110
|
+
self.new("\u{1F641}", [:slightly_frowning], "SLIGHTLY FROWNING FACE"),
|
111
|
+
self.new("\u{1F642}", [:slightly_smiling], "SLIGHTLY SMILING FACE"),
|
112
|
+
|
96
113
|
# Poop
|
97
114
|
self.new("\u{1F4A9}", [:poop, :hankey, :shit], "PILE OF POO"), # "dog dirt"
|
98
115
|
self.new("\u{1F44D}", [:thumbsup, :"+1"], "THUMBS UP SIGN"),
|
@@ -148,6 +165,11 @@ module Rumoji
|
|
148
165
|
self.new("\u{1F46E}", [:cop], "POLICE OFFICER"),
|
149
166
|
self.new("\u{1F47C}", [:angel], "BABY ANGEL"),
|
150
167
|
self.new("\u{1F478}", [:princess]),
|
168
|
+
self.new("\u{1F595}", [:middle_finger], "REVERSED HAND WITH MIDDLE FINGER EXTENDED"),
|
169
|
+
self.new("\u{1F596}", [:vulcan_salute], "RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS"), # vulcan salute
|
170
|
+
self.new("\u{1F918}", [:sign_horns], "SIGN OF THE HORNS"),
|
171
|
+
self.new("\u{1F590}", [:fingers_splayed], "RAISED HAND WITH FINGERS SPLAYED"),
|
172
|
+
|
151
173
|
# Cats
|
152
174
|
self.new("\u{1F63A}", [:smiley_cat], "SMILING CAT FACE WITH OPEN MOUTH"),
|
153
175
|
self.new("\u{1F638}", [:smile_cat], "GRINNING CAT FACE WITH SMILING EYES"),
|
@@ -179,6 +201,17 @@ module Rumoji
|
|
179
201
|
self.new("\u{1F465}", [:busts_in_silhouette]), # "accounts"
|
180
202
|
self.new("\u{1F4AC}", [:speech_balloon]), # "comic book conversation bubble"
|
181
203
|
self.new("\u{1F4AD}", [:thought_balloon]),
|
204
|
+
self.new("\u{1F5E8}", [:left_speech], "LEFT SPEECH BUBBLE"),
|
205
|
+
self.new("\u{1F5EF}", [:right_answer], "RIGHT ANSWER BUBBLE"),
|
206
|
+
self.new("\u{1F573}", [:hole], "HOLE"),
|
207
|
+
self.new("\u{1F576}", [:dark_sunglasses], "DARK SUNGLASSES"),
|
208
|
+
self.new("\u{1F5E3}", [:speaking_head]),
|
209
|
+
self.new("\u{1F441}", [:eye]),
|
210
|
+
self.new("\u{1F3FB}", [:type_1_2]),
|
211
|
+
self.new("\u{1F3FC}", [:type_3]),
|
212
|
+
self.new("\u{1F3FD}", [:type_4]),
|
213
|
+
self.new("\u{1F3FE}", [:type_5]),
|
214
|
+
self.new("\u{1F3FF}", [:type_6]),
|
182
215
|
]
|
183
216
|
end
|
184
217
|
end
|
data/lib/rumoji/emoji/places.rb
CHANGED
@@ -97,6 +97,46 @@ module Rumoji
|
|
97
97
|
self.new("\u{1f6a6}", [:vertical_traffic_light]),
|
98
98
|
self.new("\u{26a0}" , [:warning]),
|
99
99
|
self.new("\u{1f492}", [:wedding]),
|
100
|
+
self.new("\u{1f54b}", [:kaaba]),
|
101
|
+
self.new("\u{1f54c}", [:mosque]),
|
102
|
+
self.new("\u{1f54d}", [:synagogue]),
|
103
|
+
self.new("\u{1f3ce}", [:racing_car]),
|
104
|
+
self.new("\u{1f3cd}", [:racing_motorcycle]),
|
105
|
+
self.new("\u{1f3c5}", [:sports_medal]),
|
106
|
+
self.new("\u{1f3cf}", [:cricket_bat_ball]),
|
107
|
+
self.new("\u{1f3d0}", [:volleyball]),
|
108
|
+
self.new("\u{1f3d1}", [:field_hockey_stick]),
|
109
|
+
self.new("\u{1f3d2}", [:ice_hockey_stick]),
|
110
|
+
self.new("\u{1f3d3}", [:table_tennis_paddle]),
|
111
|
+
self.new("\u{1f3f8}", [:badminton_racquet]),
|
112
|
+
self.new("\u{1f3f7}", [:label]),
|
113
|
+
self.new("\u{1f39f}", [:admission_tickets]),
|
114
|
+
self.new("\u{1f39e}", [:film_frames]),
|
115
|
+
self.new("\u{1f397}", [:reminder_ribbon]),
|
116
|
+
self.new("\u{1f396}", [:military_medal]),
|
117
|
+
self.new("\u{1f6f0}", [:satellite]),
|
118
|
+
self.new("\u{1f6ec}", [:airplane_landing]),
|
119
|
+
self.new("\u{1f6eb}", [:airplane_departing]),
|
120
|
+
self.new("\u{1f6e9}", [:small_airplane]),
|
121
|
+
self.new("\u{1f6e5}", [:motor_boat]),
|
122
|
+
self.new("\u{1f6f3}", [:passenger_ship]),
|
123
|
+
self.new("\u{1f6e4}", [:railway_track]),
|
124
|
+
self.new("\u{1f6e3}", [:motorway]),
|
125
|
+
self.new("\u{1f5bc}", [:frame_with_picture]),
|
126
|
+
self.new("\u{1f3da}", [:derelict_house_building]),
|
127
|
+
self.new("\u{1f3d9}", [:cityscape]),
|
128
|
+
self.new("\u{1f3d8}", [:house_buildings]),
|
129
|
+
self.new("\u{1f3d7}", [:building_construction]),
|
130
|
+
self.new("\u{1f3db}", [:classical_building]),
|
131
|
+
self.new("\u{1f3df}", [:stadium]),
|
132
|
+
self.new("\u{1f3de}", [:national_park]),
|
133
|
+
self.new("\u{1f3dd}", [:desert_island]),
|
134
|
+
self.new("\u{1f3dc}", [:desert]),
|
135
|
+
self.new("\u{1f3d6}", [:beach_umbrella]),
|
136
|
+
self.new("\u{1f3d5}", [:camping]),
|
137
|
+
self.new("\u{1f3d4}", [:snow_capped_mountain]),
|
138
|
+
self.new("\u{1f5fa}", [:world_map]),
|
139
|
+
|
100
140
|
# Regional Indicator Symbols
|
101
141
|
self.new("\u{1f1ef 1f1f5}", [:jp], "REGIONAL INDICATOR SYMBOL LETTERS JP"),
|
102
142
|
self.new("\u{1f1f0 1f1f7}", [:kr], "REGIONAL INDICATOR SYMBOL LETTERS KR"),
|
data/lib/rumoji/emoji/symbols.rb
CHANGED
@@ -195,7 +195,13 @@ module Rumoji
|
|
195
195
|
self.new("\u{1f533}", [:white_square_button]),
|
196
196
|
self.new("\u{1f6ba}", [:womens]),
|
197
197
|
self.new("\u{274c}" , [:x]),
|
198
|
-
self.new("\u{0030 fe0f 20e3}" , [:zero])
|
198
|
+
self.new("\u{0030 fe0f 20e3}" , [:zero]),
|
199
|
+
self.new("\u{1f3fa}", [:black_circle_record]),
|
200
|
+
self.new("\u{1f3f9}", [:black_square_stop]),
|
201
|
+
self.new("\u{1f3f8}", [:double_vertical_bar]),
|
202
|
+
self.new("\u{1f549}", [:om]),
|
203
|
+
self.new("\u{1f6d0}", [:place_worship]),
|
204
|
+
self.new("\u{1f54e}", [:menorah]),
|
199
205
|
]
|
200
206
|
end
|
201
207
|
end
|
data/lib/rumoji/version.rb
CHANGED
data/spec/rumoji/emoji_spec.rb
CHANGED
@@ -69,12 +69,5 @@ describe Rumoji::Emoji do
|
|
69
69
|
it "finds an emoji from a string" do
|
70
70
|
subject.find_by_string(smile_str).symbol.must_equal smile_sym
|
71
71
|
end
|
72
|
-
|
73
|
-
it "finds an emoji from a codepoint" do
|
74
|
-
smile_str.codepoints.map do |point|
|
75
|
-
subject.find_by_codepoint(point).symbol.must_equal smile_sym
|
76
|
-
end
|
77
|
-
end
|
78
72
|
end
|
79
|
-
|
80
73
|
end
|
data/spec/rumoji_spec.rb
CHANGED
@@ -18,6 +18,44 @@ describe Rumoji do
|
|
18
18
|
Rumoji.encode(@smile).must_equal ":smile:"
|
19
19
|
Rumoji.encode("#{@smile}").must_equal ":smile:"
|
20
20
|
end
|
21
|
+
|
22
|
+
it "keeps codepoints that match the beginnings of multi-codepoint emoji" do
|
23
|
+
text = "i like #hashtags and 1direction they are the #1 band. end with 9"
|
24
|
+
Rumoji.encode(text).must_equal text
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "with multiple codepoints" do
|
28
|
+
it "transforms a stream" do
|
29
|
+
Rumoji.encode("#{@zero}").must_equal ":zero:"
|
30
|
+
Rumoji.encode("#{@us}").must_equal ":us:"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "transforms a stream of many emoji" do
|
34
|
+
num = ":one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :zero: :hash:"
|
35
|
+
emoji = "1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 0️⃣ #️⃣"
|
36
|
+
Rumoji.encode(emoji).must_equal num
|
37
|
+
end
|
38
|
+
|
39
|
+
it "does not encode double digits" do
|
40
|
+
num = ":zero: :one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :hash:"
|
41
|
+
double_digits = "00 11 22 33 44 55 66 77 88 99 ##"
|
42
|
+
Rumoji.encode(double_digits).wont_equal num
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "with leading and trailing characters" do
|
46
|
+
it "is able to pull multipoint emoji out of a sequence" do
|
47
|
+
string = "An example of a multipoint emoji is the #{@us} flag."
|
48
|
+
Rumoji.encode(string).must_equal "An example of a multipoint emoji is the :us: flag."
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "with trailing emoji" do
|
53
|
+
it "writes characters that are in a multipoint emoji followed by an emoji" do
|
54
|
+
string = "I would like 0#{@poop}"
|
55
|
+
Rumoji.encode(string).must_equal "I would like 0:poop:"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
21
59
|
end
|
22
60
|
|
23
61
|
describe "#decode" do
|
@@ -32,10 +70,14 @@ describe Rumoji do
|
|
32
70
|
it "transforms a cheat-sheet code with a dash into an emoji" do
|
33
71
|
Rumoji.decode(":non-potable_water:").must_equal @non_potable_water
|
34
72
|
end
|
35
|
-
|
73
|
+
|
36
74
|
it "does not transform an arbitrary string wrapped in colons" do
|
37
75
|
Rumoji.decode(":this-is-just-a-string:").must_equal ":this-is-just-a-string:"
|
38
76
|
end
|
77
|
+
|
78
|
+
it "transforms a cheat-sheet code into an emoji with line brake" do
|
79
|
+
Rumoji.decode(":\nabc:poop:").must_equal ":\nabc" + @poop
|
80
|
+
end
|
39
81
|
end
|
40
82
|
|
41
83
|
describe "#encode_io" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rumoji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Wunsch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Transcode emoji utf-8 characters into emoji-cheat-sheet form
|
14
14
|
email:
|
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
57
|
rubyforge_project:
|
58
|
-
rubygems_version: 2.
|
58
|
+
rubygems_version: 2.5.1
|
59
59
|
signing_key:
|
60
60
|
specification_version: 4
|
61
61
|
summary: Transcode emoji utf-8 characters into emoji-cheat-sheet form
|