import anchorme from "anchorme"; import uEmojiParser from 'universal-emoji-parser' import twemoji from 'twemoji' import Config from "../../config"; const EmojiList = ['笑脸', '生病', '破涕为笑', '吐舌', '脸红', '恐惧', '失望', '无语', '嘿哈', '捂脸', '奸笑', '机智', '皱眉', '耶', '鬼魂', '合十', '强壮', '庆祝', '礼物', '红包', '鸡', '开心', '大笑', '热情', '眨眼', '色', '接吻', '亲吻', '露齿笑', '满意', '戏弄', '得意', '汗', '低落', '呸', '焦虑', '担心', '震惊', '悔恨', '眼泪', '哭', '晕', '心烦', '生气', '睡觉', '恶魔', '外星人', '心', '心碎', '丘比特', '闪烁', '星星', '叹号', '问号', '睡着', '水滴', '音乐', '火', '便便', '弱', '拳头', '胜利', '上', '下', '右', '左', '第一', '吻', '热恋', '男孩', '女孩', '女士', '男士', '天使', '骷髅', '红唇', '太阳', '下雨', '多云', '雪人', '月亮', '闪电', '海浪', '猫', '小狗', '老鼠', '仓鼠', '兔子', '狗', '青蛙', '老虎', '考拉', '熊', '猪', '牛', '野猪', '猴子', '马', '蛇', '鸽子', '鸡', '企鹅', '毛虫', '章鱼', '鱼', '鲸鱼', '海豚', '玫瑰', '花', '棕榈树', '仙人掌', '礼盒', '南瓜灯', '圣诞老人', '圣诞树', '礼物', '铃', '气球', 'CD', '相机', '录像机', '电脑', '电视', '电话', '解锁', '锁', '钥匙', '成交', '灯泡', '邮箱', '浴缸', '钱', '炸弹', '手枪', '药丸', '橄榄球', '篮球', '足球', '棒球', '高尔夫', '奖杯', '入侵者', '唱歌', '吉他', '比基尼', '皇冠', '雨伞', '手提包', '口红', '戒指', '钻石', '咖啡', '啤酒', '干杯', '鸡尾酒', '汉堡', '薯条', '意面', '寿司', '面条', '煎蛋', '冰激凌', '蛋糕', '苹果', '飞机', '火箭', '自行车', '高铁', '警告', '旗', '男人', '女人', 'O', 'X', '版权', '注册商标', '商标']; const QQFaceMap = { '微笑': '0', '撇嘴': '1', '色': '2', '发呆': '3', '得意': '4', '流泪': '5', '害羞': '6', '闭嘴': '7', '睡': '8', '大哭': '9', '尴尬': '10', '发怒': '11', '调皮': '12', '呲牙': '13', '惊讶': '14', '难过': '15', '酷': '16', '冷汗': '17', '抓狂': '18', '吐': '19', '偷笑': '20', '可爱': '21', '愉快': '21', '白眼': '22', '傲慢': '23', '饥饿': '24', '困': '25', '惊恐': '26', '流汗': '27', '憨笑': '28', '悠闲': '29', '大兵': '29', '奋斗': '30', '咒骂': '31', '疑问': '32', '嘘': '33', '晕': '34', '疯了': '35', '折磨': '35', '衰': '36', '骷髅': '37', '敲打': '38', '再见': '39', '擦汗': '40', '抠鼻': '41', '鼓掌': '42', '糗大了': '43', '坏笑': '44', '左哼哼': '45', '右哼哼': '46', '哈欠': '47', '鄙视': '48', '委屈': '49', '快哭了': '50', '阴险': '51', '亲亲': '52', '吓': '53', '可怜': '54', '菜刀': '55', '西瓜': '56', '啤酒': '57', '篮球': '58', '乒乓': '59', '咖啡': '60', '饭': '61', '猪头': '62', '玫瑰': '63', '凋谢': '64', '嘴唇': '65', '示爱': '65', '爱心': '66', '心碎': '67', '蛋糕': '68', '闪电': '69', '炸弹': '70', '刀': '71', '足球': '72', '瓢虫': '73', '便便': '74', '月亮': '75', '太阳': '76', '礼物': '77', '拥抱': '78', '强': '79', '弱': '80', '握手': '81', '胜利': '82', '抱拳': '83', '勾引': '84', '拳头': '85', '差劲': '86', '爱你': '87', NO: '88', OK: '89', '爱情': '90', '飞吻': '91', '跳跳': '92', '发抖': '93', '怄火': '94', '转圈': '95', '磕头': '96', '回头': '97', '跳绳': '98', '投降': '99', '激动': '100', '乱舞': '101', '献吻': '102', '左太极': '103', '右太极': '104', '嘿哈': '105', '捂脸': '106', '奸笑': '107', '机智': '108', '皱眉': '109', '耶': '110', '鸡': '111', '红包': '112', Smile: '0', Grimace: '1', Drool: '2', Scowl: '3', Chill: '4', CoolGuy: '4', Sob: '5', Shy: '6', Shutup: '7', Silent: '7', Sleep: '8', Cry: '9', Awkward: '10', Pout: '11', Angry: '11', Wink: '12', Tongue: '12', Grin: '13', Surprised: '14', Surprise: '14', Frown: '15', Cool: '16', Ruthless: '16', Tension: '17', Blush: '17', Scream: '18', Crazy: '18', Puke: '19', Chuckle: '20', Joyful: '21', Slight: '22', Smug: '23', Hungry: '24', Drowsy: '25', Panic: '26', Sweat: '27', Laugh: '28', Loafer: '29', Commando: '29', Strive: '30', Determined: '30', Scold: '31', Doubt: '32', Shocked: '32', Shhh: '33', Dizzy: '34', Tormented: '35', BadLuck: '36', Toasted: '36', Skull: '37', Hammer: '38', Wave: '39', Relief: '40', Speechless: '40', DigNose: '41', NosePick: '41', Clap: '42', Shame: '43', Trick: '44', 'Bah! L': '45', 'Bah! R': '46', Yawn: '47', Lookdown: '48', 'Pooh-pooh': '48', Wronged: '49', Shrunken: '49', Puling: '50', TearingUp: '50', Sly: '51', Kiss: '52', 'Uh-oh': '53', Wrath: '53', Whimper: '54', Cleaver: '55', Melon: '56', Watermelon: '56', Beer: '57', Basketball: '58', PingPong: '59', Coffee: '60', Rice: '61', Pig: '62', Rose: '63', Wilt: '64', Lip: '65', Lips: '65', Heart: '66', BrokenHeart: '67', Cake: '68', Lightning: '69', Bomb: '70', Dagger: '71', Soccer: '72', Ladybug: '73', Poop: '74', Moon: '75', Sun: '76', Gift: '77', Hug: '78', Strong: '79', ThumbsUp: '79', Weak: '80', ThumbsDown: '80', Shake: '81', Victory: '82', Peace: '82', Admire: '83', Fight: '83', Salute: '83', Beckon: '84', Fist: '85', Pinky: '86', Love: '2', RockOn: '87', No: '88', 'Nuh-uh': '88', InLove: '90', Blowkiss: '91', Waddle: '92', Tremble: '93', 'Aaagh!': '94', Twirl: '95', Kotow: '96', Lookback: '97', Dramatic: '97', Jump: '98', JumpRope: '98', 'Give-in': '99', Surrender: '99', Hooray: '100', HeyHey: '101', Meditate: '101', Smooch: '102', 'TaiJi L': '103', 'TaiChi L': '103', 'TaiJi R': '104', 'TaiChi R': '104', Hey: '105', Facepalm: '106', Smirk: '107', Smart: '108', Concerned: '109', 'Yeah!': '110', Chicken: '111', Packet: '112', '發呆': '3', '流淚': '5', '閉嘴': '7', '尷尬': '10', '發怒': '11', '調皮': '12', '驚訝': '14', '難過': '15', '饑餓': '24', '累': '25', '驚恐': '26', '悠閑': '29', '奮鬥': '30', '咒罵': '31', '疑問': '32', '噓': '33', '暈': '34', '瘋了': '35', '骷髏頭': '37', '再見': '39', '摳鼻': '41', '羞辱': '43', '壞笑': '44', '鄙視': '48', '陰險': '51', '親親': '52', '嚇': '53', '可憐': '54', '籃球': '58', '飯': '61', '豬頭': '62', '枯萎': '64', '愛心': '66', '閃電': '69', '炸彈': '70', '甲蟲': '73', '太陽': '76', '禮物': '77', '擁抱': '78', '強': '79', '勝利': '82', '拳頭': '85', '差勁': '86', '愛你': '88', '愛情': '90', '飛吻': '91', '發抖': '93', '噴火': '94', '轉圈': '95', '磕頭': '96', '回頭': '97', '跳繩': '98', '激動': '100', '亂舞': '101', '獻吻': '102', '左太極': '103', '右太極': '104', '吼嘿': '105', '掩面': '106', '機智': '108', '皺眉': '109', '歐耶': '110', '雞': '111', '紅包': '112', }; const emoji = []; Object.keys(QQFaceMap).slice(0, 105).map(e => { var id = QQFaceMap[e]; emoji.push({ key: e, value: QQFaceMap[e], className: `qqemoji qqemoji${id}` }); }); function getEmojiClassName(name) { name = name.substring(1, name.length - 1); var keys = Object.keys(QQFaceMap); var key = keys.find(e => e === name); if (key) { let id = QQFaceMap[key]; let emojiCN = keys.find(e => QQFaceMap[e] === id); if (+id < 200) { return `qqemoji qqemoji${id}`; } if (EmojiList.includes(emojiCN)) { return `emoji emoji${id}`; } } return false; } function parser(text) { var decodeText = anchorme({ input: text, options: { attributes: { target: "_blank", } } }); // (text.match(/\[[\w\s\u4E00-\u9FCC\u3400-\u4DB5\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29\ud840-\ud868\udc00-\udfff\ud869[\udc00-\uded6\udf00-\udfff\ud86a-\ud86c\udc00-\udfff\ud86d[\udc00-\udf34\udf40-\udfff\ud86e\udc00-\udc1d]+\]/g) || []).map(e => { // var className = getEmojiClassName(e); // // if (!className) { // // Invalid emoji // return; // } // text = decodeText = text.split(`${e}`).join(``); // }); let emoji = twemoji.parse(decodeText); emoji = emoji.replace(/src="https:\/\/twemoji\.maxcdn\.com\/v\/[0-9.]+\//g, 'src="' + Config.emojiBaseUrl()) return emoji; } function normalize(text = '') { var matchs = text.match(/<\/span>/g) || []; var decodeText = text; try { matchs.map(e => { // Decode utf16 to emoji var emojiCode = e.match(/emoji([0-9a-fA-F]+)/)[1].substr(0, 5); var emoji = String.fromCodePoint(parseInt(emojiCode, 16)); text = decodeText = text.split(e).join(emoji); }); } catch (ex) { console.error('Failed decode %s: %o', text, ex); } return decodeText; } export {emoji, parser, normalize};