Merge pull request #59 from dougfelt/fitz_ordering_fix

Update handling of fitzpatrick modifiers.
pull/60/head
dougfelt 2016-07-13 13:08:30 -07:00 committed by GitHub
commit 4bc270adbb
3 changed files with 26 additions and 7 deletions

View File

@ -201,7 +201,7 @@ $(EMOJI).ttf: $(EMOJI).tmpl.ttf $(EMOJI_BUILDER) $(PUA_ADDER) \
$(ALL_COMPRESSED_FILES) | check_vs_adder
@python $(EMOJI_BUILDER) -V $< "$@" "$(COMPRESSED_DIR)/emoji_u"
@python $(PUA_ADDER) "$@" "$@-with-pua"
$(VS_ADDER) --dstdir '.' -o "$@-with-pua-varsel" "$@-with-pua"
$(VS_ADDER) -vs 2640 2642 2695 --dstdir '.' -o "$@-with-pua-varsel" "$@-with-pua"
mv "$@-with-pua-varsel" "$@"
rm "$@-with-pua"

View File

@ -13,7 +13,7 @@
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.32"/>
<fontRevision value="1.33"/>
<checkSumAdjustment value="0x4d5a161a"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00001011"/>
@ -156,7 +156,7 @@
Noto Color Emoji
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.32
Version 1.33
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
NotoColorEmoji

View File

@ -17,6 +17,10 @@ import add_emoji_gsub
def is_vs(cp):
return cp >= 0xfe00 and cp <= 0xfe0f
def is_fitzpatrick(gname):
cp = int(gname[1:], 16)
return 0x1f3fb <= cp <= 0x1f3ff
def codes_to_string(codes):
if "_" in codes:
pieces = codes.split ("_")
@ -147,10 +151,19 @@ glyph_names = set()
ligatures = {}
def add_lig_sequence(ligatures, seq, n):
# Assume sequences with ZWJ are emoji 'ligatures' and rtl order
# is also valid. Internal permutations, though, no.
# We associate a sequence with a filename. We can overwrite the
# sequence with a different filename later.
# We have emoji sequences using regional indicator symbols,
# ZWJ, fitzpatrick modifiers, and combinations of ZWJ and fitzpatrick
# modifiers. Currently, Harfbuzz special-cases the fitzpatrick
# modifiers to treat them as combining marks instead of as Other
# Neutral, which unicode says they are, and processes them
# in visual order (at least in some circumstances). So to handle
# emoji sequences in an RTL context we need GSUB sequences that match
# this order.
# Regional indicator symbols are LTR, and emoji+fitzpatrick are
# effectively LTR, so we only reorder sequences with ZWJ. If however
# the ZWJ sequence has fitzpatrick modifiers, those need to still follow
# the emoji they logically follow, so simply reversing the sequence
# doesn't work. This code assumes the lig sequence is valid.
tseq = tuple(seq)
if tseq in ligatures:
print 'lig sequence %s, replace %s with %s' % (
@ -159,6 +172,12 @@ def add_lig_sequence(ligatures, seq, n):
if 'u200D' in seq:
rev_seq = seq[:]
rev_seq.reverse()
for i in xrange(1, len(rev_seq)):
if is_fitzpatrick(rev_seq[i - 1]):
tmp = rev_seq[i]
rev_seq[i] = rev_seq[i-1]
rev_seq[i-1] = tmp
trseq = tuple(rev_seq)
# if trseq in ligatures:
# print 'rev lig sequence %s, replace %s with %s' % (