Skip to content
Extraits de code Groupes Projets
Valider 09e86ef9 rédigé par MIYAGI Hikaru's avatar MIYAGI Hikaru Validation de Eugen Rochko
Parcourir les fichiers

make number of comparison in emojify() fewer (#4500)

fix style

"©"削除処理をemojione_lightに移動
parent 9ba7d526
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -3,34 +3,28 @@ import Trie from 'substring-trie'; ...@@ -3,34 +3,28 @@ import Trie from 'substring-trie';
const trie = new Trie(Object.keys(unicodeMapping)); const trie = new Trie(Object.keys(unicodeMapping));
const excluded = ['', '©', '®']; const emojify = str => {
let rtn = '';
function emojify(str) { for (;;) {
// This walks through the string from start to end, ignoring any tags (<p>, <br>, etc.) let match, i = 0;
// and replacing valid unicode strings while (i < str.length && str[i] !== '<' && !(match = trie.search(str.slice(i)))) {
// that _aren't_ within tags with an <img> version. i += str.codePointAt(i) < 65536 ? 1 : 2;
// The goal is to be the same as an emojione.regUnicode replacement, but faster. }
let i = -1; if (i === str.length)
let insideTag = false; break;
let match; else if (str[i] === '<') {
while (++i < str.length) { let tagend = str.indexOf('>', i + 1) + 1;
const char = str.charAt(i); if (!tagend)
if (insideTag && char === '>') { break;
insideTag = false; rtn += str.slice(0, tagend);
} else if (char === '<') { str = str.slice(tagend);
insideTag = true; } else {
} else if (!insideTag && (match = trie.search(str.substring(i)))) { const [filename, shortCode] = unicodeMapping[match];
const unicodeStr = match; rtn += str.slice(0, i) + `<img draggable="false" class="emojione" alt="${match}" title=":${shortCode}:" src="/emoji/${filename}.svg" />`;
if (unicodeStr in unicodeMapping && excluded.indexOf(unicodeStr) === -1) { str = str.slice(i + match.length);
const [filename, shortCode] = unicodeMapping[unicodeStr];
const alt = unicodeStr;
const replacement = `<img draggable="false" class="emojione" alt="${alt}" title=":${shortCode}:" src="/emoji/${filename}.svg" />`;
str = str.substring(0, i) + replacement + str.substring(i + unicodeStr.length);
i += (replacement.length - unicodeStr.length); // jump ahead the length we've added to the string
}
} }
} }
return str; return rtn + str;
} };
export default emojify; export default emojify;
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
const emojione = require('emojione'); const emojione = require('emojione');
const mappedUnicode = emojione.mapUnicodeToShort(); const mappedUnicode = emojione.mapUnicodeToShort();
const excluded = ['®', '©', ''];
module.exports.unicodeMapping = Object.keys(emojione.jsEscapeMap) module.exports.unicodeMapping = Object.keys(emojione.jsEscapeMap)
.filter(c => !excluded.includes(c))
.map(unicodeStr => [unicodeStr, mappedUnicode[emojione.jsEscapeMap[unicodeStr]]]) .map(unicodeStr => [unicodeStr, mappedUnicode[emojione.jsEscapeMap[unicodeStr]]])
.map(([unicodeStr, shortCode]) => ({ [unicodeStr]: [emojione.emojioneList[shortCode].fname, shortCode.slice(1, shortCode.length - 1)] })) .map(([unicodeStr, shortCode]) => ({ [unicodeStr]: [emojione.emojioneList[shortCode].fname, shortCode.slice(1, shortCode.length - 1)] }))
.reduce((x, y) => Object.assign(x, y), { }); .reduce((x, y) => Object.assign(x, y), { });
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter