From f3893097d7cbabe12f96851daa9b48ff9ad14e4e Mon Sep 17 00:00:00 2001 From: Fangdun Tsai Date: Thu, 30 Apr 2026 08:47:28 +0800 Subject: [PATCH 1/2] Fix color emoji matching when emoji with non printing variation selector --- parley/src/shape/mod.rs | 15 ++++++++- parley/src/tests/test_analysis.rs | 29 ++++++++++++++++ .../NotoColorEmoji-CBTF-Subset.ttf | Bin 11128 -> 12600 bytes .../NotoColorEmoji-Subset.ttf | Bin 5620 -> 7088 bytes .../assets/fonts/noto_color_emoji/README.md | 3 +- parley_tests/Cargo.toml | 3 ++ ...printing_variation_selector_16-2x_hint.png | Bin 0 -> 7667 bytes ...ing_variation_selector_16-2x_hint_skew.png | Bin 0 -> 8272 bytes ...inting_variation_selector_16-2x_nohint.png | Bin 0 -> 7667 bytes ...g_variation_selector_16-2x_nohint_skew.png | Bin 0 -> 8272 bytes ...on_printing_variation_selector_16-hint.png | Bin 0 -> 2951 bytes ...inting_variation_selector_16-hint_skew.png | Bin 0 -> 3035 bytes ..._printing_variation_selector_16-nohint.png | Bin 0 -> 2951 bytes ...ting_variation_selector_16-nohint_skew.png | Bin 0 -> 3035 bytes parley_tests/tests/draw.rs | 31 ++++++++++++++++++ parley_tests/tests/util/env.rs | 5 +++ 16 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-2x_hint.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-2x_hint_skew.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-2x_nohint.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-2x_nohint_skew.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-hint.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-hint_skew.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint.png create mode 100644 parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint_skew.png diff --git a/parley/src/shape/mod.rs b/parley/src/shape/mod.rs index 3567d15fe..69cdd658e 100644 --- a/parley/src/shape/mod.rs +++ b/parley/src/shape/mod.rs @@ -247,7 +247,20 @@ fn fill_cluster_in_place( is_emoji_or_pictograph |= info.is_emoji_or_pictograph(); *code_unit_offset_in_string += ch.len_utf8(); - let contributes_to_shaping = info.contributes_to_shaping(); + // If the color emoji with non printing variation selector, ignores the variation selector. + // + // Its presentation depends on the platform and font. + // + // e.g. + // - `U+270C + U+FE0F`: `✌`, force basic presentation + // - `U+270C + U+FE0F`: `✌️`, force emoji presentation + // + // + let is_emoji_with_non_printing_variation_selector = + is_emoji_or_pictograph && info.is_variation_selector(); + + let contributes_to_shaping = + info.contributes_to_shaping() && !is_emoji_with_non_printing_variation_selector; if contributes_to_shaping { map_len += 1; } diff --git a/parley/src/tests/test_analysis.rs b/parley/src/tests/test_analysis.rs index 14146aecf..202e4f11a 100644 --- a/parley/src/tests/test_analysis.rs +++ b/parley/src/tests/test_analysis.rs @@ -85,6 +85,28 @@ impl TestContext { assert_eq!(actual, expected, "Force normalize list mismatch"); self } + + fn expect_is_emoji_or_pictograph_list(self, expected: Vec) -> Self { + let actual: Vec<_> = self + .layout_context + .info + .iter() + .map(|(info, _)| info.is_emoji_or_pictograph()) + .collect(); + assert_eq!(actual, expected, "Is emoji or pictograph list mismatch"); + self + } + + fn expect_is_variation_selector_list(self, expected: Vec) -> Self { + let actual: Vec<_> = self + .layout_context + .info + .iter() + .map(|(info, _)| info.is_variation_selector()) + .collect(); + assert_eq!(actual, expected, "Is variation selector list mismatch"); + self + } } fn verify_analysis( @@ -1156,3 +1178,10 @@ fn test_whitespace_contiguous_interspersed_in_latin_mixed() { Script::Latin, ]); } + +#[test] +fn test_color_emoji_with_non_printing_variation_selector() { + verify_analysis("\u{270c}\u{fe0f}", |_| {}) + .expect_is_emoji_or_pictograph_list(vec![true, false]) + .expect_is_variation_selector_list(vec![false, true]); +} diff --git a/parley_dev/assets/fonts/noto_color_emoji/NotoColorEmoji-CBTF-Subset.ttf b/parley_dev/assets/fonts/noto_color_emoji/NotoColorEmoji-CBTF-Subset.ttf index d0138dd26f6f706574739fb067e787db7cbbd2e3..b95563cd46484a3b3d98ad06c6dbfe4f0f7c8305 100644 GIT binary patch literal 12600 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 literal 11128 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 D7gnMR diff --git a/parley_dev/assets/fonts/noto_color_emoji/NotoColorEmoji-Subset.ttf b/parley_dev/assets/fonts/noto_color_emoji/NotoColorEmoji-Subset.ttf index 01733e0809bd9342ac0b84f4ccb01f974fbbae61..f84e750bb0f59bd50c982c4b096c56bdf41405e4 100644 GIT binary patch delta 2907 zcmYLLYit}>6+ZVdubs#4?Cj3$uGjnUzPxLDy=(6ywu3QFLK^DCZQ|4sZQ5)dH!g|e zNQt68BsPHHPb(2JRJ2kNl|Ud`h=SBqMJ*^uZ58^jDxj#UXea@G@GDI!H3?)nGq!{6 z@80ve_nvd^Id^<>=t8>-1OS3?1{j>!Hb1xbk6%A`10Z?Hh$P{<5;%IXrUt83iEx2+CS3E6d%Ed{NG!01Y6&vU=*Nfj?(HNB)P%uN+%j>dX)C z{Re=Fhr-Hg=cyB{&_rjqKz?)gCACXPtT)8|&d$LsK%rP{w_5F1u_#K0Acb8T~_UkGBJPPfh~$e_0WS)9zU3fMZ{EJ z;b3QBLd@y1GLcIw6P1yfsh#8dk8Ux-mOZyHt8Lkh8K5`GFWFyN2hzyYZFEk+U~C7e zDqW9<-i#WQ7!fBLq+%{7GPNs+*-Am#^qRazgAyN~TiD$a9ZR((L3H|9EV=0w?u_{w zrN3imVG%&6GE7gS-Dou%jb;Onq)v)9i~g~;)4*J!MWaef>!MbvIDolCpX`lncGuI1 ziN%D{ae8Fu^7gW-2MDDS&yG0U3~JWUsHrAHnW9n{G&zw10Y)^tA2Uotu@Tt` z;kAWSGo7k^d$PGl`hUWmf|;HA>Uifw-OIoZAnYM>2JXX(v0JSY##pQ6s#G$lS0T2D zNx?rXq*fa#1H(t5BznTAXnWy1UgcoOUCNS9pDbdI9ZFa@X$FScNs&r2XEdpWm=OpT z(^M8ox$S6_M0C3u5;QV6TNs$NnHf*&x*@SbsUrmwve1`~Q*H=~5H%T5Iadh@=%Lbp zVgwAO-->5sRZ3WWCQHI-5hz#;);I-aTW)m=7=DR@=7Q2E%G>PE$X0uXUuZpOjLq z1VoiS`Iqj6p4l@XZ-!yzUSHIN$`3T2OeY2dz8L1>H* z1f6>?1f`4E-#3^GHuPZ~7x8sl#JiI4f+8vI*iL;QH%70^8&8)|v6D6p7$&xin87p2 zYeZdtmEsXW&Z}&4v2$QbNHTm+y-&$_bBSKZ89Db`(X{)nw!0?Q#lzw?X|FsjAN7r> zZalkZ?VZPhTR#WJed}un`f^84|+>Ek<^bCSCLvvNw7newgk+ z4zm0s4({9f$yIN?ce?kYd-NP~o+o*n13u4T5N8p!1ZYVpX}uo6`h4Z?l`nj2Gyu&T zaQ*s^;MuIh+rNa`lIET@`g8%vt&9%<>RvHEWKF2M=Y!>kn^1!-P)AI{GEBf2w4sUL zqsQS1=pfa^`7ku_cLMbdU+?jU(PqroPQVhbUP4*Thex-OT6V`m`?`-~h>vaf=S}Dd zjsrk(9Q3nL^>ffb4ZtLc;0Pp$Lxgy_$q~#Sl!%1m2%>@TzN8-^t|I=4@NN&k#w3d< zA<&NC7nMu{bjfxkzJ}P3IECmUeuj7zaS`zeW(2?Q6gQ^$e*v9A+>dw&(LtO<97DW_ z_yOWA#CwPj5FaD{h4>8b6P;yM!~w(-;z`6BJP7O=B+ejyig*rj34t52ml5X?zr`#6 zIVd=WA%LR>Dvly(6p}MuJ&2%FNGHoaX}A~6d?kqVyAZP^PmiyyyKNBJ4j#~CY z-waIt4eS}fG)4XM&O;j4Xpr$&W-0Iurw1q~8)S}xwn648NSlXwuIzz=`;wI>MfdmC zz(R=v-7p-aU~Z6Q3YiVELLsz44pR^|cgp*ROBCcy$$B6nu5=rbA|IlVa375%y1wBE zg_OTb7^*1HVAL1aC^)`YgSsymqhR=gG9-LKl0ta%gk8QQP9e78P(KBIQ#tG_`>-fN za0_ew7QEj3HO?-xiU++8@cIDfL2LvR*Rd0@V<)i{aLG2*VmHhYnCSt(#9kqg>1Fs; zcFB`udqS+Mu;&$)$?b|(g{!Z`KtvkKi)&KV3 Z`@Np@hhA^+eRpg01@~-Jb3cgY{s-0{oxlJ9 delta 1399 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 literal 0 HcmV?d00001 diff --git a/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-hint_skew.png b/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-hint_skew.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba1318eff76b91270fd50700aec7f4ba5ed6b84 GIT binary patch literal 3035 zcmZ{mc{me}AIB$QjvP_x*d#)3l^mO?se~L^p@cGLn4u(d<;QHKkJuH}x!Mkb%4Sv@Q-Rqif6l4+d) zmng5RbEa#Te9-^!KrO+vUAaWbv^6W*K1M!PULG6$(o0g%TOIiG^f8kgff?qTu&G~E zoO?7*dvWDD7vICgZuS0wtwL6Bu0Jc9-U%&YPYT!5ulVhupKmKF(S*+4FOF8pM8_Pi zv}!$KN`wpA{#W^*?K7YM`X{9^X8!6Y4!L9OHrl!=qb^JPu6;Y<1$5ya&ceI1LK0#s zZpr~{+4+9W@aGHd8Y!9HVCb>C)H~VBBgZ!E#uGrZrTr_jPDNbhi14yLhSsFvB`fQ& zc0@d(I;1~gV4u9}n4TfoHN5QXeno80Cvuq-TyuVQpj7cA{nggKbr5HM>B_haUn#OY z^<*4F7ZC1wr+?0*pPD9nbStg?u`w480%*We4UyyX!k7sV_ z&U{bKYNhNrFLq+0zW7Lrw`&Elkh%?Y*~m`9&RS~I{@QbZFDXFAy4F@Z75bkDLCld>^YIKen_N#b);=hR9 z$JV{DK^{^s!{I;hsaiH0rx+eLjBkz`mN5O1M9DP_7qt8iZ^~j*Z#75|s0S{Or?EU> zv?cdy)Z?Wc}7ieBC+)+VZiizyxp zQ088Ns@s1PW+zgTvaLZ4c+UyuLHF(qiDV~^FVH6IgFq>xP5>m8qaC^U(O%HT_Z70uMd1%_5^sh|N0XlXN<|M!CkD>kJ6Esm zcQBhD1SqUk`pi(H^1ww=J?zN~r)kIU$gr@Ju8LFvsfh`c;w1zKHy{64VKRZ>4=!B) zQG3VTkL0XTS@PDS1N^G$kLP<_$BPhJYkY;Pp`)4by=E#>sUI6^Cu^01o>0__5wZEDJpD#Rl=-J(V9}EAL=AthKi)-Ep zOEQ_OcG)}dAsFV<&_7VHW?7rw^9=^A^`turcLaxiabs`O!*(6|FUy5UA#eQJm^6 zGR?cUCM{BRmDZIdd&p}+$vZYH=+mwmca((Xfs3HRXrhhtNzilL3Y*DUp~A1rkNG=M z7ru96)*?cq4icuuyzkE^O0dL`l*TABWf1KxTlkJIHy!mQU5EFP%yYc(t6T1)}2BTr@~3BP!XNr`*Ft2r|PS75RYGoL|=NNULEpaN~9;z%x$2~3%HOJA0#5o zIF+Ah(*k_A(%~3%EPGDS18n?LaKyi(Fl&_PC;jHN^w!-)V`R`)$78a?_3zjb>n*p7 zW%bFI7eD9HR#OFlibRvcteyk%fqB>+K2m@8^s-`OlU`%dqE#do-+u$Ssj?w2RvN$- z@3uWuvJ$1TWPZ}jY2oVo2Ev?j%Srb^2VJ3+mtQGq5FW%{hHme&gl<~^dA2iUjqrPa zPpV@|#nUeI>{&AbL?cSNWyi09LR5^Et1?DXPF$m4+9bd`5s~(7OL9Et5k1oxbM7db zstw{xU}LjwWo>8-sCe3V#pyk?j`2sF-* zw9|V*600iq*%2QLl{QQ!-_hi|#R6~+6xwJdZvHtNR4@#bbo7_0{6qVvvPlFp%SNvf zBTC$>iXrof!z*o1&&-&Rq}cAZvQq?R#jVxVOt4 z<)d&0zie(k(TjL-nr2=NmrD793)a@IaepYlAlz;vBP$qlopPEqj0#6nHC+E}zL_Kr4d0eL=wdJfOFqnG%7IXLk>5|j) zP8o%ccT*=~JN%U=W)z;;vjqx7>3Xh^khzLaG9qX6|Cv!>jG7mi7Dn0V3wFC3eGe%w zh|`5iE;Av68yRSsf|)smX|`t&i!hiI$ou3+6^%udGb4ITMP{=Qu-g7wxtpO?RadME?#-%3`5c?NlE#*T?)hfUTcVd{Sy&yzs4D4TaSUi;m+F{T_mC@rE52`QzQka6;IO?@mf6&b?!!jgW z_k=T2^L^e8^WWpTYLh_OGrPD;ZFtyHTVyw^86zKOJ9$%=wcQe9-TSm%7_;)SHR|)6 zf_Q%HLOpflp7{vvYEtRyz%7pYavZ{Myw?M)1M~}P0?^7QP3h#cTJHu?>LLG literal 0 HcmV?d00001 diff --git a/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint.png b/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint.png new file mode 100644 index 0000000000000000000000000000000000000000..bdcdbb76f7c1cf72d4a89a9b67cc5e6dad34a21e GIT binary patch literal 2951 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 literal 0 HcmV?d00001 diff --git a/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint_skew.png b/parley_tests/snapshots/draw_colr_emoji_with_non_printing_variation_selector_16-nohint_skew.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba1318eff76b91270fd50700aec7f4ba5ed6b84 GIT binary patch literal 3035 zcmZ{mc{me}AIB$QjvP_x*d#)3l^mO?se~L^p@cGLn4u(d<;QHKkJuH}x!Mkb%4Sv@Q-Rqif6l4+d) zmng5RbEa#Te9-^!KrO+vUAaWbv^6W*K1M!PULG6$(o0g%TOIiG^f8kgff?qTu&G~E zoO?7*dvWDD7vICgZuS0wtwL6Bu0Jc9-U%&YPYT!5ulVhupKmKF(S*+4FOF8pM8_Pi zv}!$KN`wpA{#W^*?K7YM`X{9^X8!6Y4!L9OHrl!=qb^JPu6;Y<1$5ya&ceI1LK0#s zZpr~{+4+9W@aGHd8Y!9HVCb>C)H~VBBgZ!E#uGrZrTr_jPDNbhi14yLhSsFvB`fQ& zc0@d(I;1~gV4u9}n4TfoHN5QXeno80Cvuq-TyuVQpj7cA{nggKbr5HM>B_haUn#OY z^<*4F7ZC1wr+?0*pPD9nbStg?u`w480%*We4UyyX!k7sV_ z&U{bKYNhNrFLq+0zW7Lrw`&Elkh%?Y*~m`9&RS~I{@QbZFDXFAy4F@Z75bkDLCld>^YIKen_N#b);=hR9 z$JV{DK^{^s!{I;hsaiH0rx+eLjBkz`mN5O1M9DP_7qt8iZ^~j*Z#75|s0S{Or?EU> zv?cdy)Z?Wc}7ieBC+)+VZiizyxp zQ088Ns@s1PW+zgTvaLZ4c+UyuLHF(qiDV~^FVH6IgFq>xP5>m8qaC^U(O%HT_Z70uMd1%_5^sh|N0XlXN<|M!CkD>kJ6Esm zcQBhD1SqUk`pi(H^1ww=J?zN~r)kIU$gr@Ju8LFvsfh`c;w1zKHy{64VKRZ>4=!B) zQG3VTkL0XTS@PDS1N^G$kLP<_$BPhJYkY;Pp`)4by=E#>sUI6^Cu^01o>0__5wZEDJpD#Rl=-J(V9}EAL=AthKi)-Ep zOEQ_OcG)}dAsFV<&_7VHW?7rw^9=^A^`turcLaxiabs`O!*(6|FUy5UA#eQJm^6 zGR?cUCM{BRmDZIdd&p}+$vZYH=+mwmca((Xfs3HRXrhhtNzilL3Y*DUp~A1rkNG=M z7ru96)*?cq4icuuyzkE^O0dL`l*TABWf1KxTlkJIHy!mQU5EFP%yYc(t6T1)}2BTr@~3BP!XNr`*Ft2r|PS75RYGoL|=NNULEpaN~9;z%x$2~3%HOJA0#5o zIF+Ah(*k_A(%~3%EPGDS18n?LaKyi(Fl&_PC;jHN^w!-)V`R`)$78a?_3zjb>n*p7 zW%bFI7eD9HR#OFlibRvcteyk%fqB>+K2m@8^s-`OlU`%dqE#do-+u$Ssj?w2RvN$- z@3uWuvJ$1TWPZ}jY2oVo2Ev?j%Srb^2VJ3+mtQGq5FW%{hHme&gl<~^dA2iUjqrPa zPpV@|#nUeI>{&AbL?cSNWyi09LR5^Et1?DXPF$m4+9bd`5s~(7OL9Et5k1oxbM7db zstw{xU}LjwWo>8-sCe3V#pyk?j`2sF-* zw9|V*600iq*%2QLl{QQ!-_hi|#R6~+6xwJdZvHtNR4@#bbo7_0{6qVvvPlFp%SNvf zBTC$>iXrof!z*o1&&-&Rq}cAZvQq?R#jVxVOt4 z<)d&0zie(k(TjL-nr2=NmrD793)a@IaepYlAlz;vBP$qlopPEqj0#6nHC+E}zL_Kr4d0eL=wdJfOFqnG%7IXLk>5|j) zP8o%ccT*=~JN%U=W)z;;vjqx7>3Xh^khzLaG9qX6|Cv!>jG7mi7Dn0V3wFC3eGe%w zh|`5iE;Av68yRSsf|)smX|`t&i!hiI$ou3+6^%udGb4ITMP{=Qu-g7wxtpO?RadME?#-%3`5c?NlE#*T?)hfUTcVd{Sy&yzs4D4TaSUi;m+F{T_mC@rE52`QzQka6;IO?@mf6&b?!!jgW z_k=T2^L^e8^WWpTYLh_OGrPD;ZFtyHTVyw^86zKOJ9$%=wcQe9-TSm%7_;)SHR|)6 zf_Q%HLOpflp7{vvYEtRyz%7pYavZ{Myw?M)1M~}P0?^7QP3h#cTJHu?>LLG literal 0 HcmV?d00001 diff --git a/parley_tests/tests/draw.rs b/parley_tests/tests/draw.rs index 5ed2661b6..b32e9891c 100644 --- a/parley_tests/tests/draw.rs +++ b/parley_tests/tests/draw.rs @@ -172,3 +172,34 @@ fn draw_colr_emoji() { layout }); } + +/// Test COLR emoji with non printing variation selector 16 rendering across different hinting, +/// per-glyph transform, and scale configurations. +#[cfg(all(target_os = "macos", feature = "system"))] +#[test] +fn draw_colr_emoji_with_non_printing_variation_selector_16() { + let mut env = TestEnv::new(test_name!(), None); + env.set_tolerance(5.0); + + let collection = &mut env.font_context().collection; + collection.load_system_fonts(); + + let text = "\u{270c}\u{fe0f}\u{2705}\u{270c}\u{fe0f}"; + + test_with_configs(&mut env, |env| { + let mut builder = env.ranged_builder(text); + builder.push_default(StyleProperty::FontSize(24.0)); + builder.push_default(StyleProperty::FontFamily(FontFamily::named( + "Apple Color Emoji", + ))); + builder.push( + StyleProperty::FontFamily(FontFamily::named("Noto Color Emoji")), + 0..9, + ); + + let mut layout = builder.build(text); + layout.break_all_lines(None); + layout.align(Alignment::Start, AlignmentOptions::default()); + layout + }); +} diff --git a/parley_tests/tests/util/env.rs b/parley_tests/tests/util/env.rs index cbeb8fb67..910e5f0a2 100644 --- a/parley_tests/tests/util/env.rs +++ b/parley_tests/tests/util/env.rs @@ -155,6 +155,11 @@ impl TestEnv { } } + #[cfg(all(target_os = "macos", feature = "system"))] + pub(crate) fn font_context(&mut self) -> &mut FontContext { + &mut self.font_cx + } + pub(crate) fn rendering_config(&mut self) -> &mut RenderingConfig { &mut self.rendering_config } From b7e2a1a8131eb0192659ac98ddbfabcaa8c1644d Mon Sep 17 00:00:00 2001 From: Fangdun Tsai Date: Mon, 4 May 2026 09:57:09 +0800 Subject: [PATCH 2/2] Improve comments --- parley/src/shape/mod.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/parley/src/shape/mod.rs b/parley/src/shape/mod.rs index 69cdd658e..cd451001e 100644 --- a/parley/src/shape/mod.rs +++ b/parley/src/shape/mod.rs @@ -247,8 +247,11 @@ fn fill_cluster_in_place( is_emoji_or_pictograph |= info.is_emoji_or_pictograph(); *code_unit_offset_in_string += ch.len_utf8(); - // If the color emoji with non printing variation selector, ignores the variation selector. - // + // TODO: Explore ignoring other modifiers in determining `contributes_to_shaping`: + // regional indicators, subdivision flag tag sequences, skin tone modifiers + // See also: https://github.com/google/emoji-segmenter + + // If the color emoji has a non-printing variation selector, ignore the variation selector. // Its presentation depends on the platform and font. // // e.g.