FIX: emojis are hard 🤷

This commit is contained in:
Régis Hanol 2019-01-04 17:19:44 +01:00
parent f400830575
commit 5ac1e3d4cd

View File

@ -122,16 +122,22 @@ function getEmojiTokenByTranslation(content, pos, state) {
let found = null; let found = null;
while (t.length > 0 && pos < content.length) { while (t.length > 0 && pos < content.length) {
let matched = false;
let code = content.charCodeAt(pos); let code = content.charCodeAt(pos);
for (let i = 0; i < t.length; i++) { for (let i = 0; i < t.length; i++) {
if (t[i][0] === code) { if (t[i][0] === code) {
matched = true;
found = t[i][2]; found = t[i][2];
t = t[i][1]; t = t[i][1];
break; break;
} }
} }
if (!matched) {
return;
}
pos++; pos++;
} }
@ -164,26 +170,32 @@ function getEmojiTokenByTranslation(content, pos, state) {
} }
} }
function applyEmoji(content, state, emojiUnicodeReplacer, enableShortcuts, inlineEmoji) { function applyEmoji(
content,
state,
emojiUnicodeReplacer,
enableShortcuts,
inlineEmoji
) {
let result = null; let result = null;
let contentToken = null;
let start = 0; let start = 0;
if (emojiUnicodeReplacer) { if (emojiUnicodeReplacer) {
content = emojiUnicodeReplacer(content); content = emojiUnicodeReplacer(content);
} }
let endToken = content.length; let end = content.length;
for (let i = 0; i < content.length - 1; i++) { for (let i = 0; i < content.length - 1; i++) {
let offset = 0; let offset = 0;
let token = null; let token = null;
const emojiName = getEmojiName(content, i, state, inlineEmoji);
if (emojiName) { const name = getEmojiName(content, i, state, inlineEmoji);
token = getEmojiTokenByName(emojiName, state);
if (name) {
token = getEmojiTokenByName(name, state);
if (token) { if (token) {
offset = emojiName.length + 2; offset = name.length + 2;
} }
} }
@ -199,22 +211,24 @@ function applyEmoji(content, state, emojiUnicodeReplacer, enableShortcuts, inlin
if (token) { if (token) {
result = result || []; result = result || [];
if (i - start > 0) { if (i - start > 0) {
contentToken = new state.Token("text", "", 0); let text = new state.Token("text", "", 0);
contentToken.content = content.slice(start, i); text.content = content.slice(start, i);
result.push(contentToken); result.push(text);
} }
result.push(token); result.push(token);
i += offset;
endToken = start = i; end = start = i + offset;
i += offset - 1;
} }
} }
if (endToken < content.length) { if (end < content.length) {
contentToken = new state.Token("text", "", 0); let text = new state.Token("text", "", 0);
contentToken.content = content.slice(endToken); text.content = content.slice(end);
result.push(contentToken); result.push(text);
} }
return result; return result;