UNPKG

emoji-data

Version:

Emoji encoding swiss army knife for NodeJS

227 lines (198 loc) 5.76 kB
// 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;