emoji-data
Version:
Emoji encoding swiss army knife for NodeJS
227 lines (198 loc) • 5.76 kB
JavaScript
// Generated by CoffeeScript 1.8.0
var EmojiChar, EmojiData, punycode, _str;
EmojiChar = require('./emoji_char');
punycode = require('punycode');
_str = require('underscore.string');
EmojiData = (function() {
var EMOJICHAR_KEYWORD_MAP, EMOJICHAR_UNIFIED_MAP, EMOJI_CHARS, EMOJI_MAP, FBS_REGEXP, char_blob, ec, keyword, variant, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1;
function EmojiData() {}
EMOJI_MAP = require('../vendor/emoji-data/emoji.json');
EMOJI_CHARS = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = EMOJI_MAP.length; _i < _len; _i++) {
char_blob = EMOJI_MAP[_i];
_results.push(new EmojiChar(char_blob));
}
return _results;
})();
EMOJICHAR_UNIFIED_MAP = {};
for (_i = 0, _len = EMOJI_CHARS.length; _i < _len; _i++) {
ec = EMOJI_CHARS[_i];
EMOJICHAR_UNIFIED_MAP[ec.unified] = ec;
_ref = ec.variations;
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
variant = _ref[_j];
EMOJICHAR_UNIFIED_MAP[variant] = ec;
}
}
EMOJICHAR_KEYWORD_MAP = {};
for (_k = 0, _len2 = EMOJI_CHARS.length; _k < _len2; _k++) {
ec = EMOJI_CHARS[_k];
_ref1 = ec.short_names;
for (_l = 0, _len3 = _ref1.length; _l < _len3; _l++) {
keyword = _ref1[_l];
EMOJICHAR_KEYWORD_MAP[keyword] = ec;
}
}
EmojiData.all = function() {
return EMOJI_CHARS;
};
EmojiData.all_doublebyte = function() {
var _len4, _m, _results;
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
if (ec.is_doublebyte()) {
_results.push(ec);
}
}
return _results;
};
EmojiData.all_with_variants = function() {
var _len4, _m, _results;
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
if (ec.has_variants()) {
_results.push(ec);
}
}
return _results;
};
EmojiData.chars = function(options) {
var extra, norms;
if (options == null) {
options = {
include_variants: false
};
}
norms = (function() {
var _len4, _m, _results;
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
_results.push(ec.render({
variant_encoding: false
}));
}
return _results;
})();
extra = (function() {
var _len4, _m, _ref2, _results;
_ref2 = this.all_with_variants();
_results = [];
for (_m = 0, _len4 = _ref2.length; _m < _len4; _m++) {
ec = _ref2[_m];
_results.push(ec.render({
variant_encoding: true
}));
}
return _results;
}).call(this);
if (options.include_variants) {
return norms.concat(extra);
}
return norms;
};
EmojiData.codepoints = function(options) {
var extra, norms;
if (options == null) {
options = {
include_variants: false
};
}
norms = (function() {
var _len4, _m, _results;
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
_results.push(ec.unified);
}
return _results;
})();
extra = (function() {
var _len4, _m, _ref2, _results;
_ref2 = this.all_with_variants();
_results = [];
for (_m = 0, _len4 = _ref2.length; _m < _len4; _m++) {
ec = _ref2[_m];
_results.push(ec.variant());
}
return _results;
}).call(this);
if (options.include_variants) {
return norms.concat(extra);
}
return norms;
};
EmojiData.char_to_unified = function(char) {
var cp, cps, hexes;
cps = punycode.ucs2.decode(char);
hexes = (function() {
var _len4, _m, _results;
_results = [];
for (_m = 0, _len4 = cps.length; _m < _len4; _m++) {
cp = cps[_m];
_results.push(_str.rjust(cp.toString(16), 4, "0"));
}
return _results;
})();
return hexes.join("-").toUpperCase();
};
EmojiData.unified_to_char = function(uid) {
return EmojiChar._unified_to_char(uid);
};
EmojiData.find_by_name = function(name) {
var target, _len4, _m, _results;
target = name.toUpperCase();
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
if (ec.name.indexOf(target) !== -1) {
_results.push(ec);
}
}
return _results;
};
EmojiData.find_by_short_name = function(short_name) {
var target, _len4, _m, _results;
target = short_name.toLowerCase();
_results = [];
for (_m = 0, _len4 = EMOJI_CHARS.length; _m < _len4; _m++) {
ec = EMOJI_CHARS[_m];
if (ec.short_names.some(function(sn) {
return sn.indexOf(target) !== -1;
})) {
_results.push(ec);
}
}
return _results;
};
EmojiData.from_short_name = function(short_name) {
return EMOJICHAR_KEYWORD_MAP[short_name.toLowerCase()];
};
EmojiData.from_unified = function(uid) {
return EMOJICHAR_UNIFIED_MAP[uid.toUpperCase()];
};
FBS_REGEXP = new RegExp("(?:" + (EmojiData.chars({
include_variants: true
}).join("|")) + ")", "g");
EmojiData.scan = function(str) {
var id, m, matches, _len4, _m, _results;
FBS_REGEXP.lastIndex = 0;
matches = [];
while ((m = FBS_REGEXP.exec(str))) {
matches.push(m[0]);
}
_results = [];
for (_m = 0, _len4 = matches.length; _m < _len4; _m++) {
id = matches[_m];
_results.push(this.from_unified(this.char_to_unified(id)));
}
return _results;
};
return EmojiData;
})();
module.exports = EmojiData;
module.exports.EmojiChar = EmojiChar;