diff --git a/addons/xterm-addon-unicode-graphemes/test/UnicodeGraphemesAddon.api.ts b/addons/xterm-addon-unicode-graphemes/test/UnicodeGraphemesAddon.api.ts index 13a5ef84..ff4f52aa 100644 --- a/addons/xterm-addon-unicode-graphemes/test/UnicodeGraphemesAddon.api.ts +++ b/addons/xterm-addon-unicode-graphemes/test/UnicodeGraphemesAddon.api.ts @@ -49,14 +49,20 @@ describe('UnicodeGraphemesAddon', () => { 'baby with emoji modifier fitzpatrick type-6; baby'); assert.equal(await evalWidth('\u{1F469}\u200d\u{1f469}\u200d\u{1f466}'), 2, 'woman+zwj+woman+zwj+boy'); + assert.equal(await evalWidth('=\u{1F3CB}\u{FE0F}=\u{F3CB}\u{1F3FE}\u200D\u2640='), 7, + 'person lifting weights (plain, emoji); woman lighting weights, medium dark'); + assert.equal(await evalWidth('\u{1F469}\u{1F469}\u{200D}\u{1F393}\u{1F468}\u{1F3FF}\u{200D}\u{1F393}'), 6, + 'woman; woman student; man student dark'); assert.equal(await evalWidth('\u{1f1f3}\u{1f1f4}/'), 3, 'regional indicator symbol letters N and O, cluster'); assert.equal(await evalWidth('\u{1f1f3}/\u{1f1f4}'), 3, 'regional indicator symbol letters N and O, separated'); assert.equal(await evalWidth('\u0061\u0301'), 1, 'letter a with acute accent'); - assert.equal(await evalWidth('{\u1100\u1161\u11a8}'), 4, + assert.equal(await evalWidth('{\u1100\u1161\u11a8\u1100\u1161}'), 6, 'Korean Jamo'); + assert.equal(await evalWidth('\uAC00=\uD685='), 6, + 'Hangul syllables (pre-composed)'); assert.equal(await evalWidth('(\u26b0\ufe0e)'), 3, 'coffin with text presentation'); assert.equal(await evalWidth('(\u26b0\ufe0f)'), 4, diff --git a/demo/client.ts b/demo/client.ts index ff38623c..d733ec7e 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -1100,25 +1100,20 @@ function getRandomSgr(): string { function addGraphemeClusters(): void { term.write('\n\n\r'); - term.writeln('Simple emoji (v6: 10 cells, v15: 20 cells)'); - term.writeln('🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣'); - term.writeln('baby with emoji modifier fitzpatrick type-6; baby'); - term.writeln('\u{1F476}\u{1F3FF}\u{1F476}'); - term.writeln('woman+zwj+woman+zwj+boy'); - term.writeln('\u{1F469}\u200d\u{1f469}\u200d\u{1f466}'); - term.writeln('REGIONAL INDICATOR SYMBOL LETTER N and RI O'); - term.writeln('\u{1f1f3}\u{1f1f4}_'); - term.writeln('\u{1f1f3}_\u{1f1f4}'); - term.writeln('letter a with acute accent'); - term.writeln('\u0061\u0301'); - term.writeln('Korean Jamo'); - term.writeln('{\u1100\u1161\u11a8}'); - term.writeln('coffin with text_presentation'); - term.writeln('(\u26b0\ufe0e)'); - term.writeln('coffin with Emoji_presentation'); - term.writeln('(\u26b0\ufe0f)'); - term.writeln('Égalité (using separate acute) emoij_presentation'); - term.writeln(''); + term.writeln('🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣 [Simple emoji v6: 10 cells, v15: 20 cells]'); + term.writeln('\u{1F476}\u{1F3FF}\u{1F476} [baby with emoji modifier fitzpatrick type-6; baby]'); + term.writeln('\u{1F469}\u200d\u{1f469}\u200d\u{1f466} [woman+zwj+woman+zwj+boy]'); + term.writeln('\u{1F64B}\u{1F64B}\u{200D}\u{2642}\u{FE0F} [person/man raising hand]'); + term.writeln('\u{1F3CB}\u{FE0F}=\u{1F3CB}\u{1F3FE}\u{200D}\u{2640}\u{FE0F} [person lifting weights emoji; woman lighting weights, medium dark]'); + term.writeln('\u{1F469}\u{1F469}\u{200D}\u{1F393}\u{1F468}\u{1F3FF}\u{200D}\u{1F393} [woman; woman student; man student dark]'); + term.writeln('\u{1f1f3}\u{1f1f4}_ [REGIONAL INDICATOR SYMBOL LETTER N and RI O]'); + term.writeln('\u{1f1f3}_\u{1f1f4} {RI N; underscore; RI O]'); + term.writeln('\u0061\u0301 [letter a with acute accent]'); + term.writeln('\u1100\u1161\u11A8=\u1100\u1161= [Korean Jamo]'); + term.writeln('\uAC00=\uD685= [Hangul syllables (pre-composed)]'); + term.writeln('(\u26b0\ufe0e) [coffin with text_presentation]'); + term.writeln('(\u26b0\ufe0f) [coffin with Emoji_presentation]'); + term.writeln(' [Égalité (using separate acute) emoij_presentation]'); } function addDecoration(): void {