Removing modifiers in emojis
by Derek Leung
JavaScript
var UnicodeString;
function main(){
// Modifiers
var modifiersMin = 0x1F3FB, modifiersMax = 0x1F3FF;
// Emoji with U+1F3FB "light skin tone" modifier
var string = new UnicodeString("Hello from 🤷🏻‍♂️!");
console.log("Emoji with U+1F3FB \"light skin tone\" modifier:", string.toString());
console.log(string.codePoints.map(c => c.toString(16)));
// Getting rid of the skin tone modifier
string = new UnicodeString(string.codePoints.filter(c => c < modifiersMin || c > modifiersMax));
console.log("Emoji without modifier:", string.toString());
console.log(string.codePoints.map(c => c.toString(16)));
alert(string.toString());
}
/* https://stackoverflow.com/a/6886748/283863 */
UnicodeString = (function() {
function surrogatePairToCodePoint(charCode1, charCode2) {
return ((charCode1 & 0x3FF) << 10) + (charCode2 & 0x3FF) + 0x10000;
}
function stringToCodePointArray(str) {
var codePoints = [], i = 0, charCode;
while (i < str.length) {
charCode = str.charCodeAt(i);
if ((charCode & 0xF800) == 0xD800) {
codePoints.push(surrogatePairToCodePoint(charCode, str.charCodeAt(++i)));
} else {
codePoints.push(charCode);
}
++i;
}
return codePoints;
}
function codePointArrayToString(codePoints) {
var stringParts = [];
for (var i = 0, len = codePoints.length, codePoint, offset, codePointCharCodes; i < len; ++i) {
codePoint = codePoints[i];
if (codePoint > 0xFFFF) {
offset = codePoint - 0x10000;
codePointCharCodes = [0xD800 + (offset >> 10), 0xDC00 + (offset & 0x3FF)];
} else {
codePointCharCodes = [codePoint];
}
stringParts.push(String.fromCharCode.apply(String, codePointCharCodes));
}
return stringParts.join("");
}
function UnicodeString(arg)...