diff --git a/2/twemoji.amd.js b/2/twemoji.amd.js index 0c73b5e0..d48aba35 100644 --- a/2/twemoji.amd.js +++ b/2/twemoji.amd.js @@ -226,7 +226,7 @@ define(function () { // RegExp based on emoji's official Unicode standards // http://www.unicode.org/Public/UNIDATA/EmojiSources.txt - re = /\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0030-\u0039\u0023\u002a])\ufe0f?\u20e3|(?:(?:[\u261d\u270c])(?:\ufe0f|(?!\ufe0e))|\ud83c[\udfc2-\udfc4\udfc7\udfca\udfcb\udf85]|\ud83d[\udcaa\udc81-\udc83\udc85-\udc87\udc70-\udc78\udc7c\udc66-\udc69\udc6e\udc50\udc42\udc43\udc46-\udc4f\udd90\udd95\udd96\udd75\udec0\udeb4-\udeb6\udea3\ude45-\ude47\ude4b-\ude4f]|\ud83e\udd18|[\u26f9\u270a\u270b\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\uddf0\ud83c[\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff\uddea\uddec-\uddee]|\ud83c\uddf1\ud83c[\uddf0\uddf7-\uddfb\uddfe\udde6-\udde8\uddee]|\ud83c\uddf2\ud83c[\uddf0-\uddff\udde6\udde8-\udded]|\ud83c\uddf3\ud83c[\uddf1\uddf4\uddf5\uddf7\uddfa\uddff\udde6\udde8\uddea-\uddec\uddee]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe\udde6\uddea-\udded]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddf4\uddf8\uddfa\uddfc\uddea]|\ud83c\uddf8\ud83c[\uddf0-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff\udde6-\uddea\uddec-\uddef]|\ud83c\uddf9\ud83c[\uddf0-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff\udde6\udde8\udde9\uddeb-\udded\uddef]|\ud83c\uddfa\ud83c[\uddf2\uddf8\uddfe\uddff\udde6\uddec]|\ud83c\uddfb\ud83c[\uddf3\uddfa\udde6\udde8\uddea\uddec\uddee]|\ud83c\uddfc\ud83c[\uddf8\uddeb]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddf9\uddea]|\ud83c\uddff\ud83c[\uddf2\uddfc\udde6]|\ud83c\udde6\ud83c[\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff\udde8-\uddec\uddee]|\ud83c\udde7\ud83c[\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff\udde6\udde7\udde9-\uddef]|\ud83c\udde8\ud83c[\uddf0-\uddf5\uddf7\uddfa-\uddff\udde6\udde8\udde9\uddeb-\uddee]|\ud83c\udde9\ud83c[\uddf0\uddf2\uddf4\uddff\uddea\uddec\uddef]|\ud83c\uddea\ud83c[\uddf7-\uddfa\udde6\udde8\uddea\uddec\udded]|\ud83c\uddeb\ud83c[\uddf0\uddf2\uddf4\uddf7\uddee\uddef]|\ud83c\uddec\ud83c[\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe\udde6\udde7\udde9-\uddee]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\uddf1-\uddf4\uddf6-\uddf9\udde8-\uddea]|\ud83c\uddef\ud83c[\uddf2\uddf4\uddf5\uddea]|\ud83c[\udccf\uddf0-\uddff\udde6-\uddef\udd91-\udd9a\udd8e\ude50\ude51\ude32-\ude36\ude38-\ude3a\ude01\udff0\udff3-\udff5\udff7-\udfff\udfe0-\udfef\udfd0-\udfdf\udfc0\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udfcf\udfb0-\udfbf\udfa0-\udfaf\udf90-\udf93\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udf80-\udf84\udf86-\udf8f\udf70-\udf7f\udf60-\udf6f\udf50-\udf5f\udf40-\udf4f\udf30-\udf3f\udf20\udf21\udf24-\udf2f\udf10-\udf1f\udf00-\udf0f]|\ud83d[\udcf0-\udcfd\udcff\udce0-\udcef\udcd0-\udcdf\udcc0-\udccf\udcb0-\udcbf\udca0-\udca9\udcab-\udcaf\udc90-\udc9f\udc80\udc84\udc88-\udc8f\udc79-\udc7b\udc7d-\udc7f\udc60-\udc65\udc6a-\udc6d\udc6f\udc51-\udc5f\udc40\udc41\udc44\udc45\udc30-\udc3f\udc20-\udc2f\udc10-\udc1f\udc00-\udc0f\uddf3\uddfa-\uddff\udde1\udde3\udde8\uddef\uddd1-\uddd3\udddc-\uddde\uddc2-\uddc4\uddb1\uddb2\uddbc\udda5\udda8\udd87\udd8a-\udd8d\udd70\udd73\udd74\udd76-\udd79\udd60-\udd67\udd6f\udd50-\udd5f\udd49-\udd4e\udd30-\udd3d\udd20-\udd2f\udd10-\udd1f\udd00-\udd0f\udef0\udef3\udee0-\udee5\udee9\udeeb\udeec\uded0\udec1-\udec5\udecb-\udecf\udeb0-\udeb3\udeb7-\udebf\udea0-\udea2\udea4-\udeaf\ude90-\ude9f\ude80-\ude8f\ude40-\ude44\ude48-\ude4a\ude30-\ude3f\ude20-\ude2f\ude10-\ude1f\ude00-\ude0f]|\ud83e[\uddc0\udd80-\udd84\udd10-\udd17]|[\ue50a\u23f0-\u23f3\u23f8-\u23fa\u23e9-\u23ef\u23cf\u2328\u26f0\u26f1\u26f4\u26f7\u26f8\u26e9\u26d1\u26d3\u26c8\u26ce\u26cf\u26b0\u26b1\u2692\u2694\u2696\u2697\u2699\u269b\u269c\u2638\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2618\u2602-\u2604\u27b0\u27bf\u2795-\u2797\u2763\u2753-\u2755\u274c\u274e\u2721\u2728\u271d\u2705]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude37\ude2f\ude1a\ude02]|[\u3030\u303d\u3297\u3299\u2049\u203c\u21a9\u21aa\u2194-\u2199\u2139\u2122\u231a\u231b\u24c2\u25fb-\u25fe\u25c0\u25b6\u25aa\u25ab\u26f2\u26f3\u26f5\u26fa\u26fd\u26ea\u26d4\u26c4\u26c5\u26bd\u26be\u26a0\u26a1\u26aa\u26ab\u2693\u267b\u267f\u2660\u2663\u2665\u2666\u2668\u2650-\u2653\u2648-\u264f\u2639\u263a\u2611\u2614\u2615\u2600\u2601\u260e\u27a1\u2764\u2757\u2744\u2747\u2733\u2734\u2712\u2714\u2716\u2702\u2708\u2709\u270f\u2934\u2935\u2b50\u2b55\u2b1b\u2b1c\u2b05-\u2b07\u00a9\u00ae])(?:\ufe0f|(?!\ufe0e))/g, + re = /\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc69\udc68]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0039\u0038\u0037\u0036\u0035\u0034\u0033\u0032\u0031\u0030\u002a\u0023])\ufe0f?\u20e3|(?:(?:[\u270c\u261d])(?:\ufe0f|(?!\ufe0e))|\ud83e\udd18|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd75\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0]|\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca\udfcb]|[\u270d\u270b\u270a\u26f9])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83e[\udd10-\udd17\udd80-\udd84\uddc0]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd74\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb-\uded0\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udff0\udff3-\udff5\udff7-\udfff]|[\ue50a\u27bf\u27b0\u2797\u2796\u2795\u2763\u2755\u2754\u2753\u274e\u274c\u2728\u2721\u271d\u2705\u26f8\u26f7\u26f4\u26f1\u26f0\u26e9\u26d3\u26d1\u26cf\u26ce\u26c8\u26b1\u26b0\u269c\u269b\u2699\u2697\u2696\u2694\u2692\u2638\u262f\u262e\u262a\u2626\u2623\u2622\u2620\u2618\u2604\u2603\u2602\u23fa\u23f9\u23f8\u23f3\u23f2\u23f1\u23f0\u23ef\u23ee\u23ed\u23ec\u23eb\u23ea\u23e9\u23cf\u2328]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37]|[\u3299\u3297\u303d\u3030\u2b55\u2b50\u2b1c\u2b1b\u2b07\u2b06\u2b05\u2935\u2934\u27a1\u2764\u2757\u2747\u2744\u2734\u2733\u2716\u2714\u2712\u270f\u2709\u2708\u2702\u26fd\u26fa\u26f5\u26f3\u26f2\u26ea\u26d4\u26c5\u26c4\u26be\u26bd\u26ab\u26aa\u26a1\u26a0\u2693\u267f\u267b\u2668\u2666\u2665\u2663\u2660\u2653\u2652\u2651\u2650\u264f\u264e\u264d\u264c\u264b\u264a\u2649\u2648\u263a\u2639\u2615\u2614\u2611\u260e\u2601\u2600\u25fe\u25fd\u25fc\u25fb\u25c0\u25b6\u25ab\u25aa\u24c2\u231b\u231a\u21aa\u21a9\u2199\u2198\u2197\u2196\u2195\u2194\u2139\u2122\u2049\u203c\u00ae\u00a9])(?:\ufe0f|(?!\ufe0e))/g, // used to find HTML special chars in attributes rescaper = /[&<>'"]/g, @@ -307,15 +307,14 @@ define(function () { /** * Used to both remove the possible variant * and to convert utf16 into code points. - * If there is a zero-width-joiner, leave the variant in. + * If there is a zero-width-joiner (U+200D), leave the variants in. * @param string the raw text of the emoji match */ function grabTheRightIcon(rawText) { // if variant is present as \uFE0F - return toCodePoint( - rawText.indexOf('\u200D') < 0 ? - rawText.replace(/\uFE0F/g, '') : - rawText + return toCodePoint(/\u200D/.test(rawText) ? + rawText : + rawText.replace(/\uFE0F/g, '') ); } diff --git a/2/twemoji.js b/2/twemoji.js index 6094989d..13657fb4 100644 --- a/2/twemoji.js +++ b/2/twemoji.js @@ -225,7 +225,7 @@ var twemoji = (function ( // RegExp based on emoji's official Unicode standards // http://www.unicode.org/Public/UNIDATA/EmojiSources.txt - re = /\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0030-\u0039\u0023\u002a])\ufe0f?\u20e3|(?:(?:[\u261d\u270c])(?:\ufe0f|(?!\ufe0e))|\ud83c[\udfc2-\udfc4\udfc7\udfca\udfcb\udf85]|\ud83d[\udcaa\udc81-\udc83\udc85-\udc87\udc70-\udc78\udc7c\udc66-\udc69\udc6e\udc50\udc42\udc43\udc46-\udc4f\udd90\udd95\udd96\udd75\udec0\udeb4-\udeb6\udea3\ude45-\ude47\ude4b-\ude4f]|\ud83e\udd18|[\u26f9\u270a\u270b\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\uddf0\ud83c[\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff\uddea\uddec-\uddee]|\ud83c\uddf1\ud83c[\uddf0\uddf7-\uddfb\uddfe\udde6-\udde8\uddee]|\ud83c\uddf2\ud83c[\uddf0-\uddff\udde6\udde8-\udded]|\ud83c\uddf3\ud83c[\uddf1\uddf4\uddf5\uddf7\uddfa\uddff\udde6\udde8\uddea-\uddec\uddee]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe\udde6\uddea-\udded]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddf4\uddf8\uddfa\uddfc\uddea]|\ud83c\uddf8\ud83c[\uddf0-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff\udde6-\uddea\uddec-\uddef]|\ud83c\uddf9\ud83c[\uddf0-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff\udde6\udde8\udde9\uddeb-\udded\uddef]|\ud83c\uddfa\ud83c[\uddf2\uddf8\uddfe\uddff\udde6\uddec]|\ud83c\uddfb\ud83c[\uddf3\uddfa\udde6\udde8\uddea\uddec\uddee]|\ud83c\uddfc\ud83c[\uddf8\uddeb]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddf9\uddea]|\ud83c\uddff\ud83c[\uddf2\uddfc\udde6]|\ud83c\udde6\ud83c[\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff\udde8-\uddec\uddee]|\ud83c\udde7\ud83c[\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff\udde6\udde7\udde9-\uddef]|\ud83c\udde8\ud83c[\uddf0-\uddf5\uddf7\uddfa-\uddff\udde6\udde8\udde9\uddeb-\uddee]|\ud83c\udde9\ud83c[\uddf0\uddf2\uddf4\uddff\uddea\uddec\uddef]|\ud83c\uddea\ud83c[\uddf7-\uddfa\udde6\udde8\uddea\uddec\udded]|\ud83c\uddeb\ud83c[\uddf0\uddf2\uddf4\uddf7\uddee\uddef]|\ud83c\uddec\ud83c[\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe\udde6\udde7\udde9-\uddee]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\uddf1-\uddf4\uddf6-\uddf9\udde8-\uddea]|\ud83c\uddef\ud83c[\uddf2\uddf4\uddf5\uddea]|\ud83c[\udccf\uddf0-\uddff\udde6-\uddef\udd91-\udd9a\udd8e\ude50\ude51\ude32-\ude36\ude38-\ude3a\ude01\udff0\udff3-\udff5\udff7-\udfff\udfe0-\udfef\udfd0-\udfdf\udfc0\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udfcf\udfb0-\udfbf\udfa0-\udfaf\udf90-\udf93\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udf80-\udf84\udf86-\udf8f\udf70-\udf7f\udf60-\udf6f\udf50-\udf5f\udf40-\udf4f\udf30-\udf3f\udf20\udf21\udf24-\udf2f\udf10-\udf1f\udf00-\udf0f]|\ud83d[\udcf0-\udcfd\udcff\udce0-\udcef\udcd0-\udcdf\udcc0-\udccf\udcb0-\udcbf\udca0-\udca9\udcab-\udcaf\udc90-\udc9f\udc80\udc84\udc88-\udc8f\udc79-\udc7b\udc7d-\udc7f\udc60-\udc65\udc6a-\udc6d\udc6f\udc51-\udc5f\udc40\udc41\udc44\udc45\udc30-\udc3f\udc20-\udc2f\udc10-\udc1f\udc00-\udc0f\uddf3\uddfa-\uddff\udde1\udde3\udde8\uddef\uddd1-\uddd3\udddc-\uddde\uddc2-\uddc4\uddb1\uddb2\uddbc\udda5\udda8\udd87\udd8a-\udd8d\udd70\udd73\udd74\udd76-\udd79\udd60-\udd67\udd6f\udd50-\udd5f\udd49-\udd4e\udd30-\udd3d\udd20-\udd2f\udd10-\udd1f\udd00-\udd0f\udef0\udef3\udee0-\udee5\udee9\udeeb\udeec\uded0\udec1-\udec5\udecb-\udecf\udeb0-\udeb3\udeb7-\udebf\udea0-\udea2\udea4-\udeaf\ude90-\ude9f\ude80-\ude8f\ude40-\ude44\ude48-\ude4a\ude30-\ude3f\ude20-\ude2f\ude10-\ude1f\ude00-\ude0f]|\ud83e[\uddc0\udd80-\udd84\udd10-\udd17]|[\ue50a\u23f0-\u23f3\u23f8-\u23fa\u23e9-\u23ef\u23cf\u2328\u26f0\u26f1\u26f4\u26f7\u26f8\u26e9\u26d1\u26d3\u26c8\u26ce\u26cf\u26b0\u26b1\u2692\u2694\u2696\u2697\u2699\u269b\u269c\u2638\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2618\u2602-\u2604\u27b0\u27bf\u2795-\u2797\u2763\u2753-\u2755\u274c\u274e\u2721\u2728\u271d\u2705]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude37\ude2f\ude1a\ude02]|[\u3030\u303d\u3297\u3299\u2049\u203c\u21a9\u21aa\u2194-\u2199\u2139\u2122\u231a\u231b\u24c2\u25fb-\u25fe\u25c0\u25b6\u25aa\u25ab\u26f2\u26f3\u26f5\u26fa\u26fd\u26ea\u26d4\u26c4\u26c5\u26bd\u26be\u26a0\u26a1\u26aa\u26ab\u2693\u267b\u267f\u2660\u2663\u2665\u2666\u2668\u2650-\u2653\u2648-\u264f\u2639\u263a\u2611\u2614\u2615\u2600\u2601\u260e\u27a1\u2764\u2757\u2744\u2747\u2733\u2734\u2712\u2714\u2716\u2702\u2708\u2709\u270f\u2934\u2935\u2b50\u2b55\u2b1b\u2b1c\u2b05-\u2b07\u00a9\u00ae])(?:\ufe0f|(?!\ufe0e))/g, + re = /\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc69\udc68]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0039\u0038\u0037\u0036\u0035\u0034\u0033\u0032\u0031\u0030\u002a\u0023])\ufe0f?\u20e3|(?:(?:[\u270c\u261d])(?:\ufe0f|(?!\ufe0e))|\ud83e\udd18|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd75\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0]|\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca\udfcb]|[\u270d\u270b\u270a\u26f9])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83e[\udd10-\udd17\udd80-\udd84\uddc0]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd74\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb-\uded0\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udff0\udff3-\udff5\udff7-\udfff]|[\ue50a\u27bf\u27b0\u2797\u2796\u2795\u2763\u2755\u2754\u2753\u274e\u274c\u2728\u2721\u271d\u2705\u26f8\u26f7\u26f4\u26f1\u26f0\u26e9\u26d3\u26d1\u26cf\u26ce\u26c8\u26b1\u26b0\u269c\u269b\u2699\u2697\u2696\u2694\u2692\u2638\u262f\u262e\u262a\u2626\u2623\u2622\u2620\u2618\u2604\u2603\u2602\u23fa\u23f9\u23f8\u23f3\u23f2\u23f1\u23f0\u23ef\u23ee\u23ed\u23ec\u23eb\u23ea\u23e9\u23cf\u2328]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37]|[\u3299\u3297\u303d\u3030\u2b55\u2b50\u2b1c\u2b1b\u2b07\u2b06\u2b05\u2935\u2934\u27a1\u2764\u2757\u2747\u2744\u2734\u2733\u2716\u2714\u2712\u270f\u2709\u2708\u2702\u26fd\u26fa\u26f5\u26f3\u26f2\u26ea\u26d4\u26c5\u26c4\u26be\u26bd\u26ab\u26aa\u26a1\u26a0\u2693\u267f\u267b\u2668\u2666\u2665\u2663\u2660\u2653\u2652\u2651\u2650\u264f\u264e\u264d\u264c\u264b\u264a\u2649\u2648\u263a\u2639\u2615\u2614\u2611\u260e\u2601\u2600\u25fe\u25fd\u25fc\u25fb\u25c0\u25b6\u25ab\u25aa\u24c2\u231b\u231a\u21aa\u21a9\u2199\u2198\u2197\u2196\u2195\u2194\u2139\u2122\u2049\u203c\u00ae\u00a9])(?:\ufe0f|(?!\ufe0e))/g, // used to find HTML special chars in attributes rescaper = /[&<>'"]/g, @@ -306,15 +306,14 @@ var twemoji = (function ( /** * Used to both remove the possible variant * and to convert utf16 into code points. - * If there is a zero-width-joiner, leave the variant in. + * If there is a zero-width-joiner (U+200D), leave the variants in. * @param string the raw text of the emoji match */ function grabTheRightIcon(rawText) { // if variant is present as \uFE0F - return toCodePoint( - rawText.indexOf('\u200D') < 0 ? - rawText.replace(/\uFE0F/g, '') : - rawText + return toCodePoint(/\u200D/.test(rawText) ? + rawText : + rawText.replace(/\uFE0F/g, '') ); } diff --git a/2/twemoji.min.js b/2/twemoji.min.js index c6fdb322..b6b4710d 100644 --- a/2/twemoji.min.js +++ b/2/twemoji.min.js @@ -1,2 +1,2 @@ /*! Copyright Twitter Inc. and other contributors. Licensed under MIT */ -var twemoji=function(){"use strict";var twemoji={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt),this)}},parse:parse,replace:replace,test:test},escaper={"&":"&","<":"<",">":">","'":"'",'"':"""},re=/\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0030-\u0039\u0023\u002a])\ufe0f?\u20e3|(?:(?:[\u261d\u270c])(?:\ufe0f|(?!\ufe0e))|\ud83c[\udfc2-\udfc4\udfc7\udfca\udfcb\udf85]|\ud83d[\udcaa\udc81-\udc83\udc85-\udc87\udc70-\udc78\udc7c\udc66-\udc69\udc6e\udc50\udc42\udc43\udc46-\udc4f\udd90\udd95\udd96\udd75\udec0\udeb4-\udeb6\udea3\ude45-\ude47\ude4b-\ude4f]|\ud83e\udd18|[\u26f9\u270a\u270b\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\uddf0\ud83c[\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff\uddea\uddec-\uddee]|\ud83c\uddf1\ud83c[\uddf0\uddf7-\uddfb\uddfe\udde6-\udde8\uddee]|\ud83c\uddf2\ud83c[\uddf0-\uddff\udde6\udde8-\udded]|\ud83c\uddf3\ud83c[\uddf1\uddf4\uddf5\uddf7\uddfa\uddff\udde6\udde8\uddea-\uddec\uddee]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe\udde6\uddea-\udded]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddf4\uddf8\uddfa\uddfc\uddea]|\ud83c\uddf8\ud83c[\uddf0-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff\udde6-\uddea\uddec-\uddef]|\ud83c\uddf9\ud83c[\uddf0-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff\udde6\udde8\udde9\uddeb-\udded\uddef]|\ud83c\uddfa\ud83c[\uddf2\uddf8\uddfe\uddff\udde6\uddec]|\ud83c\uddfb\ud83c[\uddf3\uddfa\udde6\udde8\uddea\uddec\uddee]|\ud83c\uddfc\ud83c[\uddf8\uddeb]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddf9\uddea]|\ud83c\uddff\ud83c[\uddf2\uddfc\udde6]|\ud83c\udde6\ud83c[\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff\udde8-\uddec\uddee]|\ud83c\udde7\ud83c[\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff\udde6\udde7\udde9-\uddef]|\ud83c\udde8\ud83c[\uddf0-\uddf5\uddf7\uddfa-\uddff\udde6\udde8\udde9\uddeb-\uddee]|\ud83c\udde9\ud83c[\uddf0\uddf2\uddf4\uddff\uddea\uddec\uddef]|\ud83c\uddea\ud83c[\uddf7-\uddfa\udde6\udde8\uddea\uddec\udded]|\ud83c\uddeb\ud83c[\uddf0\uddf2\uddf4\uddf7\uddee\uddef]|\ud83c\uddec\ud83c[\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe\udde6\udde7\udde9-\uddee]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\uddf1-\uddf4\uddf6-\uddf9\udde8-\uddea]|\ud83c\uddef\ud83c[\uddf2\uddf4\uddf5\uddea]|\ud83c[\udccf\uddf0-\uddff\udde6-\uddef\udd91-\udd9a\udd8e\ude50\ude51\ude32-\ude36\ude38-\ude3a\ude01\udff0\udff3-\udff5\udff7-\udfff\udfe0-\udfef\udfd0-\udfdf\udfc0\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udfcf\udfb0-\udfbf\udfa0-\udfaf\udf90-\udf93\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udf80-\udf84\udf86-\udf8f\udf70-\udf7f\udf60-\udf6f\udf50-\udf5f\udf40-\udf4f\udf30-\udf3f\udf20\udf21\udf24-\udf2f\udf10-\udf1f\udf00-\udf0f]|\ud83d[\udcf0-\udcfd\udcff\udce0-\udcef\udcd0-\udcdf\udcc0-\udccf\udcb0-\udcbf\udca0-\udca9\udcab-\udcaf\udc90-\udc9f\udc80\udc84\udc88-\udc8f\udc79-\udc7b\udc7d-\udc7f\udc60-\udc65\udc6a-\udc6d\udc6f\udc51-\udc5f\udc40\udc41\udc44\udc45\udc30-\udc3f\udc20-\udc2f\udc10-\udc1f\udc00-\udc0f\uddf3\uddfa-\uddff\udde1\udde3\udde8\uddef\uddd1-\uddd3\udddc-\uddde\uddc2-\uddc4\uddb1\uddb2\uddbc\udda5\udda8\udd87\udd8a-\udd8d\udd70\udd73\udd74\udd76-\udd79\udd60-\udd67\udd6f\udd50-\udd5f\udd49-\udd4e\udd30-\udd3d\udd20-\udd2f\udd10-\udd1f\udd00-\udd0f\udef0\udef3\udee0-\udee5\udee9\udeeb\udeec\uded0\udec1-\udec5\udecb-\udecf\udeb0-\udeb3\udeb7-\udebf\udea0-\udea2\udea4-\udeaf\ude90-\ude9f\ude80-\ude8f\ude40-\ude44\ude48-\ude4a\ude30-\ude3f\ude20-\ude2f\ude10-\ude1f\ude00-\ude0f]|\ud83e[\uddc0\udd80-\udd84\udd10-\udd17]|[\ue50a\u23f0-\u23f3\u23f8-\u23fa\u23e9-\u23ef\u23cf\u2328\u26f0\u26f1\u26f4\u26f7\u26f8\u26e9\u26d1\u26d3\u26c8\u26ce\u26cf\u26b0\u26b1\u2692\u2694\u2696\u2697\u2699\u269b\u269c\u2638\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2618\u2602-\u2604\u27b0\u27bf\u2795-\u2797\u2763\u2753-\u2755\u274c\u274e\u2721\u2728\u271d\u2705]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude37\ude2f\ude1a\ude02]|[\u3030\u303d\u3297\u3299\u2049\u203c\u21a9\u21aa\u2194-\u2199\u2139\u2122\u231a\u231b\u24c2\u25fb-\u25fe\u25c0\u25b6\u25aa\u25ab\u26f2\u26f3\u26f5\u26fa\u26fd\u26ea\u26d4\u26c4\u26c5\u26bd\u26be\u26a0\u26a1\u26aa\u26ab\u2693\u267b\u267f\u2660\u2663\u2665\u2666\u2668\u2650-\u2653\u2648-\u264f\u2639\u263a\u2611\u2614\u2615\u2600\u2601\u260e\u27a1\u2764\u2757\u2744\u2747\u2733\u2734\u2712\u2714\u2716\u2702\u2708\u2709\u270f\u2934\u2935\u2b50\u2b55\u2b1b\u2b1c\u2b05-\u2b07\u00a9\u00ae])(?:\ufe0f|(?!\ufe0e))/g,rescaper=/[&<>'"]/g,shouldntBeParsed=/IFRAME|NOFRAMES|NOSCRIPT|SCRIPT|SELECT|STYLE|TEXTAREA|[a-z]/,fromCharCode=String.fromCharCode;return twemoji;function createText(text){return document.createTextNode(text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return"".concat(options.base,options.size,"/",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!shouldntBeParsed.test(subnode.nodeName)){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf("‍")<0?rawText.replace(/\uFE0F/g,""):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index)))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(src){img=new Image;img.onerror=options.onerror;img.setAttribute("draggable","false");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf("on")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText));img=null}if(modified){if(i")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value==="number"?value+"x"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint==="string"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how==="function"){how={callback:how}}return(typeof what==="string"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes==="function"?how.attributes:returnNull,base:typeof how.base==="string"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i":">","'":"'",'"':"""},re=/\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc69\udc68]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc67\udc66]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc41\u200d\ud83d\udde8|(?:[\u0039\u0038\u0037\u0036\u0035\u0034\u0033\u0032\u0031\u0030\u002a\u0023])\ufe0f?\u20e3|(?:(?:[\u270c\u261d])(?:\ufe0f|(?!\ufe0e))|\ud83e\udd18|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd75\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0]|\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca\udfcb]|[\u270d\u270b\u270a\u26f9])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83e[\udd10-\udd17\udd80-\udd84\uddc0]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd74\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb-\uded0\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcc-\udff0\udff3-\udff5\udff7-\udfff]|[\ue50a\u27bf\u27b0\u2797\u2796\u2795\u2763\u2755\u2754\u2753\u274e\u274c\u2728\u2721\u271d\u2705\u26f8\u26f7\u26f4\u26f1\u26f0\u26e9\u26d3\u26d1\u26cf\u26ce\u26c8\u26b1\u26b0\u269c\u269b\u2699\u2697\u2696\u2694\u2692\u2638\u262f\u262e\u262a\u2626\u2623\u2622\u2620\u2618\u2604\u2603\u2602\u23fa\u23f9\u23f8\u23f3\u23f2\u23f1\u23f0\u23ef\u23ee\u23ed\u23ec\u23eb\u23ea\u23e9\u23cf\u2328]|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37]|[\u3299\u3297\u303d\u3030\u2b55\u2b50\u2b1c\u2b1b\u2b07\u2b06\u2b05\u2935\u2934\u27a1\u2764\u2757\u2747\u2744\u2734\u2733\u2716\u2714\u2712\u270f\u2709\u2708\u2702\u26fd\u26fa\u26f5\u26f3\u26f2\u26ea\u26d4\u26c5\u26c4\u26be\u26bd\u26ab\u26aa\u26a1\u26a0\u2693\u267f\u267b\u2668\u2666\u2665\u2663\u2660\u2653\u2652\u2651\u2650\u264f\u264e\u264d\u264c\u264b\u264a\u2649\u2648\u263a\u2639\u2615\u2614\u2611\u260e\u2601\u2600\u25fe\u25fd\u25fc\u25fb\u25c0\u25b6\u25ab\u25aa\u24c2\u231b\u231a\u21aa\u21a9\u2199\u2198\u2197\u2196\u2195\u2194\u2139\u2122\u2049\u203c\u00ae\u00a9])(?:\ufe0f|(?!\ufe0e))/g,rescaper=/[&<>'"]/g,shouldntBeParsed=/IFRAME|NOFRAMES|NOSCRIPT|SCRIPT|SELECT|STYLE|TEXTAREA|[a-z]/,fromCharCode=String.fromCharCode;return twemoji;function createText(text){return document.createTextNode(text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return"".concat(options.base,options.size,"/",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!shouldntBeParsed.test(subnode.nodeName)){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(/\u200D/.test(rawText)?rawText:rawText.replace(/\uFE0F/g,""))}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index)))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(src){img=new Image;img.onerror=options.onerror;img.setAttribute("draggable","false");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf("on")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText));img=null}if(modified){if(i")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value==="number"?value+"x"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint==="string"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how==="function"){how={callback:how}}return(typeof what==="string"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes==="function"?how.attributes:returnNull,base:typeof how.base==="string"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i'"]/g, @@ -307,15 +307,14 @@ var twemoji = (function ( /** * Used to both remove the possible variant * and to convert utf16 into code points. - * If there is a zero-width-joiner, leave the variant in. + * If there is a zero-width-joiner (U+200D), leave the variants in. * @param string the raw text of the emoji match */ function grabTheRightIcon(rawText) { // if variant is present as \uFE0F - return toCodePoint( - rawText.indexOf('\u200D') < 0 ? - rawText.replace(/\uFE0F/g, '') : - rawText + return toCodePoint(/\u200D/.test(rawText) ? + rawText : + rawText.replace(/\uFE0F/g, '') ); } diff --git a/2/utils/generate b/2/utils/generate index 08fc4f7e..00cd230c 100755 --- a/2/utils/generate +++ b/2/utils/generate @@ -344,9 +344,14 @@ Queue([ var result = []; var charClass = []; var charRange = []; - items.sort(sortMethod).forEach(function(item) { - var itemParts = item.split('\\u'); + items.map(function (item) { + // Convert from "\u2963\ufe0f" into ["2963", "fe0f"] + return item.split('\\u').slice(1); + }).sort(sortMethod).forEach(function (itemParts) { var prefix = itemParts.slice(0, -1).join('\\u'); + if (prefix) { + prefix = '\\u' + prefix; + } var suffix = itemParts.slice(-1); if (prefix !== currentPrefix) { flushCharClass(); @@ -363,7 +368,8 @@ Queue([ flushCharClass(); return result.join('|'); - function sortMethod(a,b) { + // a and b are arrays of hex UCS-2 units + function sortMethod(a, b) { return !a.length ? 0 : b.length - a.length || parseInt(b[0], 16) - parseInt(a[0], 16) || @@ -716,15 +722,14 @@ function createTwemoji(re) { /** * Used to both remove the possible variant * and to convert utf16 into code points. - * If there is a zero-width-joiner, leave the variant in. + * If there is a zero-width-joiner (U+200D), leave the variants in. * @param string the raw text of the emoji match */ function grabTheRightIcon(rawText) { // if variant is present as \uFE0F - return toCodePoint( - rawText.indexOf('\u200D') < 0 ? - rawText.replace(/\uFE0F/g, '') : - rawText + return toCodePoint(/\u200D/.test(rawText) ? + rawText : + rawText.replace(/\uFE0F/g, '') ); }