Compare commits

..

26 Commits

Author SHA1 Message Date
Mislav Marohnić
701f434b60 gemoji 2.1.0 2014-08-06 17:56:17 -07:00
Mislav Marohnić
112cc8fb8b Replace MAINTAINING with CONTRIBUTING 2014-08-06 17:54:19 -07:00
Mislav Marohnić
5162959546 Refactor test to remove Ruby syntax warning 2014-08-06 17:38:26 -07:00
Mislav Marohnić
75ada7cc89 Merge pull request #60 from github/resolve-unicode-aliases
Resolve the emoji.json "unicodes" mess
2014-08-06 17:24:48 -07:00
Mislav Marohnić
0bb789e3e6 Convert applescript to plain text format
So that it's readable and diffable from the web interface

[ci skip]
2014-08-06 07:51:55 -07:00
Mislav Marohnić
9beb9c0172 Remove need for explicit "unicodes" aliases in emoji.json
We now operate on a new set of assumptions:

- Characters with VARIATION_SELECTOR_15 shouldn't render as emoji, even
  if OS X doesn't respect that currently. This removes explicit aliases
  that include VARIATION_SELECTOR_15.

- VARIATION_SELECTOR_16 is optional for most characters to render as
  emoji on OS X. For those that *don't* have it optional, we include
  VARIATION_SELECTOR_16 in their raw representation in `emoji.json`.
  Other characters list their form including VARIATION_SELECTOR_16
  implicitly in `unicode_aliases`.

- For emoji that consist of 2 characters + variation selector, we assume
  that the selector can come between the 2 characters or *after* them,
  so `find_by_unicode` now supports both forms.

- The `db/aliases.html` script ensures that `emoji.json` only contains
  characters that Safari on OS X actually renders as emojis.
2014-08-06 00:08:47 -07:00
Mislav Marohnić
ea70c98946 Only create canvas elements of just the size required to create an emoji
Otherwise canvas element defaults to a larger size.
2014-08-06 00:08:47 -07:00
Mislav Marohnić
7d416739ba Merge pull request #59 from github/script-tools
Add useful tools to `script/*`
2014-08-06 00:08:11 -07:00
Mislav Marohnić
96295d7871 Add script/release 2014-08-05 23:51:22 -07:00
Mislav Marohnić
584939127e Add script/regenerate to rebuild db/emoji.json database
Uses AppleScript to open Safari and filter the emojis by whether they
render as actual emoji on OS X or not.
2014-08-05 23:25:35 -07:00
Mislav Marohnić
680d1bc59b Add script/console for experimentation from Ruby 2014-08-05 23:08:01 -07:00
Mislav Marohnić
2c58377420 Configure Travis CI to use script/test 2014-08-05 23:07:39 -07:00
Mislav Marohnić
3bb3cea8d3 Add script/bootstrap & script/test 2014-08-05 23:06:52 -07:00
Mislav Marohnić
5e6dcae949 Merge pull request #58 from github/plain-copyright
Don't treat plain "(c)" symbol or similar as emoji
2014-08-05 22:29:50 -07:00
Mislav Marohnić
2aaf9693a9 Ruby 1.9 compat in tests 2014-08-05 22:27:01 -07:00
Mislav Marohnić
0d1a82dc6a Don't treat plain "(c)" symbol or similar as emoji
Unless these characters are followed by VARIATION SELECTOR-16, which
indicates that the should be rendered as emoji, OS X renders these
characters using plain font glyphs.

Previously we assumed that the emoji list we get from
`Category-Emoji.json` (OS X emoji character picker) are all valid emoji,
but for some reason some plain Unicode characters are included in there
without being suffixed with VARIATION SELECTOR-16.
2014-08-05 22:16:54 -07:00
Mislav Marohnić
6b9cdd6eb5 Rename PNGs on disk to not contain VARIATION_SELECTOR_16
Even if the emoji contains it, the filename on disk doesn't have to.
This will reduce having to keep renaming PNGs on disk while we tweak the
emoji database in the future in regard to which are required to have
VARIATION_SELECTOR_16 and which are not.
2014-08-05 22:16:27 -07:00
Mislav Marohnić
75f837e6b5 Improve failure message for images on disk test 2014-08-05 22:16:27 -07:00
Mislav Marohnić
c2286e7c5b Fix failure message in tests
This got broken by Emoji::Character API change in
3935375ca8
2014-08-05 20:29:17 -07:00
Adam Roben
3e21d95409 Merge pull request #56 from github/match-osx-behavior
Use the same unicode aliases as Safari 7.0.5 on OS X 10.9.4
2014-08-01 23:06:51 -04:00
Adam Roben
a86999a7f1 Fix tests 2014-08-01 14:11:13 -04:00
Adam Roben
b7c2b8e4d8 Remove incorrect unicode aliases
db/aliases.html now clears out any incorrect aliases it finds.
2014-08-01 13:56:38 -04:00
Adam Roben
1212951bc6 Use the same unicode aliases as Safari 7.0.5 on OS X 10.9.4
Category-Emoji.json contains many code point sequences ending in U+FE0F
VARIATION SELECTOR-16. OS X renders some of these code point sequences
as color emoji even if you strip off VARIATION SELECTOR-16. (And in fact
it even renders some of them as color emoji if you replace VARIATION
SELECTOR-16 with VARIATION SELECTOR-15, even though that is explicitly
requesting a "text" variant of the character).

We used to assume that VARIATION SELECTOR-16 was optional for all emoji.
But this doesn't match OS X's behavior. This could cause problems, e.g.,
if you were to use the unicode_aliases property to detect Unicode emoji
and replace them with images for browsers that don't support emoji
natively.

The Ruby code no longer does anything special with VARIATION SELECTOR-16
other than to remove it from the description of each emoji. The new
db/aliases.html file can be used to determine which the correct Unicode
aliases for each emoji are. That page takes each emoji, generates a set
of variants using VARIATION SELECTOR-16 and VARIATION SELECTOR-15,
and renders each variant into a <canvas> element twice: once with a red
font color, and once with a green font color. If the variant renders the
same way, the OS is rendering the variant as a color emoji, and we add
it to the "unicodes" array for that emoji.

So the new process for generating db/emoji.json is:

1. rake db:dump > tmp
2. mv tmp db/emoji.json
3. open -a Safari db/aliases.html
4. Copy the resulting JSON from Safari
5. pbpaste > db/emoji.json

This ensures that unicode_aliases only contains those code point
sequences which actually render as color emoji on OS X.
2014-08-01 13:37:40 -04:00
Joshua Peek
b1736a387c Merge pull request #54 from jeremy/nil_style_find_api
Change find_by_* to return nil rather than raise an exception
2014-07-19 13:14:51 -07:00
Jeremy Kemper
f9aba615af Change find_by_* to return nil rather than raise an exception.
This is a breaking API change.

You probably have code that looks like
  if emoji = Emoji.find_by_alias($1) { nil }
that you can change to
  if emoji = Emoji.find_by_alias($1)
2014-07-18 09:16:21 -07:00
Jeremy Kemper
2741be5eb6 Reflect current 2.0.0 release in Gemfile.lock 2014-07-17 17:50:05 -07:00
126 changed files with 279 additions and 392 deletions

View File

@@ -1,3 +1,4 @@
script: script/test
rvm:
- 1.9.3
- 2.1.2

49
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,49 @@
Our emoji set is based off Apple's emoji character palette, plus some custom
emoji such as :octocat: :shipit: :metal:.
Some useful tools in development are:
```
script/bootstrap
```
Sets up the development environment. The prerequisites are:
* Ruby 1.9+
* Bundler
```
rake db:generate
```
On OS X, this will rebuild the `db/Category-Emoji.json` file from the system
one, pulling in any new emoji that Apple may have added in the meantime.
```
script/test
```
Runs the test suite, including the integrity test where we assert that we have
covered each of Apple's emoji.
```
script/regenerate
```
Rebuilds the `db/emoji.json` file which is our main list of emoji: their
canonical representations, descriptions, aliases, and tags. This requires OS X
because Safari is used in the process to verify which character render as emoji
and which render as ordinary Unicode glyphs from the current font.
```
script/console
```
Opens `irb` console with gemoji library preloded for experimentation.
```
script/release
```
For maintainers only: after the gemspec has been edited, this commits the
change, tags a release, and pushes it to both GitHub and RubyGems.org.

View File

@@ -1,7 +1,7 @@
PATH
remote: .
specs:
gemoji (2.0.1)
gemoji (2.1.0)
GEM
remote: https://rubygems.org/

View File

@@ -1,27 +0,0 @@
# Maintainers
## Releasing a new gem
If you are just adding new emoji or making a small fix, only increment the patch level "1.0.x". If you need to rename a ton of emojis or making any other radical (but still mostly backwards compatible changes), bump the minor version "1.x.x".
### Make a release commit
To prepare the release commit, edit the [gemoji.gemspec](https://github.com/github/gemoji/blob/master/gemoji.gemspec) `version` value. Then make a single commit with the description as "Gemoji 1.x.x". Finally, tag the commit with `v1.x.x`.
Example commit https://github.com/github/gemoji/commit/v1.0.0
```
$ git ci -m "Gemoji 1.0.0"
$ git tag v1.0.0
$ git push
$ git push --tags
```
### Publish the gem
Build and push the new gem with
```
$ gem build gemoji.gemspec
$ gem push gemoji-1.0.0.gem
```

View File

@@ -56,7 +56,7 @@ See the [Emoji cheat sheet](http://www.emoji-cheat-sheet.com) for more examples.
module EmojiHelper
def emojify(content)
h(content).to_str.gsub(/:([\w+-]+):/) do |match|
if emoji = Emoji.find_by_alias($1) { nil }
if emoji = Emoji.find_by_alias($1)
%(<img alt="#$1" src="#{asset_path("emoji/#{emoji.image_filename}")}" style="vertical-align:middle" width="20" height="20" />)
else
match

13
db/aliases.applescript Normal file
View File

@@ -0,0 +1,13 @@
set jsCode to "document.getElementById('output').value"
set json to missing value
tell application "Safari"
repeat
set json to (do JavaScript jsCode in current tab of window 1)
if (json is not missing value) then exit repeat
delay 0.5
end repeat
close current tab of window 1
end tell
return json

View File

@@ -13,6 +13,7 @@
<script>
const VARIATION_SELECTOR_15 = String.fromCharCode(0xfe0e);
const VARIATION_SELECTOR_16 = String.fromCharCode(0xfe0f);
const EMOJI_SIZE = 32
function detectAliases(db) {
for (var i = 0; i < db.length; ++i) {
@@ -22,23 +23,14 @@
continue;
}
var candidates = [];
if (raw.length === 1) {
candidates.push(raw + VARIATION_SELECTOR_15);
candidates.push(raw + VARIATION_SELECTOR_16);
} else if (raw[raw.length - 1] === VARIATION_SELECTOR_16) {
var base = raw.substr(0, raw.length - 1);
candidates.push(base);
candidates.push(base + VARIATION_SELECTOR_15);
if (raw.indexOf(VARIATION_SELECTOR_16) > -1) {
var candidates = [raw.replace(VARIATION_SELECTOR_16, ""), raw];
} else {
var candidates = [raw, raw + VARIATION_SELECTOR_16];
}
var aliases = candidates.filter(isColorEmoji);
if (aliases.length) {
emoji.unicodes = aliases;
} else {
delete emoji.unicodes;
}
emoji.emoji = aliases[0];
}
dump(db);
@@ -52,14 +44,16 @@
}
var canvas = document.createElement("canvas");
canvas.width = canvas.height = EMOJI_SIZE;
function color(emoji, rgb) {
var context = canvas.getContext("2d");
context.clearRect(0, 0, 32, 32);
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillStyle = rgb;
context.textBaseline = "top";
context.font = "32px Arial";
context.font = EMOJI_SIZE+"px Arial";
context.fillText(emoji, 0, 0);
var data = context.getImageData(0, 0, 32, 32).data;
var data = context.getImageData(0, 0, EMOJI_SIZE, EMOJI_SIZE).data;
for (var i = 0; i < data.length; i += 4) {
if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0) {
continue;

View File

@@ -52,19 +52,14 @@ end
trap(:PIPE) { abort }
items = []
variation = "\u{fe0f}".freeze
variation_codepoint = Emoji::VARIATION_SELECTOR_16.codepoints[0]
for emoji in Emoji.all
unicodes = emoji.unicode_aliases.dup
item = {}
unless emoji.custom?
variation_codepoint = variation.codepoints[0]
chars = emoji.raw.codepoints.map { |code| UnicodeCharacter.fetch(code) unless code == variation_codepoint }.compact
item[:emoji] = unicodes.shift
item[:unicodes] = unicodes if unicodes.any?
item[:emoji] = emoji.raw
item[:description] = chars.map(&:description).join(' + ')
end

View File

@@ -931,10 +931,6 @@
}
, {
"emoji": "✨"
, "unicodes": [
"✨︎"
, "✨️"
]
, "description": "sparkles"
, "aliases": [
"sparkles"
@@ -1126,10 +1122,6 @@
}
, {
"emoji": "✊"
, "unicodes": [
"✊︎"
, "✊️"
]
, "description": "raised fist"
, "aliases": [
"fist"
@@ -1161,10 +1153,6 @@
}
, {
"emoji": "✋"
, "unicodes": [
"✋︎"
, "✋️"
]
, "description": "raised hand"
, "aliases": [
"hand"
@@ -2916,10 +2904,7 @@
]
}
, {
"emoji": "⭐"
, "unicodes": [
"⭐"
]
"emoji": "⭐"
, "description": "white medium star"
, "aliases": [
"star"
@@ -2938,11 +2923,7 @@
]
}
, {
"emoji": "⛅"
, "unicodes": [
"⛅"
, "⛅︎"
]
"emoji": "⛅"
, "description": "sun behind cloud"
, "aliases": [
"partly_sunny"
@@ -2962,10 +2943,7 @@
]
}
, {
"emoji": "⚡"
, "unicodes": [
"⚡"
]
"emoji": "⚡"
, "description": "high voltage sign"
, "aliases": [
"zap"
@@ -2976,10 +2954,7 @@
]
}
, {
"emoji": "☔"
, "unicodes": [
"☔"
]
"emoji": "☔"
, "description": "umbrella with rain drops"
, "aliases": [
"umbrella"
@@ -3002,11 +2977,7 @@
]
}
, {
"emoji": "⛄"
, "unicodes": [
"⛄"
, "⛄︎"
]
"emoji": "⛄"
, "description": "snowman without snow"
, "aliases": [
"snowman"
@@ -3511,10 +3482,6 @@
}
, {
"emoji": "⏳"
, "unicodes": [
"⏳︎"
, "⏳️"
]
, "description": "hourglass with flowing sand"
, "aliases": [
"hourglass_flowing_sand"
@@ -3524,10 +3491,7 @@
]
}
, {
"emoji": "⌛"
, "unicodes": [
"⌛"
]
"emoji": "⌛"
, "description": "hourglass"
, "aliases": [
"hourglass"
@@ -3538,10 +3502,6 @@
}
, {
"emoji": "⏰"
, "unicodes": [
"⏰︎"
, "⏰️"
]
, "description": "alarm clock"
, "aliases": [
"alarm_clock"
@@ -3551,10 +3511,7 @@
]
}
, {
"emoji": "⌚"
, "unicodes": [
"⌚"
]
"emoji": "⌚"
, "description": "watch"
, "aliases": [
"watch"
@@ -4530,11 +4487,7 @@
]
}
, {
"emoji": "🀄"
, "unicodes": [
"🀄"
, "🀄︎"
]
"emoji": "🀄"
, "description": "mahjong tile red dragon"
, "aliases": [
"mahjong"
@@ -4584,10 +4537,7 @@
]
}
, {
"emoji": "⚽"
, "unicodes": [
"⚽"
]
"emoji": "⚽"
, "description": "soccer ball"
, "aliases": [
"soccer"
@@ -4646,11 +4596,7 @@
]
}
, {
"emoji": "⛳"
, "unicodes": [
"⛳"
, "⛳︎"
]
"emoji": "⛳"
, "description": "flag in hole"
, "aliases": [
"golf"
@@ -4754,10 +4700,7 @@
]
}
, {
"emoji": "☕"
, "unicodes": [
"☕"
]
"emoji": "☕"
, "description": "hot beverage"
, "aliases": [
"coffee"
@@ -5415,11 +5358,7 @@
]
}
, {
"emoji": "⛪"
, "unicodes": [
"⛪"
, "⛪︎"
]
"emoji": "⛪"
, "description": "church"
, "aliases": [
"church"
@@ -5482,11 +5421,7 @@
]
}
, {
"emoji": "⛺"
, "unicodes": [
"⛺"
, "⛺︎"
]
"emoji": "⛺"
, "description": "tent"
, "aliases": [
"tent"
@@ -5595,11 +5530,7 @@
]
}
, {
"emoji": "⛲"
, "unicodes": [
"⛲"
, "⛲︎"
]
"emoji": "⛲"
, "description": "fountain"
, "aliases": [
"fountain"
@@ -5626,11 +5557,7 @@
]
}
, {
"emoji": "⛵"
, "unicodes": [
"⛵"
, "⛵︎"
]
"emoji": "⛵"
, "description": "sailboat"
, "aliases": [
"boat"
@@ -5659,10 +5586,7 @@
]
}
, {
"emoji": "⚓"
, "unicodes": [
"⚓"
]
"emoji": "⚓"
, "description": "anchor"
, "aliases": [
"anchor"
@@ -6090,11 +6014,7 @@
]
}
, {
"emoji": "⛽"
, "unicodes": [
"⛽"
, "⛽︎"
]
"emoji": "⛽"
, "description": "fuel pump"
, "aliases": [
"fuelpump"
@@ -6608,10 +6528,6 @@
}
, {
"emoji": "⏪"
, "unicodes": [
"⏪︎"
, "⏪️"
]
, "description": "black left-pointing double triangle"
, "aliases": [
"rewind"
@@ -6621,10 +6537,6 @@
}
, {
"emoji": "⏩"
, "unicodes": [
"⏩︎"
, "⏩️"
]
, "description": "black right-pointing double triangle"
, "aliases": [
"fast_forward"
@@ -6634,10 +6546,6 @@
}
, {
"emoji": "⏫"
, "unicodes": [
"⏫︎"
, "⏫️"
]
, "description": "black up-pointing double triangle"
, "aliases": [
"arrow_double_up"
@@ -6647,10 +6555,6 @@
}
, {
"emoji": "⏬"
, "unicodes": [
"⏬︎"
, "⏬️"
]
, "description": "black down-pointing double triangle"
, "aliases": [
"arrow_double_down"
@@ -6792,11 +6696,7 @@
]
}
, {
"emoji": "🈯"
, "unicodes": [
"🈯"
, "🈯︎"
]
"emoji": "🈯"
, "description": "squared cjk unified ideograph-6307"
, "aliases": [
"u6307"
@@ -6877,11 +6777,7 @@
]
}
, {
"emoji": "🈚"
, "unicodes": [
"🈚"
, "🈚︎"
]
"emoji": "🈚"
, "description": "squared cjk unified ideograph-7121"
, "aliases": [
"u7121"
@@ -6965,10 +6861,7 @@
]
}
, {
"emoji": "♿"
, "unicodes": [
"♿"
]
"emoji": "♿"
, "description": "wheelchair symbol"
, "aliases": [
"wheelchair"
@@ -6987,7 +6880,7 @@
]
}
, {
"emoji": "🈷"
"emoji": "🈷"
, "description": "squared cjk unified ideograph-6708"
, "aliases": [
"u6708"
@@ -7005,7 +6898,7 @@
]
}
, {
"emoji": "🈂"
"emoji": "🈂"
, "description": "squared katakana sa"
, "aliases": [
"sa"
@@ -7190,11 +7083,7 @@
]
}
, {
"emoji": "⛔"
, "unicodes": [
"⛔"
, "⛔︎"
]
"emoji": "⛔"
, "description": "no entry"
, "aliases": [
"no_entry"
@@ -7223,10 +7112,6 @@
}
, {
"emoji": "❎"
, "unicodes": [
"❎︎"
, "❎️"
]
, "description": "negative squared cross mark"
, "aliases": [
"negative_squared_cross_mark"
@@ -7236,10 +7121,6 @@
}
, {
"emoji": "✅"
, "unicodes": [
"✅︎"
, "✅️"
]
, "description": "white heavy check mark"
, "aliases": [
"white_check_mark"
@@ -7295,7 +7176,7 @@
]
}
, {
"emoji": "🅰"
"emoji": "🅰"
, "description": "negative squared latin capital letter a"
, "aliases": [
"a"
@@ -7304,7 +7185,7 @@
]
}
, {
"emoji": "🅱"
"emoji": "🅱"
, "description": "negative squared latin capital letter b"
, "aliases": [
"b"
@@ -7322,7 +7203,7 @@
]
}
, {
"emoji": "🅾"
"emoji": "🅾"
, "description": "negative squared latin capital letter o"
, "aliases": [
"o2"
@@ -7341,9 +7222,6 @@
}
, {
"emoji": "➿"
, "unicodes": [
"➿️"
]
, "description": "double curly loop"
, "aliases": [
"loop"
@@ -7363,10 +7241,7 @@
]
}
, {
"emoji": "♈"
, "unicodes": [
"♈"
]
"emoji": "♈"
, "description": "aries"
, "aliases": [
"aries"
@@ -7375,10 +7250,7 @@
]
}
, {
"emoji": "♉"
, "unicodes": [
"♉"
]
"emoji": "♉"
, "description": "taurus"
, "aliases": [
"taurus"
@@ -7387,10 +7259,7 @@
]
}
, {
"emoji": "♊"
, "unicodes": [
"♊"
]
"emoji": "♊"
, "description": "gemini"
, "aliases": [
"gemini"
@@ -7399,10 +7268,7 @@
]
}
, {
"emoji": "♋"
, "unicodes": [
"♋"
]
"emoji": "♋"
, "description": "cancer"
, "aliases": [
"cancer"
@@ -7411,10 +7277,7 @@
]
}
, {
"emoji": "♌"
, "unicodes": [
"♌"
]
"emoji": "♌"
, "description": "leo"
, "aliases": [
"leo"
@@ -7423,10 +7286,7 @@
]
}
, {
"emoji": "♍"
, "unicodes": [
"♍"
]
"emoji": "♍"
, "description": "virgo"
, "aliases": [
"virgo"
@@ -7435,10 +7295,7 @@
]
}
, {
"emoji": "♎"
, "unicodes": [
"♎"
]
"emoji": "♎"
, "description": "libra"
, "aliases": [
"libra"
@@ -7447,10 +7304,7 @@
]
}
, {
"emoji": "♏"
, "unicodes": [
"♏"
]
"emoji": "♏"
, "description": "scorpius"
, "aliases": [
"scorpius"
@@ -7459,10 +7313,7 @@
]
}
, {
"emoji": "♐"
, "unicodes": [
"♐"
]
"emoji": "♐"
, "description": "sagittarius"
, "aliases": [
"sagittarius"
@@ -7471,10 +7322,7 @@
]
}
, {
"emoji": "♑"
, "unicodes": [
"♑"
]
"emoji": "♑"
, "description": "capricorn"
, "aliases": [
"capricorn"
@@ -7483,10 +7331,7 @@
]
}
, {
"emoji": "♒"
, "unicodes": [
"♒"
]
"emoji": "♒"
, "description": "aquarius"
, "aliases": [
"aquarius"
@@ -7495,10 +7340,7 @@
]
}
, {
"emoji": "♓"
, "unicodes": [
"♓"
]
"emoji": "♓"
, "description": "pisces"
, "aliases": [
"pisces"
@@ -7508,10 +7350,6 @@
}
, {
"emoji": "⛎"
, "unicodes": [
"⛎︎"
, "⛎️"
]
, "description": "ophiuchus"
, "aliases": [
"ophiuchus"
@@ -7565,10 +7403,7 @@
]
}
, {
"emoji": "©"
, "unicodes": [
"©️"
]
"emoji": "
, "description": "copyright sign"
, "aliases": [
"copyright"
@@ -7577,10 +7412,7 @@
]
}
, {
"emoji": "®"
, "unicodes": [
"®️"
]
"emoji": "
, "description": "registered sign"
, "aliases": [
"registered"
@@ -7589,10 +7421,7 @@
]
}
, {
"emoji": "™"
, "unicodes": [
"™️"
]
"emoji": "™"
, "description": "trade mark sign"
, "aliases": [
"tm"
@@ -7603,10 +7432,6 @@
}
, {
"emoji": "❌"
, "unicodes": [
"❌︎"
, "❌️"
]
, "description": "cross mark"
, "aliases": [
"x"
@@ -7633,11 +7458,7 @@
]
}
, {
"emoji": "❗"
, "unicodes": [
"❗"
, "❗︎"
]
"emoji": "❗"
, "description": "heavy exclamation mark symbol"
, "aliases": [
"exclamation"
@@ -7649,10 +7470,6 @@
}
, {
"emoji": "❓"
, "unicodes": [
"❓︎"
, "❓️"
]
, "description": "black question mark ornament"
, "aliases": [
"question"
@@ -7663,10 +7480,6 @@
}
, {
"emoji": "❕"
, "unicodes": [
"❕︎"
, "❕️"
]
, "description": "white exclamation mark ornament"
, "aliases": [
"grey_exclamation"
@@ -7676,10 +7489,6 @@
}
, {
"emoji": "❔"
, "unicodes": [
"❔︎"
, "❔️"
]
, "description": "white question mark ornament"
, "aliases": [
"grey_question"
@@ -7688,11 +7497,7 @@
]
}
, {
"emoji": "⭕"
, "unicodes": [
"⭕"
, "⭕︎"
]
"emoji": "⭕"
, "description": "heavy large circle"
, "aliases": [
"o"
@@ -7981,10 +7786,6 @@
}
, {
"emoji": ""
, "unicodes": [
""
, ""
]
, "description": "heavy plus sign"
, "aliases": [
"heavy_plus_sign"
@@ -7994,10 +7795,6 @@
}
, {
"emoji": ""
, "unicodes": [
""
, ""
]
, "description": "heavy minus sign"
, "aliases": [
"heavy_minus_sign"
@@ -8007,10 +7804,6 @@
}
, {
"emoji": "➗"
, "unicodes": [
"➗︎"
, "➗️"
]
, "description": "heavy division sign"
, "aliases": [
"heavy_division_sign"
@@ -8112,10 +7905,6 @@
}
, {
"emoji": "➰"
, "unicodes": [
"➰︎"
, "➰️"
]
, "description": "curly loop"
, "aliases": [
"curly_loop"
@@ -8124,10 +7913,7 @@
]
}
, {
"emoji": "〰"
, "unicodes": [
"〰️"
]
"emoji": "〰"
, "description": "wavy dash"
, "aliases": [
"wavy_dash"
@@ -8172,10 +7958,7 @@
]
}
, {
"emoji": "◾"
, "unicodes": [
"◾"
]
"emoji": "◾"
, "description": "black medium small square"
, "aliases": [
"black_medium_small_square"
@@ -8184,10 +7967,7 @@
]
}
, {
"emoji": "◽"
, "unicodes": [
"◽"
]
"emoji": "◽"
, "description": "white medium small square"
, "aliases": [
"white_medium_small_square"
@@ -8241,10 +8021,7 @@
]
}
, {
"emoji": "⚫"
, "unicodes": [
"⚫"
]
"emoji": "⚫"
, "description": "medium black circle"
, "aliases": [
"black_circle"
@@ -8253,10 +8030,7 @@
]
}
, {
"emoji": "⚪"
, "unicodes": [
"⚪"
]
"emoji": "⚪"
, "description": "medium white circle"
, "aliases": [
"white_circle"
@@ -8292,10 +8066,7 @@
]
}
, {
"emoji": "⬜"
, "unicodes": [
"⬜"
]
"emoji": "⬜"
, "description": "white large square"
, "aliases": [
"white_large_square"
@@ -8304,10 +8075,7 @@
]
}
, {
"emoji": "⬛"
, "unicodes": [
"⬛"
]
"emoji": "⬛"
, "description": "black large square"
, "aliases": [
"black_large_square"

View File

@@ -1,6 +1,6 @@
Gem::Specification.new do |s|
s.name = "gemoji"
s.version = "2.0.1"
s.version = "2.1.0"
s.summary = "Emoji conversion and image assets"
s.description = "Image assets and character information for emoji."

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 591 B

After

Width:  |  Height:  |  Size: 591 B

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Some files were not shown because too many files have changed in this diff Show More