New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 764859 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner:
Closed: Oct 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Chrome , Mac
Pri: 1
Type: Bug-Regression



Sign in to add a comment

Wreslters and Handshake Emojis + Skin Tone modifier sequence is rendered as two characters when width constrained

Reported by madlittl...@gmail.com, Sep 13 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36

Steps to reproduce the problem:
Demo: https://jsfiddle.net/MadLittleMods/a6ym9egp/

1. Create a div with some CSS `width: 30px;`
2. Add the handshake "🀝🏿" or wrestlers "🀼🏿" emoji with a skin tone modifier

What is the expected behavior?
The unicode emoji ZWJ sequence should render as a single emoji, https://i.imgur.com/zis2QVg.png

What went wrong?
The unicode emoji ZWJ sequence is rendered as two characters (base emoji and the skin tone modifier emoji wrapped to the next line), https://i.imgur.com/vM9Dmx3.png

Did this work before? Yes 59.0.3071.15

Does this work in other browsers? Yes

Chrome version: 60.0.3112.113  Channel: stable
OS Version: 10.0
Flash Version: 

This occurs on macOS 10.12.6 and Windows 10. Reproducible in Chrome 60.0.3112.113 - 61.0.3163.79.

This used to work as expected and was tested in Chrome 56.0.2902.0 - 59.0.3071.15.
 
chrome-unicode-zwj-sequence-split-into-characters-when-width-contrained.html
2.4 KB View Download
This affects the GitLab award emoji menu which is being tracked in https://gitlab.com/gitlab-org/gitlab-ce/issues/37654
Labels: Needs-Triage-M61 Needs-Bisect

Comment 3 Deleted

Able to reproduce on Windows-10 and Mac OS 10.12.6 using chrome stable M61-61.0.3163.79 
Note: Observing square box instead of emoji in Ubunt 14.04

Bisect Information:
=====================
Good build: 60.0.3099.0 (471588)
Bad Build : 60.0.3100.0 (471639)

Change Log URL: 
https://chromium.googlesource.com/chromium/src/+log/dbbb4e564b1412421f3a7b70cd8fa267581b3dea..d688239189bd18103150f9135931cc632ec3d308

From the above change log suspecting below change
https://chromium.googlesource.com/chromium/src/+/ee36babf91a54379889370cdd207e818555acb5d

jshin@- Could you please check whether this is caused with respect to your change, if not please help us in assigning it to the right owner.

Labels: -hasBiset hasbisect

Comment 6 by js...@chromium.org, Sep 14 2017

Cc: drott@chromium.org aheninger@google.com
Labels: OS-Chrome OS-Linux
Summary: Base Emoji + Skin Tone modifier sequence is rendered as two characters when width constrained (was: Unicode emoji (ZWJ sequence) rendered as two characters when width constrained)
Will check ICU line break iterator (because the range in comment 4 include ICU update to 59.1). 

Hmm  on Linux, I even have U+1F91D (heart) + U+1F3FF (a skin tone modifier).  

Comment 7 by js...@chromium.org, Oct 26 2017

A test program is attached and the result is unexpected and wrong. I'll file an upstream bug. (it's really strange because this must have been tested by both ICU and Blink .) 

iteration=0, index=0, ruleStatus=0
iteration=1, index=2, ruleStatus=0
iteration=2, index=4, ruleStatus=0
iteration=3, index=6, ruleStatus=0
iteration=4, index=8, ruleStatus=0
iteration=5, index=10, ruleStatus=0
iteration=6, index=12, ruleStatus=0
iteration=7, index=12, ruleStatus=0
iteration=8, index=12, ruleStatus=0
iteration=9, index=12, ruleStatus=0
iteration=10, index=12, ruleStatus=0
iteration=11, index=12, ruleStatus=0

emojilb.cpp
635 bytes View Download

Comment 9 by js...@chromium.org, Oct 26 2017

Cc: markda...@google.com
Labels: -Needs-Triage-M61
Hmmm... It turned out that 

U+1F91D has LB=Ideographic instead of LB=E_Base (see 
https://unicode.org/cldr/utility/character.jsp?a=1F91D  ). 

So does U+1F93C . 

The current ICU behavior is compliant to UAX #14 ( http://unicode.org/reports/tr14/ ). 

OTOH, most users have a different expectation. Handshake and wrestler Emoji seem quite natural to be skin-tone-modified (except that Handshake has two hands .... ). It appears that there are already Emoji fonts that apply skin-tone-modifier to those Emoji. 

Anyway, some spec consideration is necessary.  

Andy and Mark: what's your take on this? 





Comment 10 by js...@chromium.org, Oct 26 2017

Status: WontFix (was: Assigned)
I meant to check this on Safari + macOS 10.13 at home last night, but I forgot. I suspect that Safari (when tested by the reporter) didn't have the most up-to-date Unicode Emoji / Line-breaking data. With that in place, I believe Safari will behave like Chrome. 

For now, closing as WAI. I'll talk to Mark and Andy about this offline. 

Comment 11 by js...@chromium.org, Oct 31 2017

Summary: Wreslters and Handshake Emojis + Skin Tone modifier sequence is rendered as two characters when width constrained (was: Base Emoji + Skin Tone modifier sequence is rendered as two characters when width constrained)
It turned out that Unicode Emoji data had changed over time. 

Wreslters and Handshakes used to be classified as Emoji_Base, but not any more. That's why the behavior changed when I upgraded ICU to 59.x 

@js... Can you link to the files in the source or even the specific change (I am curious)? Perhaps even some discussion/review that happened around this, linking to the spec, etc.

I can understand changing the classification of characters causing it to be separate but not why it only happens when width constrained???

With Chrome 61.0.3163.100, I can only reproduce the width constrained differences with the skin toned handshake emoji "🀝🏿". The wrestlers emoji is always two characters now.

---

I also noticed the linked jsFiddle in the OP no longer is working. It looks like jsFiddle is messing up the unicode. I created a CodePen if you want to easily view it, https://codepen.io/MadLittleMods/pen/dZMeXN

Sign in to add a comment