Bug 480247 - Missing emojis where name includes " E"
Summary: Missing emojis where name includes " E"
Status: RESOLVED FIXED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Emoji Selector (show other bugs)
Version: 5.27.10
Platform: Fedora RPMs Linux
: NOR minor
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-01-23 22:08 UTC by Oliver Jõgar
Modified: 2024-02-05 19:01 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments
Screen recording example of missing emojis (2.78 MB, video/webm)
2024-01-23 22:08 UTC, Oliver Jõgar
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oliver Jõgar 2024-01-23 22:08:18 UTC
Created attachment 165171 [details]
Screen recording example of missing emojis

SUMMARY
Any emoji whose name includes the string " E" (space followed by uppercase E) is missing from the Emoji Selector. For example, all flag emojis whose names start with an uppercase E are missing. There could be other examples that I've missed.

STEPS TO REPRODUCE
1. Open Emoji Selector
2. Search for any emoji whose name includes " E" (e.g., "flag: European Union")

OBSERVED RESULT
The emoji cannot be found in the program.

EXPECTED RESULT
The emoji should show up in the program.

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: Fedora Linux 39
KDE Plasma Version: 5.27.10
KDE Frameworks Version: 5.113.0
Qt Version: 5.15.11

ADDITIONAL INFORMATION
The emoji data is generated with the script emojier/data/update-emoji-data.py (see https://invent.kde.org/plasma/plasma-desktop/-/blob/v5.27.10/emojier/data/update-emoji-data.py?ref_type=tags#L60). 

On line 60, a part of the emoji metadata, which includes the name, is split using the delimiter " E". This should split the string into two, but it fails to consider that emojis can have " E" in the name, like with "flag: European Union", in which case the code could and does split in the middle of the emojis name. Line 61 is then evaluated as false, which causes the emoji to be ignored entirely and, therefore, is missing in the output files.

Initial independent testing seems to confirm this to be the culprit. I modified line 60 to only split on the first occurrence (`split(b" E") => split(b" E", 1)`), and replacing /usr/share/plasma/emoji/* with the newly generated files got the missing emojis to show up.
Comment 1 fanzhuyifan 2024-01-24 01:51:52 UTC
Can confirm. Would you be interested in submitting a merge request for a fix? Thanks!

More information can be found at https://community.kde.org/Get_Involved/development
Comment 2 Oliver Jõgar 2024-01-24 09:59:54 UTC
(In reply to fanzhuyifan from comment #1)
> Can confirm. Would you be interested in submitting a merge request for a
> fix? Thanks!
> 
> More information can be found at
> https://community.kde.org/Get_Involved/development

Thank you for confirming. Yes, I can make a merge request. I'm not confident that my proposed fix is the only or best solution, but I suppose that can be discussed in the MR.
Comment 3 Bug Janitor Service 2024-01-24 21:24:42 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2003
Comment 4 Aleix Pol 2024-02-05 19:01:55 UTC
Git commit 87120a4d4f7247e89eadaf15a365b656332f885a by Aleix Pol Gonzalez, on behalf of Oliver Jõgar.
Committed on 05/02/2024 at 18:51.
Pushed by apol into branch 'master'.

Fix and update missing emojis in emoji data

String splitting in the parser script unintentionally left out some
emojis from the output. Limiting the splitting to at most one split
returns the missing emojis.

M  +-    --    emojier/data/af.dict
M  +-    --    emojier/data/am.dict
M  +-    --    emojier/data/ar.dict
M  +-    --    emojier/data/as.dict
M  +-    --    emojier/data/ast.dict
M  +-    --    emojier/data/az.dict
M  +-    --    emojier/data/be.dict
M  +-    --    emojier/data/bew.dict
M  +-    --    emojier/data/bg.dict
M  +-    --    emojier/data/bn.dict
M  +-    --    emojier/data/br.dict
M  +-    --    emojier/data/bs.dict
M  +-    --    emojier/data/ca.dict
M  +-    --    emojier/data/ccp.dict
M  +-    --    emojier/data/chr.dict
M  +-    --    emojier/data/cs.dict
M  +-    --    emojier/data/cv.dict
M  +-    --    emojier/data/cy.dict
M  +-    --    emojier/data/da.dict
M  +-    --    emojier/data/de.dict
M  +-    --    emojier/data/dsb.dict
M  +-    --    emojier/data/el.dict
M  +-    --    emojier/data/en.dict
M  +-    --    emojier/data/es.dict
M  +-    --    emojier/data/es_419.dict
M  +-    --    emojier/data/es_MX.dict
M  +-    --    emojier/data/et.dict
M  +-    --    emojier/data/eu.dict
M  +-    --    emojier/data/fa.dict
M  +-    --    emojier/data/ff_Adlm.dict
M  +-    --    emojier/data/fi.dict
M  +-    --    emojier/data/fil.dict
M  +-    --    emojier/data/fo.dict
M  +-    --    emojier/data/fr.dict
M  +-    --    emojier/data/fr_CA.dict
M  +-    --    emojier/data/ga.dict
M  +-    --    emojier/data/gd.dict
M  +-    --    emojier/data/gl.dict
M  +-    --    emojier/data/gu.dict
M  +-    --    emojier/data/ha.dict
M  +-    --    emojier/data/he.dict
M  +-    --    emojier/data/hi.dict
M  +-    --    emojier/data/hi_Latn.dict
M  +-    --    emojier/data/hr.dict
M  +-    --    emojier/data/hsb.dict
M  +-    --    emojier/data/hu.dict
M  +-    --    emojier/data/hy.dict
M  +-    --    emojier/data/ia.dict
M  +-    --    emojier/data/id.dict
M  +-    --    emojier/data/ig.dict
M  +-    --    emojier/data/is.dict
M  +-    --    emojier/data/it.dict
M  +-    --    emojier/data/ja.dict
M  +-    --    emojier/data/jv.dict
M  +-    --    emojier/data/ka.dict
M  +-    --    emojier/data/kab.dict
M  +-    --    emojier/data/kk.dict
M  +-    --    emojier/data/kl.dict
M  +-    --    emojier/data/km.dict
M  +-    --    emojier/data/kn.dict
M  +-    --    emojier/data/ko.dict
M  +-    --    emojier/data/kok.dict
M  +-    --    emojier/data/ky.dict
M  +-    --    emojier/data/lb.dict
M  +-    --    emojier/data/lij.dict
M  +-    --    emojier/data/lo.dict
M  +-    --    emojier/data/lt.dict
M  +-    --    emojier/data/lv.dict
M  +-    --    emojier/data/mi.dict
M  +-    --    emojier/data/mk.dict
M  +-    --    emojier/data/ml.dict
M  +-    --    emojier/data/mn.dict
M  +-    --    emojier/data/mr.dict
M  +-    --    emojier/data/ms.dict
M  +-    --    emojier/data/mt.dict
M  +-    --    emojier/data/my.dict
M  +-    --    emojier/data/ne.dict
M  +-    --    emojier/data/nl.dict
M  +-    --    emojier/data/nn.dict
M  +-    --    emojier/data/no.dict
M  +-    --    emojier/data/nso.dict
M  +-    --    emojier/data/oc.dict
M  +-    --    emojier/data/or.dict
M  +-    --    emojier/data/pa.dict
M  +-    --    emojier/data/pa_Arab.dict
M  +-    --    emojier/data/pcm.dict
M  +-    --    emojier/data/pl.dict
M  +-    --    emojier/data/ps.dict
M  +-    --    emojier/data/pt.dict
M  +-    --    emojier/data/pt_PT.dict
M  +-    --    emojier/data/qu.dict
M  +-    --    emojier/data/quc.dict
M  +-    --    emojier/data/ro.dict
M  +-    --    emojier/data/ru.dict
M  +-    --    emojier/data/rw.dict
M  +-    --    emojier/data/sat.dict
M  +-    --    emojier/data/sc.dict
M  +-    --    emojier/data/sd.dict
M  +-    --    emojier/data/si.dict
M  +-    --    emojier/data/sk.dict
M  +-    --    emojier/data/sl.dict
M  +-    --    emojier/data/so.dict
M  +-    --    emojier/data/sq.dict
M  +-    --    emojier/data/sr.dict
M  +-    --    emojier/data/sr_Latn.dict
M  +-    --    emojier/data/sv.dict
M  +-    --    emojier/data/sw.dict
M  +-    --    emojier/data/sw_KE.dict
M  +-    --    emojier/data/ta.dict
M  +-    --    emojier/data/te.dict
M  +-    --    emojier/data/tg.dict
M  +-    --    emojier/data/th.dict
M  +-    --    emojier/data/ti.dict
M  +-    --    emojier/data/tk.dict
M  +-    --    emojier/data/tn.dict
M  +-    --    emojier/data/to.dict
M  +-    --    emojier/data/tr.dict
M  +-    --    emojier/data/ug.dict
M  +-    --    emojier/data/uk.dict
M  +1    -1    emojier/data/update-emoji-data.py
M  +-    --    emojier/data/ur.dict
M  +-    --    emojier/data/uz.dict
M  +-    --    emojier/data/vi.dict
M  +-    --    emojier/data/wo.dict
M  +-    --    emojier/data/xh.dict
M  +-    --    emojier/data/yo.dict
M  +-    --    emojier/data/yo_BJ.dict
M  +-    --    emojier/data/yue.dict
M  +-    --    emojier/data/yue_Hans.dict
M  +-    --    emojier/data/zh.dict
M  +-    --    emojier/data/zh_Hant.dict
M  +-    --    emojier/data/zh_Hant_HK.dict
M  +-    --    emojier/data/zu.dict

https://invent.kde.org/plasma/plasma-desktop/-/commit/87120a4d4f7247e89eadaf15a365b656332f885a