2020-11-22 01:54:59 +03:00
|
|
|
/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */
|
|
|
|
/*
|
|
|
|
https://github.com/twitter/twemoji/blob/gh-pages/LICENSE
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
Stripped down for usage in Fernschreiber.
|
|
|
|
*/
|
|
|
|
.pragma library
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
// RegExp based on emoji's official Unicode standards
|
|
|
|
// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
|
2024-02-02 00:08:45 +03:00
|
|
|
var re = /(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud8
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
// avoid runtime RegExp creation for not so smart,
|
|
|
|
// not JIT based, and old browsers / engines
|
|
|
|
UFE0Fg = /\uFE0F/g,
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
// avoid using a string literal like '\u200D' here because minifiers expand it inline
|
|
|
|
U200D = String.fromCharCode(0x200D),
|
2020-12-21 05:32:39 +03:00
|
|
|
basePath = Qt.resolvedUrl("./emoji/");
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
function toCodePoint(unicodeSurrogates) {
|
|
|
|
var
|
|
|
|
r = [],
|
|
|
|
c = 0,
|
|
|
|
p = 0,
|
|
|
|
i = 0;
|
|
|
|
while (i < unicodeSurrogates.length) {
|
|
|
|
c = unicodeSurrogates.charCodeAt(i++);
|
|
|
|
if (p) {
|
|
|
|
r.push((0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00)).toString(16));
|
|
|
|
p = 0;
|
|
|
|
} else if (0xD800 <= c && c <= 0xDBFF) {
|
|
|
|
p = c;
|
|
|
|
} else {
|
|
|
|
r.push(c.toString(16));
|
2020-08-13 23:32:35 +03:00
|
|
|
}
|
|
|
|
}
|
2020-11-22 01:54:59 +03:00
|
|
|
return r.join('-');
|
|
|
|
}
|
2020-08-13 23:32:35 +03:00
|
|
|
|
2021-05-21 00:41:55 +03:00
|
|
|
function getEmojiPath(str) {
|
|
|
|
return basePath + toCodePoint(str.indexOf(U200D) < 0 ? str.replace(UFE0Fg, '') : str) + '.svg';
|
|
|
|
}
|
|
|
|
|
2020-11-22 01:54:59 +03:00
|
|
|
function emojify(str, emojiSize) {
|
|
|
|
return String(str).replace(re, function (rawText) {
|
2020-12-21 05:32:39 +03:00
|
|
|
var iconId = toCodePoint(rawText.indexOf(U200D) < 0 ?
|
2020-11-22 01:54:59 +03:00
|
|
|
rawText.replace(UFE0Fg, '') :
|
2020-12-21 05:32:39 +03:00
|
|
|
rawText);
|
|
|
|
return iconId ?
|
2020-11-22 01:54:59 +03:00
|
|
|
// recycle the match string replacing the emoji
|
|
|
|
// with its image counter part
|
2020-12-21 05:32:39 +03:00
|
|
|
'<img '.concat(
|
2020-11-22 01:54:59 +03:00
|
|
|
'src="',
|
|
|
|
basePath,
|
|
|
|
iconId,
|
|
|
|
'.svg',
|
2021-01-17 13:56:56 +03:00
|
|
|
'" align="middle" width="',
|
|
|
|
Math.round(emojiSize * 1.15 ),
|
2020-11-22 01:54:59 +03:00
|
|
|
'" height="',
|
2021-01-17 13:56:56 +03:00
|
|
|
Math.round(emojiSize * 1.15 ),
|
2020-11-22 01:54:59 +03:00
|
|
|
'"/>'
|
2020-12-21 05:32:39 +03:00
|
|
|
) : rawText;
|
2020-08-13 23:32:35 +03:00
|
|
|
}
|
2020-12-21 05:32:39 +03:00
|
|
|
);
|
2020-11-26 16:44:02 +03:00
|
|
|
}
|