diff --git a/src/Tokenizer.ts b/src/Tokenizer.ts index 34c8e7510b..94c2ed3b36 100644 --- a/src/Tokenizer.ts +++ b/src/Tokenizer.ts @@ -629,7 +629,7 @@ export class _Tokenizer { endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?) - maskedSrc = maskedSrc.slice(-1 * src.length + match[0].length - 1); + maskedSrc = maskedSrc.slice(-1 * src.length + lLength); while ((match = endReg.exec(maskedSrc)) != null) { rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; @@ -654,8 +654,9 @@ export class _Tokenizer { // Remove extra characters. *a*** -> *a* rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); - - const raw = [...src].slice(0, lLength + match.index + rLength + 1).join(''); + // char length can be >1 for unicode characters; + const lastCharLength = [...match[0]][0].length; + const raw = src.slice(0, lLength + match.index + lastCharLength + rLength); // Create `em` if smallest delimiter has odd char count. *a*** if (Math.min(lLength, rLength) % 2) { diff --git a/test/specs/new/emoji_inline.html b/test/specs/new/emoji_inline.html index 17d788c15e..7ea637d5d8 100644 --- a/test/specs/new/emoji_inline.html +++ b/test/specs/new/emoji_inline.html @@ -18,3 +18,5 @@

āš ļø test

Here, the emoji rendering works, but the text doesn't get rendered in italic.

šŸ’ test

+

tšŸ’t test

+

tšŸ’t test

diff --git a/test/specs/new/emoji_inline.md b/test/specs/new/emoji_inline.md index 5690933d30..7a9d4f2d67 100644 --- a/test/specs/new/emoji_inline.md +++ b/test/specs/new/emoji_inline.md @@ -37,3 +37,7 @@ Situations where it works: Here, the emoji rendering works, but the text doesn't get rendered in italic. *šŸ’ test* + +*tšŸ’t* test + +**tšŸ’t** test