Add GSUB substitutions to provide unknown flag for pairs of RIS.
A current issue in Harfbuzz requires that you not perform a delete on index 1 before running a lookup on index 0.pull/92/head
parent
58097d9d4c
commit
a62c0be851
4
Makefile
4
Makefile
|
@ -160,7 +160,7 @@ $(RESIZED_FLAGS_DIR)/%.png: $(FLAGS_DIR)/%.png | $(RESIZED_FLAGS_DIR)
|
|||
@convert -extent 136x128 -gravity center -background none "$<" "$@"
|
||||
|
||||
flag-symlinks: $(RESIZED_FLAG_FILES) | $(RENAMED_FLAGS_DIR)
|
||||
$(subst ^, , \
|
||||
@$(subst ^, , \
|
||||
$(join \
|
||||
$(FLAGS:%=ln^-fs^../resized_flags/%.png^), \
|
||||
$(RENAMED_FLAG_FILES:%=%; ) \
|
||||
|
@ -213,7 +213,7 @@ clean:
|
|||
rm -rf $(BUILD_DIR)
|
||||
|
||||
.SECONDARY: $(EMOJI_FILES) $(FLAG_FILES) $(RESIZED_FLAG_FILES) $(RENAMED_FLAG_FILES) \
|
||||
$(ALL_QUANTIZED_FILES) $(ALL_COMPRESSED_FILES) NotoColorEmoji.tmpl.ttx
|
||||
$(ALL_QUANTIZED_FILES) $(ALL_COMPRESSED_FILES)
|
||||
|
||||
.PHONY: clean flags emoji renamed_flags quantized compressed check_compress_tool
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.3">
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.6">
|
||||
|
||||
<GlyphOrder>
|
||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||
|
@ -47,6 +47,32 @@
|
|||
<GlyphID id="41" name="uE007F"/>
|
||||
<GlyphID id="42" name="u1F3F4"/>
|
||||
<GlyphID id="43" name="uFE82B"/>
|
||||
<GlyphID id="44" name="u1F1E6"/>
|
||||
<GlyphID id="45" name="u1F1E7"/>
|
||||
<GlyphID id="46" name="u1F1E8"/>
|
||||
<GlyphID id="47" name="u1F1E9"/>
|
||||
<GlyphID id="48" name="u1F1EA"/>
|
||||
<GlyphID id="49" name="u1F1EB"/>
|
||||
<GlyphID id="50" name="u1F1EC"/>
|
||||
<GlyphID id="51" name="u1F1ED"/>
|
||||
<GlyphID id="52" name="u1F1EE"/>
|
||||
<GlyphID id="53" name="u1F1EF"/>
|
||||
<GlyphID id="54" name="u1F1F0"/>
|
||||
<GlyphID id="55" name="u1F1F1"/>
|
||||
<GlyphID id="56" name="u1F1F2"/>
|
||||
<GlyphID id="57" name="u1F1F3"/>
|
||||
<GlyphID id="58" name="u1F1F4"/>
|
||||
<GlyphID id="59" name="u1F1F5"/>
|
||||
<GlyphID id="60" name="u1F1F6"/>
|
||||
<GlyphID id="61" name="u1F1F7"/>
|
||||
<GlyphID id="62" name="u1F1F8"/>
|
||||
<GlyphID id="63" name="u1F1F9"/>
|
||||
<GlyphID id="64" name="u1F1FA"/>
|
||||
<GlyphID id="65" name="u1F1FB"/>
|
||||
<GlyphID id="66" name="u1F1FC"/>
|
||||
<GlyphID id="67" name="u1F1FD"/>
|
||||
<GlyphID id="68" name="u1F1FE"/>
|
||||
<GlyphID id="69" name="u1F1FF"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
|
@ -71,7 +97,7 @@
|
|||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="1.0"/>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1900"/>
|
||||
<descent value="-500"/>
|
||||
<lineGap value="0"/>
|
||||
|
@ -93,7 +119,7 @@
|
|||
<maxp>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="30"/>
|
||||
<numGlyphs value="70"/>
|
||||
<maxPoints value="8"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="0"/>
|
||||
|
@ -144,8 +170,8 @@
|
|||
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000000 01000000"/>
|
||||
<fsFirstCharIndex value="0"/>
|
||||
<fsLastCharIndex value="90"/>
|
||||
<usFirstCharIndex value="0"/>
|
||||
<usLastCharIndex value="65535"/>
|
||||
<sTypoAscender value="1900"/>
|
||||
<sTypoDescender value="-500"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
|
@ -157,7 +183,7 @@
|
|||
<sCapHeight value="1900"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContex value="1"/>
|
||||
<usMaxContext value="1"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
|
@ -205,6 +231,32 @@
|
|||
<mtx name="uE007F" width="0" lsb="0"/>
|
||||
<mtx name="u1F3F4" width="0" lsb="0"/>
|
||||
<mtx name="uFE82B" width="0" lsb="0"/>
|
||||
<mtx name="u1F1E6" width="0" lsb="0"/>
|
||||
<mtx name="u1F1E7" width="0" lsb="0"/>
|
||||
<mtx name="u1F1E8" width="0" lsb="0"/>
|
||||
<mtx name="u1F1E9" width="0" lsb="0"/>
|
||||
<mtx name="u1F1EA" width="0" lsb="0"/>
|
||||
<mtx name="u1F1EB" width="0" lsb="0"/>
|
||||
<mtx name="u1F1EC" width="0" lsb="0"/>
|
||||
<mtx name="u1F1ED" width="0" lsb="0"/>
|
||||
<mtx name="u1F1EE" width="0" lsb="0"/>
|
||||
<mtx name="u1F1EF" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F0" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F1" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F2" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F3" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F4" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F5" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F6" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F7" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F8" width="0" lsb="0"/>
|
||||
<mtx name="u1F1F9" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FA" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FB" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FC" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FD" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FE" width="0" lsb="0"/>
|
||||
<mtx name="u1F1FF" width="0" lsb="0"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
|
@ -253,6 +305,32 @@
|
|||
<map code="0xE007F" name="uE007F"/>
|
||||
<map code="0x1F3F4" name="u1F3F4"/>
|
||||
<map code="0xFE82B" name="uFE82B"/>
|
||||
<map code="0x1F1E6" name="u1F1E6"/>
|
||||
<map code="0x1F1E7" name="u1F1E7"/>
|
||||
<map code="0x1F1E8" name="u1F1E8"/>
|
||||
<map code="0x1F1E9" name="u1F1E9"/>
|
||||
<map code="0x1F1EA" name="u1F1EA"/>
|
||||
<map code="0x1F1EB" name="u1F1EB"/>
|
||||
<map code="0x1F1EC" name="u1F1EC"/>
|
||||
<map code="0x1F1ED" name="u1F1ED"/>
|
||||
<map code="0x1F1EE" name="u1F1EE"/>
|
||||
<map code="0x1F1EF" name="u1F1EF"/>
|
||||
<map code="0x1F1F0" name="u1F1F0"/>
|
||||
<map code="0x1F1F1" name="u1F1F1"/>
|
||||
<map code="0x1F1F2" name="u1F1F2"/>
|
||||
<map code="0x1F1F3" name="u1F1F3"/>
|
||||
<map code="0x1F1F4" name="u1F1F4"/>
|
||||
<map code="0x1F1F5" name="u1F1F5"/>
|
||||
<map code="0x1F1F6" name="u1F1F6"/>
|
||||
<map code="0x1F1F7" name="u1F1F7"/>
|
||||
<map code="0x1F1F8" name="u1F1F8"/>
|
||||
<map code="0x1F1F9" name="u1F1F9"/>
|
||||
<map code="0x1F1FA" name="u1F1FA"/>
|
||||
<map code="0x1F1FB" name="u1F1FB"/>
|
||||
<map code="0x1F1FC" name="u1F1FC"/>
|
||||
<map code="0x1F1FD" name="u1F1FD"/>
|
||||
<map code="0x1F1FE" name="u1F1FE"/>
|
||||
<map code="0x1F1FF" name="u1F1FF"/>
|
||||
</cmap_format_12>
|
||||
</cmap>
|
||||
|
||||
|
@ -337,18 +415,18 @@
|
|||
<FeatureRecord index="0">
|
||||
<FeatureTag value="ccmp"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<!-- LookupCount=4 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
<LookupListIndex index="1" value="2"/>
|
||||
<LookupListIndex index="2" value="3"/>
|
||||
<LookupListIndex index="3" value="4"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<!-- LookupCount=5 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="4"/>
|
||||
<!-- LookupType=4 -->
|
||||
<LookupFlag value="0"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<LigatureSubst index="0" Format="1">
|
||||
|
@ -359,6 +437,32 @@
|
|||
<LookupFlag value="0"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<MultipleSubst index="0" Format="1">
|
||||
<Substitution in="u1F1E6" out=""/>
|
||||
<Substitution in="u1F1E7" out=""/>
|
||||
<Substitution in="u1F1E8" out=""/>
|
||||
<Substitution in="u1F1E9" out=""/>
|
||||
<Substitution in="u1F1EA" out=""/>
|
||||
<Substitution in="u1F1EB" out=""/>
|
||||
<Substitution in="u1F1EC" out=""/>
|
||||
<Substitution in="u1F1ED" out=""/>
|
||||
<Substitution in="u1F1EE" out=""/>
|
||||
<Substitution in="u1F1EF" out=""/>
|
||||
<Substitution in="u1F1F0" out=""/>
|
||||
<Substitution in="u1F1F1" out=""/>
|
||||
<Substitution in="u1F1F2" out=""/>
|
||||
<Substitution in="u1F1F3" out=""/>
|
||||
<Substitution in="u1F1F4" out=""/>
|
||||
<Substitution in="u1F1F5" out=""/>
|
||||
<Substitution in="u1F1F6" out=""/>
|
||||
<Substitution in="u1F1F7" out=""/>
|
||||
<Substitution in="u1F1F8" out=""/>
|
||||
<Substitution in="u1F1F9" out=""/>
|
||||
<Substitution in="u1F1FA" out=""/>
|
||||
<Substitution in="u1F1FB" out=""/>
|
||||
<Substitution in="u1F1FC" out=""/>
|
||||
<Substitution in="u1F1FD" out=""/>
|
||||
<Substitution in="u1F1FE" out=""/>
|
||||
<Substitution in="u1F1FF" out=""/>
|
||||
<Substitution in="uE0030" out=""/>
|
||||
<Substitution in="uE0031" out=""/>
|
||||
<Substitution in="uE0032" out=""/>
|
||||
|
@ -399,7 +503,6 @@
|
|||
</Lookup>
|
||||
<Lookup index="2">
|
||||
<LookupType value="6"/>
|
||||
<!-- LookupType=6 -->
|
||||
<LookupFlag value="0"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<ChainContextSubst index="0" Format="2">
|
||||
|
@ -495,7 +598,7 @@
|
|||
<Backtrack index="0" value="1"/>
|
||||
<!-- InputGlyphCount=1 -->
|
||||
<!-- LookAheadGlyphCount=0 -->
|
||||
<!-- SubstCount=2 -->
|
||||
<!-- SubstCount=1 -->
|
||||
<SubstLookupRecord index="0">
|
||||
<SequenceIndex value="0"/>
|
||||
<LookupListIndex value="1"/>
|
||||
|
@ -507,6 +610,7 @@
|
|||
<Lookup index="3">
|
||||
<LookupType value="4"/>
|
||||
<LookupFlag value="0"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<LigatureSubst index="0" Format="1">
|
||||
<LigatureSet glyph="u1F3F4">
|
||||
<Ligature components="uE007F" glyph="uFE82B"/>
|
||||
|
@ -516,6 +620,119 @@
|
|||
</LigatureSet>
|
||||
</LigatureSubst>
|
||||
</Lookup>
|
||||
<Lookup index="4">
|
||||
<LookupType value="5"/>
|
||||
<LookupFlag value="0"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<ContextSubst index="0" Format="2">
|
||||
<Coverage Format="2">
|
||||
<Glyph value="u1F1E6"/>
|
||||
<Glyph value="u1F1E7"/>
|
||||
<Glyph value="u1F1E8"/>
|
||||
<Glyph value="u1F1E9"/>
|
||||
<Glyph value="u1F1EA"/>
|
||||
<Glyph value="u1F1EB"/>
|
||||
<Glyph value="u1F1EC"/>
|
||||
<Glyph value="u1F1ED"/>
|
||||
<Glyph value="u1F1EE"/>
|
||||
<Glyph value="u1F1EF"/>
|
||||
<Glyph value="u1F1F0"/>
|
||||
<Glyph value="u1F1F1"/>
|
||||
<Glyph value="u1F1F2"/>
|
||||
<Glyph value="u1F1F3"/>
|
||||
<Glyph value="u1F1F4"/>
|
||||
<Glyph value="u1F1F5"/>
|
||||
<Glyph value="u1F1F6"/>
|
||||
<Glyph value="u1F1F7"/>
|
||||
<Glyph value="u1F1F8"/>
|
||||
<Glyph value="u1F1F9"/>
|
||||
<Glyph value="u1F1FA"/>
|
||||
<Glyph value="u1F1FB"/>
|
||||
<Glyph value="u1F1FC"/>
|
||||
<Glyph value="u1F1FD"/>
|
||||
<Glyph value="u1F1FE"/>
|
||||
<Glyph value="u1F1FF"/>
|
||||
</Coverage>
|
||||
<ClassDef Format="2">
|
||||
<ClassDef glyph="u1F1E6" class="1"/>
|
||||
<ClassDef glyph="u1F1E7" class="1"/>
|
||||
<ClassDef glyph="u1F1E8" class="1"/>
|
||||
<ClassDef glyph="u1F1E9" class="1"/>
|
||||
<ClassDef glyph="u1F1EA" class="1"/>
|
||||
<ClassDef glyph="u1F1EB" class="1"/>
|
||||
<ClassDef glyph="u1F1EC" class="1"/>
|
||||
<ClassDef glyph="u1F1ED" class="1"/>
|
||||
<ClassDef glyph="u1F1EE" class="1"/>
|
||||
<ClassDef glyph="u1F1EF" class="1"/>
|
||||
<ClassDef glyph="u1F1F0" class="1"/>
|
||||
<ClassDef glyph="u1F1F1" class="1"/>
|
||||
<ClassDef glyph="u1F1F2" class="1"/>
|
||||
<ClassDef glyph="u1F1F3" class="1"/>
|
||||
<ClassDef glyph="u1F1F4" class="1"/>
|
||||
<ClassDef glyph="u1F1F5" class="1"/>
|
||||
<ClassDef glyph="u1F1F6" class="1"/>
|
||||
<ClassDef glyph="u1F1F7" class="1"/>
|
||||
<ClassDef glyph="u1F1F8" class="1"/>
|
||||
<ClassDef glyph="u1F1F9" class="1"/>
|
||||
<ClassDef glyph="u1F1FA" class="1"/>
|
||||
<ClassDef glyph="u1F1FB" class="1"/>
|
||||
<ClassDef glyph="u1F1FC" class="1"/>
|
||||
<ClassDef glyph="u1F1FD" class="1"/>
|
||||
<ClassDef glyph="u1F1FE" class="1"/>
|
||||
<ClassDef glyph="u1F1FF" class="1"/>
|
||||
</ClassDef>
|
||||
<!-- SubClassSetCount=2 -->
|
||||
<SubClassSet index="0" empty="1"/>
|
||||
<SubClassSet index="1">
|
||||
<!-- SubClassRuleCount=1 -->
|
||||
<SubClassRule index="0">
|
||||
<!-- GlyphCount=2 -->
|
||||
<!-- SubstCount=2 -->
|
||||
<Class index="0" value="1"/>
|
||||
<SubstLookupRecord index="0">
|
||||
<SequenceIndex value="0"/>
|
||||
<LookupListIndex value="5"/>
|
||||
</SubstLookupRecord>
|
||||
<SubstLookupRecord index="1">
|
||||
<SequenceIndex value="1"/>
|
||||
<LookupListIndex value="1"/>
|
||||
</SubstLookupRecord>
|
||||
</SubClassRule>
|
||||
</SubClassSet>
|
||||
</ContextSubst>
|
||||
</Lookup>
|
||||
<Lookup index="5">
|
||||
<LookupType value="1"/>
|
||||
<LookupFlag value="0"/>
|
||||
<SingleSubst index="0" Format="1">
|
||||
<Substitution in="u1F1E6" out="uFE82B"/>
|
||||
<Substitution in="u1F1E7" out="uFE82B"/>
|
||||
<Substitution in="u1F1E8" out="uFE82B"/>
|
||||
<Substitution in="u1F1E9" out="uFE82B"/>
|
||||
<Substitution in="u1F1EA" out="uFE82B"/>
|
||||
<Substitution in="u1F1EB" out="uFE82B"/>
|
||||
<Substitution in="u1F1EC" out="uFE82B"/>
|
||||
<Substitution in="u1F1ED" out="uFE82B"/>
|
||||
<Substitution in="u1F1EE" out="uFE82B"/>
|
||||
<Substitution in="u1F1EF" out="uFE82B"/>
|
||||
<Substitution in="u1F1F0" out="uFE82B"/>
|
||||
<Substitution in="u1F1F1" out="uFE82B"/>
|
||||
<Substitution in="u1F1F2" out="uFE82B"/>
|
||||
<Substitution in="u1F1F3" out="uFE82B"/>
|
||||
<Substitution in="u1F1F4" out="uFE82B"/>
|
||||
<Substitution in="u1F1F5" out="uFE82B"/>
|
||||
<Substitution in="u1F1F6" out="uFE82B"/>
|
||||
<Substitution in="u1F1F7" out="uFE82B"/>
|
||||
<Substitution in="u1F1F8" out="uFE82B"/>
|
||||
<Substitution in="u1F1F9" out="uFE82B"/>
|
||||
<Substitution in="u1F1FA" out="uFE82B"/>
|
||||
<Substitution in="u1F1FB" out="uFE82B"/>
|
||||
<Substitution in="u1F1FC" out="uFE82B"/>
|
||||
<Substitution in="u1F1FD" out="uFE82B"/>
|
||||
<Substitution in="u1F1FE" out="uFE82B"/>
|
||||
<Substitution in="u1F1FF" out="uFE82B"/>
|
||||
</SingleSubst>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ glyph_names = set()
|
|||
ligatures = {}
|
||||
|
||||
def add_lig_sequence(ligatures, seq, n):
|
||||
# We have emoji sequences using regional indicator symbols,
|
||||
# We have emoji sequences using regional indicator symbols, tags,
|
||||
# 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
|
||||
|
@ -169,10 +169,10 @@ def add_lig_sequence(ligatures, seq, n):
|
|||
# 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.
|
||||
# effectively LTR, so we only reorder sequences with ZWJ or tags. 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' % (
|
||||
|
@ -261,15 +261,6 @@ if have_flags:
|
|||
name = _reg_lig_name(flag_to)
|
||||
add_lig_sequence(ligatures, seq, name)
|
||||
|
||||
print 'Adding unused flag sequences'
|
||||
# every flag sequence we don't have gets the missing flag glyph
|
||||
for first in regional_names:
|
||||
for second in regional_names:
|
||||
seq = (first, second)
|
||||
if seq not in ligatures:
|
||||
add_lig_sequence(ligatures, seq, UNKNOWN_FLAG_GLYPH_NAME)
|
||||
|
||||
|
||||
keyed_ligatures = collections.defaultdict(list)
|
||||
for k, v in ligatures.iteritems():
|
||||
first = k[0]
|
||||
|
|
Loading…
Reference in New Issue