aboutsummaryrefslogtreecommitdiff
path: root/Tests/feaLib/data
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/feaLib/data')
-rw-r--r--Tests/feaLib/data/ChainPosSubtable.ttx36
-rw-r--r--Tests/feaLib/data/GPOS_8.ttx68
-rw-r--r--Tests/feaLib/data/GSUB_5_formats.fea20
-rw-r--r--Tests/feaLib/data/GSUB_5_formats.ttx197
-rw-r--r--Tests/feaLib/data/GSUB_6.ttx52
-rw-r--r--Tests/feaLib/data/GSUB_6_formats.fea20
-rw-r--r--Tests/feaLib/data/GSUB_6_formats.ttx256
-rw-r--r--Tests/feaLib/data/ZeroValue_ChainSinglePos_horizontal.ttx69
-rw-r--r--Tests/feaLib/data/ZeroValue_ChainSinglePos_vertical.ttx69
-rw-r--r--Tests/feaLib/data/bug512.ttx83
-rw-r--r--Tests/feaLib/data/spec5f_ii_3.ttx212
11 files changed, 782 insertions, 300 deletions
diff --git a/Tests/feaLib/data/ChainPosSubtable.ttx b/Tests/feaLib/data/ChainPosSubtable.ttx
index a780ccb7..695dd862 100644
--- a/Tests/feaLib/data/ChainPosSubtable.ttx
+++ b/Tests/feaLib/data/ChainPosSubtable.ttx
@@ -67,24 +67,26 @@
<LookupListIndex value="1"/>
</PosLookupRecord>
</ChainContextPos>
- <ChainContextPos index="1" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="X"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
+ <ChainContextPos index="1" Format="1">
+ <Coverage>
<Glyph value="A"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="Y"/>
- </LookAheadCoverage>
- <!-- PosCount=1 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="2"/>
- </PosLookupRecord>
+ </Coverage>
+ <!-- ChainPosRuleSetCount=1 -->
+ <ChainPosRuleSet index="0">
+ <!-- ChainPosRuleCount=1 -->
+ <ChainPosRule index="0">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="X"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="Y"/>
+ <!-- PosCount=1 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="2"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ </ChainPosRuleSet>
</ChainContextPos>
<ChainContextPos index="2" Format="3">
<!-- BacktrackGlyphCount=1 -->
diff --git a/Tests/feaLib/data/GPOS_8.ttx b/Tests/feaLib/data/GPOS_8.ttx
index 86f97560..4d790715 100644
--- a/Tests/feaLib/data/GPOS_8.ttx
+++ b/Tests/feaLib/data/GPOS_8.ttx
@@ -34,42 +34,40 @@
<LookupType value="8"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
- <ChainContextPos index="0" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="A"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=4 -->
- <InputCoverage index="0">
- <Glyph value="one"/>
- </InputCoverage>
- <InputCoverage index="1">
- <Glyph value="two"/>
- </InputCoverage>
- <InputCoverage index="2">
+ <ChainContextPos index="0" Format="1">
+ <Coverage>
<Glyph value="one"/>
- </InputCoverage>
- <InputCoverage index="3">
- <Glyph value="two"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=0 -->
- <!-- PosCount=4 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
- <PosLookupRecord index="1">
- <SequenceIndex value="1"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
- <PosLookupRecord index="2">
- <SequenceIndex value="2"/>
- <LookupListIndex value="2"/>
- </PosLookupRecord>
- <PosLookupRecord index="3">
- <SequenceIndex value="3"/>
- <LookupListIndex value="2"/>
- </PosLookupRecord>
+ </Coverage>
+ <!-- ChainPosRuleSetCount=1 -->
+ <ChainPosRuleSet index="0">
+ <!-- ChainPosRuleCount=1 -->
+ <ChainPosRule index="0">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="A"/>
+ <!-- InputGlyphCount=4 -->
+ <Input index="0" value="two"/>
+ <Input index="1" value="one"/>
+ <Input index="2" value="two"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- PosCount=4 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ <PosLookupRecord index="1">
+ <SequenceIndex value="1"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ <PosLookupRecord index="2">
+ <SequenceIndex value="2"/>
+ <LookupListIndex value="2"/>
+ </PosLookupRecord>
+ <PosLookupRecord index="3">
+ <SequenceIndex value="3"/>
+ <LookupListIndex value="2"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ </ChainPosRuleSet>
</ChainContextPos>
</Lookup>
<Lookup index="1">
diff --git a/Tests/feaLib/data/GSUB_5_formats.fea b/Tests/feaLib/data/GSUB_5_formats.fea
new file mode 100644
index 00000000..3acb7edf
--- /dev/null
+++ b/Tests/feaLib/data/GSUB_5_formats.fea
@@ -0,0 +1,20 @@
+lookup GSUB5f1 {
+ ignore sub three four;
+ ignore sub four five;
+} GSUB5f1;
+
+lookup GSUB5f2 {
+ ignore sub [a - z] [A - H] [I - Z];
+ ignore sub [a - z] [A - H] [I - Z];
+ ignore sub [a - z] [I - Z] [A - H];
+} GSUB5f2;
+
+lookup GSUB5f3 {
+ ignore sub e;
+} GSUB5f3;
+
+feature test {
+ lookup GSUB5f1;
+ lookup GSUB5f2;
+ lookup GSUB5f3;
+} test;
diff --git a/Tests/feaLib/data/GSUB_5_formats.ttx b/Tests/feaLib/data/GSUB_5_formats.ttx
new file mode 100644
index 00000000..80196aaa
--- /dev/null
+++ b/Tests/feaLib/data/GSUB_5_formats.ttx
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ttFont>
+
+ <GSUB>
+ <Version value="0x00010000"/>
+ <ScriptList>
+ <!-- ScriptCount=1 -->
+ <ScriptRecord index="0">
+ <ScriptTag value="DFLT"/>
+ <Script>
+ <DefaultLangSys>
+ <ReqFeatureIndex value="65535"/>
+ <!-- FeatureCount=1 -->
+ <FeatureIndex index="0" value="0"/>
+ </DefaultLangSys>
+ <!-- LangSysCount=0 -->
+ </Script>
+ </ScriptRecord>
+ </ScriptList>
+ <FeatureList>
+ <!-- FeatureCount=1 -->
+ <FeatureRecord index="0">
+ <FeatureTag value="test"/>
+ <Feature>
+ <!-- LookupCount=3 -->
+ <LookupListIndex index="0" value="0"/>
+ <LookupListIndex index="1" value="1"/>
+ <LookupListIndex index="2" value="2"/>
+ </Feature>
+ </FeatureRecord>
+ </FeatureList>
+ <LookupList>
+ <!-- LookupCount=3 -->
+ <Lookup index="0">
+ <LookupType value="5"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ContextSubst index="0" Format="1">
+ <Coverage>
+ <Glyph value="three"/>
+ <Glyph value="four"/>
+ </Coverage>
+ <!-- SubRuleSetCount=2 -->
+ <SubRuleSet index="0">
+ <!-- SubRuleCount=1 -->
+ <SubRule index="0">
+ <!-- GlyphCount=2 -->
+ <!-- SubstCount=0 -->
+ <Input index="0" value="four"/>
+ </SubRule>
+ </SubRuleSet>
+ <SubRuleSet index="1">
+ <!-- SubRuleCount=1 -->
+ <SubRule index="0">
+ <!-- GlyphCount=2 -->
+ <!-- SubstCount=0 -->
+ <Input index="0" value="five"/>
+ </SubRule>
+ </SubRuleSet>
+ </ContextSubst>
+ </Lookup>
+ <Lookup index="1">
+ <LookupType value="5"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ContextSubst index="0" Format="2">
+ <Coverage>
+ <Glyph value="a"/>
+ <Glyph value="b"/>
+ <Glyph value="c"/>
+ <Glyph value="d"/>
+ <Glyph value="e"/>
+ <Glyph value="f"/>
+ <Glyph value="g"/>
+ <Glyph value="h"/>
+ <Glyph value="i"/>
+ <Glyph value="j"/>
+ <Glyph value="k"/>
+ <Glyph value="l"/>
+ <Glyph value="m"/>
+ <Glyph value="n"/>
+ <Glyph value="o"/>
+ <Glyph value="p"/>
+ <Glyph value="q"/>
+ <Glyph value="r"/>
+ <Glyph value="s"/>
+ <Glyph value="t"/>
+ <Glyph value="u"/>
+ <Glyph value="v"/>
+ <Glyph value="w"/>
+ <Glyph value="x"/>
+ <Glyph value="y"/>
+ <Glyph value="z"/>
+ </Coverage>
+ <ClassDef>
+ <ClassDef glyph="A" class="3"/>
+ <ClassDef glyph="B" class="3"/>
+ <ClassDef glyph="C" class="3"/>
+ <ClassDef glyph="D" class="3"/>
+ <ClassDef glyph="E" class="3"/>
+ <ClassDef glyph="F" class="3"/>
+ <ClassDef glyph="G" class="3"/>
+ <ClassDef glyph="H" class="3"/>
+ <ClassDef glyph="I" class="2"/>
+ <ClassDef glyph="J" class="2"/>
+ <ClassDef glyph="K" class="2"/>
+ <ClassDef glyph="L" class="2"/>
+ <ClassDef glyph="M" class="2"/>
+ <ClassDef glyph="N" class="2"/>
+ <ClassDef glyph="O" class="2"/>
+ <ClassDef glyph="P" class="2"/>
+ <ClassDef glyph="Q" class="2"/>
+ <ClassDef glyph="R" class="2"/>
+ <ClassDef glyph="S" class="2"/>
+ <ClassDef glyph="T" class="2"/>
+ <ClassDef glyph="U" class="2"/>
+ <ClassDef glyph="V" class="2"/>
+ <ClassDef glyph="W" class="2"/>
+ <ClassDef glyph="X" class="2"/>
+ <ClassDef glyph="Y" class="2"/>
+ <ClassDef glyph="Z" class="2"/>
+ <ClassDef glyph="a" class="1"/>
+ <ClassDef glyph="b" class="1"/>
+ <ClassDef glyph="c" class="1"/>
+ <ClassDef glyph="d" class="1"/>
+ <ClassDef glyph="e" class="1"/>
+ <ClassDef glyph="f" class="1"/>
+ <ClassDef glyph="g" class="1"/>
+ <ClassDef glyph="h" class="1"/>
+ <ClassDef glyph="i" class="1"/>
+ <ClassDef glyph="j" class="1"/>
+ <ClassDef glyph="k" class="1"/>
+ <ClassDef glyph="l" class="1"/>
+ <ClassDef glyph="m" class="1"/>
+ <ClassDef glyph="n" class="1"/>
+ <ClassDef glyph="o" class="1"/>
+ <ClassDef glyph="p" class="1"/>
+ <ClassDef glyph="q" class="1"/>
+ <ClassDef glyph="r" class="1"/>
+ <ClassDef glyph="s" class="1"/>
+ <ClassDef glyph="t" class="1"/>
+ <ClassDef glyph="u" class="1"/>
+ <ClassDef glyph="v" class="1"/>
+ <ClassDef glyph="w" class="1"/>
+ <ClassDef glyph="x" class="1"/>
+ <ClassDef glyph="y" class="1"/>
+ <ClassDef glyph="z" class="1"/>
+ </ClassDef>
+ <!-- SubClassSetCount=4 -->
+ <SubClassSet index="0">
+ <!-- SubClassRuleCount=0 -->
+ </SubClassSet>
+ <SubClassSet index="1">
+ <!-- SubClassRuleCount=3 -->
+ <SubClassRule index="0">
+ <!-- GlyphCount=3 -->
+ <!-- SubstCount=0 -->
+ <Class index="0" value="3"/>
+ <Class index="1" value="2"/>
+ </SubClassRule>
+ <SubClassRule index="1">
+ <!-- GlyphCount=3 -->
+ <!-- SubstCount=0 -->
+ <Class index="0" value="3"/>
+ <Class index="1" value="2"/>
+ </SubClassRule>
+ <SubClassRule index="2">
+ <!-- GlyphCount=3 -->
+ <!-- SubstCount=0 -->
+ <Class index="0" value="2"/>
+ <Class index="1" value="3"/>
+ </SubClassRule>
+ </SubClassSet>
+ <SubClassSet index="2">
+ <!-- SubClassRuleCount=0 -->
+ </SubClassSet>
+ <SubClassSet index="3">
+ <!-- SubClassRuleCount=0 -->
+ </SubClassSet>
+ </ContextSubst>
+ </Lookup>
+ <Lookup index="2">
+ <LookupType value="5"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ContextSubst index="0" Format="3">
+ <!-- GlyphCount=1 -->
+ <!-- SubstCount=0 -->
+ <Coverage index="0">
+ <Glyph value="e"/>
+ </Coverage>
+ </ContextSubst>
+ </Lookup>
+ </LookupList>
+ </GSUB>
+
+</ttFont>
diff --git a/Tests/feaLib/data/GSUB_6.ttx b/Tests/feaLib/data/GSUB_6.ttx
index f32e47d9..18405d25 100644
--- a/Tests/feaLib/data/GSUB_6.ttx
+++ b/Tests/feaLib/data/GSUB_6.ttx
@@ -229,36 +229,30 @@
<LookupType value="6"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
- <ChainContextSubst index="0" Format="3">
- <!-- BacktrackGlyphCount=3 -->
- <BacktrackCoverage index="0">
- <Glyph value="E"/>
- </BacktrackCoverage>
- <BacktrackCoverage index="1">
- <Glyph value="D"/>
- </BacktrackCoverage>
- <BacktrackCoverage index="2">
- <Glyph value="A"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
+ <ChainContextSubst index="0" Format="1">
+ <Coverage>
<Glyph value="c_t"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=3 -->
- <LookAheadCoverage index="0">
- <Glyph value="V"/>
- </LookAheadCoverage>
- <LookAheadCoverage index="1">
- <Glyph value="W"/>
- </LookAheadCoverage>
- <LookAheadCoverage index="2">
- <Glyph value="X"/>
- </LookAheadCoverage>
- <!-- SubstCount=1 -->
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="2"/>
- </SubstLookupRecord>
+ </Coverage>
+ <!-- ChainSubRuleSetCount=1 -->
+ <ChainSubRuleSet index="0">
+ <!-- ChainSubRuleCount=1 -->
+ <ChainSubRule index="0">
+ <!-- BacktrackGlyphCount=3 -->
+ <Backtrack index="0" value="E"/>
+ <Backtrack index="1" value="D"/>
+ <Backtrack index="2" value="A"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=3 -->
+ <LookAhead index="0" value="V"/>
+ <LookAhead index="1" value="W"/>
+ <LookAhead index="2" value="X"/>
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="2"/>
+ </SubstLookupRecord>
+ </ChainSubRule>
+ </ChainSubRuleSet>
</ChainContextSubst>
</Lookup>
</LookupList>
diff --git a/Tests/feaLib/data/GSUB_6_formats.fea b/Tests/feaLib/data/GSUB_6_formats.fea
new file mode 100644
index 00000000..44135d24
--- /dev/null
+++ b/Tests/feaLib/data/GSUB_6_formats.fea
@@ -0,0 +1,20 @@
+lookup GSUB6f1 {
+ ignore sub one two three' four' five six seven;
+ ignore sub two one three' four' six five seven;
+} GSUB6f1;
+
+lookup GSUB6f2 {
+ ignore sub [A - H] [I - Z] [a - z]' [A - H]' [I - Z]';
+ ignore sub [I - Z] [A - H] [a - z]' [A - H]' [I - Z]';
+ ignore sub [A - H] [I - Z] [a - z]' [I - Z]' [A - H]';
+} GSUB6f2;
+
+lookup GSUB6f3 {
+ ignore sub [space comma semicolon] e';
+} GSUB6f3;
+
+feature test {
+ lookup GSUB6f1;
+ lookup GSUB6f2;
+ lookup GSUB6f3;
+} test;
diff --git a/Tests/feaLib/data/GSUB_6_formats.ttx b/Tests/feaLib/data/GSUB_6_formats.ttx
new file mode 100644
index 00000000..ad2a1c5e
--- /dev/null
+++ b/Tests/feaLib/data/GSUB_6_formats.ttx
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ttFont>
+
+ <GSUB>
+ <Version value="0x00010000"/>
+ <ScriptList>
+ <!-- ScriptCount=1 -->
+ <ScriptRecord index="0">
+ <ScriptTag value="DFLT"/>
+ <Script>
+ <DefaultLangSys>
+ <ReqFeatureIndex value="65535"/>
+ <!-- FeatureCount=1 -->
+ <FeatureIndex index="0" value="0"/>
+ </DefaultLangSys>
+ <!-- LangSysCount=0 -->
+ </Script>
+ </ScriptRecord>
+ </ScriptList>
+ <FeatureList>
+ <!-- FeatureCount=1 -->
+ <FeatureRecord index="0">
+ <FeatureTag value="test"/>
+ <Feature>
+ <!-- LookupCount=3 -->
+ <LookupListIndex index="0" value="0"/>
+ <LookupListIndex index="1" value="1"/>
+ <LookupListIndex index="2" value="2"/>
+ </Feature>
+ </FeatureRecord>
+ </FeatureList>
+ <LookupList>
+ <!-- LookupCount=3 -->
+ <Lookup index="0">
+ <LookupType value="6"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ChainContextSubst index="0" Format="1">
+ <Coverage>
+ <Glyph value="three"/>
+ </Coverage>
+ <!-- ChainSubRuleSetCount=1 -->
+ <ChainSubRuleSet index="0">
+ <!-- ChainSubRuleCount=2 -->
+ <ChainSubRule index="0">
+ <!-- BacktrackGlyphCount=2 -->
+ <Backtrack index="0" value="two"/>
+ <Backtrack index="1" value="one"/>
+ <!-- InputGlyphCount=2 -->
+ <Input index="0" value="four"/>
+ <!-- LookAheadGlyphCount=3 -->
+ <LookAhead index="0" value="five"/>
+ <LookAhead index="1" value="six"/>
+ <LookAhead index="2" value="seven"/>
+ <!-- SubstCount=0 -->
+ </ChainSubRule>
+ <ChainSubRule index="1">
+ <!-- BacktrackGlyphCount=2 -->
+ <Backtrack index="0" value="one"/>
+ <Backtrack index="1" value="two"/>
+ <!-- InputGlyphCount=2 -->
+ <Input index="0" value="four"/>
+ <!-- LookAheadGlyphCount=3 -->
+ <LookAhead index="0" value="six"/>
+ <LookAhead index="1" value="five"/>
+ <LookAhead index="2" value="seven"/>
+ <!-- SubstCount=0 -->
+ </ChainSubRule>
+ </ChainSubRuleSet>
+ </ChainContextSubst>
+ </Lookup>
+ <Lookup index="1">
+ <LookupType value="6"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ChainContextSubst index="0" Format="2">
+ <Coverage>
+ <Glyph value="a"/>
+ <Glyph value="b"/>
+ <Glyph value="c"/>
+ <Glyph value="d"/>
+ <Glyph value="e"/>
+ <Glyph value="f"/>
+ <Glyph value="g"/>
+ <Glyph value="h"/>
+ <Glyph value="i"/>
+ <Glyph value="j"/>
+ <Glyph value="k"/>
+ <Glyph value="l"/>
+ <Glyph value="m"/>
+ <Glyph value="n"/>
+ <Glyph value="o"/>
+ <Glyph value="p"/>
+ <Glyph value="q"/>
+ <Glyph value="r"/>
+ <Glyph value="s"/>
+ <Glyph value="t"/>
+ <Glyph value="u"/>
+ <Glyph value="v"/>
+ <Glyph value="w"/>
+ <Glyph value="x"/>
+ <Glyph value="y"/>
+ <Glyph value="z"/>
+ </Coverage>
+ <BacktrackClassDef>
+ <ClassDef glyph="A" class="2"/>
+ <ClassDef glyph="B" class="2"/>
+ <ClassDef glyph="C" class="2"/>
+ <ClassDef glyph="D" class="2"/>
+ <ClassDef glyph="E" class="2"/>
+ <ClassDef glyph="F" class="2"/>
+ <ClassDef glyph="G" class="2"/>
+ <ClassDef glyph="H" class="2"/>
+ <ClassDef glyph="I" class="1"/>
+ <ClassDef glyph="J" class="1"/>
+ <ClassDef glyph="K" class="1"/>
+ <ClassDef glyph="L" class="1"/>
+ <ClassDef glyph="M" class="1"/>
+ <ClassDef glyph="N" class="1"/>
+ <ClassDef glyph="O" class="1"/>
+ <ClassDef glyph="P" class="1"/>
+ <ClassDef glyph="Q" class="1"/>
+ <ClassDef glyph="R" class="1"/>
+ <ClassDef glyph="S" class="1"/>
+ <ClassDef glyph="T" class="1"/>
+ <ClassDef glyph="U" class="1"/>
+ <ClassDef glyph="V" class="1"/>
+ <ClassDef glyph="W" class="1"/>
+ <ClassDef glyph="X" class="1"/>
+ <ClassDef glyph="Y" class="1"/>
+ <ClassDef glyph="Z" class="1"/>
+ </BacktrackClassDef>
+ <InputClassDef>
+ <ClassDef glyph="A" class="3"/>
+ <ClassDef glyph="B" class="3"/>
+ <ClassDef glyph="C" class="3"/>
+ <ClassDef glyph="D" class="3"/>
+ <ClassDef glyph="E" class="3"/>
+ <ClassDef glyph="F" class="3"/>
+ <ClassDef glyph="G" class="3"/>
+ <ClassDef glyph="H" class="3"/>
+ <ClassDef glyph="I" class="2"/>
+ <ClassDef glyph="J" class="2"/>
+ <ClassDef glyph="K" class="2"/>
+ <ClassDef glyph="L" class="2"/>
+ <ClassDef glyph="M" class="2"/>
+ <ClassDef glyph="N" class="2"/>
+ <ClassDef glyph="O" class="2"/>
+ <ClassDef glyph="P" class="2"/>
+ <ClassDef glyph="Q" class="2"/>
+ <ClassDef glyph="R" class="2"/>
+ <ClassDef glyph="S" class="2"/>
+ <ClassDef glyph="T" class="2"/>
+ <ClassDef glyph="U" class="2"/>
+ <ClassDef glyph="V" class="2"/>
+ <ClassDef glyph="W" class="2"/>
+ <ClassDef glyph="X" class="2"/>
+ <ClassDef glyph="Y" class="2"/>
+ <ClassDef glyph="Z" class="2"/>
+ <ClassDef glyph="a" class="1"/>
+ <ClassDef glyph="b" class="1"/>
+ <ClassDef glyph="c" class="1"/>
+ <ClassDef glyph="d" class="1"/>
+ <ClassDef glyph="e" class="1"/>
+ <ClassDef glyph="f" class="1"/>
+ <ClassDef glyph="g" class="1"/>
+ <ClassDef glyph="h" class="1"/>
+ <ClassDef glyph="i" class="1"/>
+ <ClassDef glyph="j" class="1"/>
+ <ClassDef glyph="k" class="1"/>
+ <ClassDef glyph="l" class="1"/>
+ <ClassDef glyph="m" class="1"/>
+ <ClassDef glyph="n" class="1"/>
+ <ClassDef glyph="o" class="1"/>
+ <ClassDef glyph="p" class="1"/>
+ <ClassDef glyph="q" class="1"/>
+ <ClassDef glyph="r" class="1"/>
+ <ClassDef glyph="s" class="1"/>
+ <ClassDef glyph="t" class="1"/>
+ <ClassDef glyph="u" class="1"/>
+ <ClassDef glyph="v" class="1"/>
+ <ClassDef glyph="w" class="1"/>
+ <ClassDef glyph="x" class="1"/>
+ <ClassDef glyph="y" class="1"/>
+ <ClassDef glyph="z" class="1"/>
+ </InputClassDef>
+ <LookAheadClassDef>
+ </LookAheadClassDef>
+ <!-- ChainSubClassSetCount=4 -->
+ <ChainSubClassSet index="0">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ <ChainSubClassSet index="1">
+ <!-- ChainSubClassRuleCount=3 -->
+ <ChainSubClassRule index="0">
+ <!-- BacktrackGlyphCount=2 -->
+ <Backtrack index="0" value="1"/>
+ <Backtrack index="1" value="2"/>
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="3"/>
+ <Input index="1" value="2"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=0 -->
+ </ChainSubClassRule>
+ <ChainSubClassRule index="1">
+ <!-- BacktrackGlyphCount=2 -->
+ <Backtrack index="0" value="2"/>
+ <Backtrack index="1" value="1"/>
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="3"/>
+ <Input index="1" value="2"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=0 -->
+ </ChainSubClassRule>
+ <ChainSubClassRule index="2">
+ <!-- BacktrackGlyphCount=2 -->
+ <Backtrack index="0" value="1"/>
+ <Backtrack index="1" value="2"/>
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="2"/>
+ <Input index="1" value="3"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=0 -->
+ </ChainSubClassRule>
+ </ChainSubClassSet>
+ <ChainSubClassSet index="2">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ <ChainSubClassSet index="3">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ </ChainContextSubst>
+ </Lookup>
+ <Lookup index="2">
+ <LookupType value="6"/>
+ <LookupFlag value="0"/>
+ <!-- SubTableCount=1 -->
+ <ChainContextSubst index="0" Format="3">
+ <!-- BacktrackGlyphCount=1 -->
+ <BacktrackCoverage index="0">
+ <Glyph value="space"/>
+ <Glyph value="semicolon"/>
+ <Glyph value="comma"/>
+ </BacktrackCoverage>
+ <!-- InputGlyphCount=1 -->
+ <InputCoverage index="0">
+ <Glyph value="e"/>
+ </InputCoverage>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=0 -->
+ </ChainContextSubst>
+ </Lookup>
+ </LookupList>
+ </GSUB>
+
+</ttFont>
diff --git a/Tests/feaLib/data/ZeroValue_ChainSinglePos_horizontal.ttx b/Tests/feaLib/data/ZeroValue_ChainSinglePos_horizontal.ttx
index ce76370e..98f7aa9e 100644
--- a/Tests/feaLib/data/ZeroValue_ChainSinglePos_horizontal.ttx
+++ b/Tests/feaLib/data/ZeroValue_ChainSinglePos_horizontal.ttx
@@ -32,44 +32,39 @@
<Lookup index="0">
<LookupType value="8"/>
<LookupFlag value="0"/>
- <!-- SubTableCount=2 -->
- <ChainContextPos index="0" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="A"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
- <Glyph value="G"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="A"/>
- </LookAheadCoverage>
- <!-- PosCount=1 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
- </ChainContextPos>
- <ChainContextPos index="1" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="B"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
+ <!-- SubTableCount=1 -->
+ <ChainContextPos index="0" Format="1">
+ <Coverage>
<Glyph value="G"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="B"/>
- </LookAheadCoverage>
- <!-- PosCount=1 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
+ </Coverage>
+ <!-- ChainPosRuleSetCount=1 -->
+ <ChainPosRuleSet index="0">
+ <!-- ChainPosRuleCount=2 -->
+ <ChainPosRule index="0">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="A"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="A"/>
+ <!-- PosCount=1 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ <ChainPosRule index="1">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="B"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="B"/>
+ <!-- PosCount=1 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ </ChainPosRuleSet>
</ChainContextPos>
</Lookup>
<Lookup index="1">
diff --git a/Tests/feaLib/data/ZeroValue_ChainSinglePos_vertical.ttx b/Tests/feaLib/data/ZeroValue_ChainSinglePos_vertical.ttx
index e1cb5d61..973cb4f6 100644
--- a/Tests/feaLib/data/ZeroValue_ChainSinglePos_vertical.ttx
+++ b/Tests/feaLib/data/ZeroValue_ChainSinglePos_vertical.ttx
@@ -32,44 +32,39 @@
<Lookup index="0">
<LookupType value="8"/>
<LookupFlag value="0"/>
- <!-- SubTableCount=2 -->
- <ChainContextPos index="0" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="A"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
- <Glyph value="G"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="A"/>
- </LookAheadCoverage>
- <!-- PosCount=1 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
- </ChainContextPos>
- <ChainContextPos index="1" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="B"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=1 -->
- <InputCoverage index="0">
+ <!-- SubTableCount=1 -->
+ <ChainContextPos index="0" Format="1">
+ <Coverage>
<Glyph value="G"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="B"/>
- </LookAheadCoverage>
- <!-- PosCount=1 -->
- <PosLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </PosLookupRecord>
+ </Coverage>
+ <!-- ChainPosRuleSetCount=1 -->
+ <ChainPosRuleSet index="0">
+ <!-- ChainPosRuleCount=2 -->
+ <ChainPosRule index="0">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="A"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="A"/>
+ <!-- PosCount=1 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ <ChainPosRule index="1">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="B"/>
+ <!-- InputGlyphCount=1 -->
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="B"/>
+ <!-- PosCount=1 -->
+ <PosLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </PosLookupRecord>
+ </ChainPosRule>
+ </ChainPosRuleSet>
</ChainContextPos>
</Lookup>
<Lookup index="1">
diff --git a/Tests/feaLib/data/bug512.ttx b/Tests/feaLib/data/bug512.ttx
index 50b76b46..693ebeb7 100644
--- a/Tests/feaLib/data/bug512.ttx
+++ b/Tests/feaLib/data/bug512.ttx
@@ -32,50 +32,51 @@
<Lookup index="0">
<LookupType value="5"/>
<LookupFlag value="0"/>
- <!-- SubTableCount=4 -->
- <ContextSubst index="0" Format="3">
- <!-- GlyphCount=1 -->
- <!-- SubstCount=1 -->
- <Coverage index="0">
- <Glyph value="G"/>
- </Coverage>
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </SubstLookupRecord>
- </ContextSubst>
- <ContextSubst index="1" Format="3">
- <!-- GlyphCount=1 -->
- <!-- SubstCount=1 -->
- <Coverage index="0">
- <Glyph value="H"/>
- </Coverage>
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </SubstLookupRecord>
- </ContextSubst>
- <ContextSubst index="2" Format="3">
- <!-- GlyphCount=1 -->
- <!-- SubstCount=1 -->
- <Coverage index="0">
+ <!-- SubTableCount=1 -->
+ <ContextSubst index="0" Format="1">
+ <Coverage>
<Glyph value="G"/>
- </Coverage>
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="2"/>
- </SubstLookupRecord>
- </ContextSubst>
- <ContextSubst index="3" Format="3">
- <!-- GlyphCount=1 -->
- <!-- SubstCount=1 -->
- <Coverage index="0">
<Glyph value="H"/>
</Coverage>
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="2"/>
- </SubstLookupRecord>
+ <!-- SubRuleSetCount=2 -->
+ <SubRuleSet index="0">
+ <!-- SubRuleCount=2 -->
+ <SubRule index="0">
+ <!-- GlyphCount=1 -->
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </SubstLookupRecord>
+ </SubRule>
+ <SubRule index="1">
+ <!-- GlyphCount=1 -->
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="2"/>
+ </SubstLookupRecord>
+ </SubRule>
+ </SubRuleSet>
+ <SubRuleSet index="1">
+ <!-- SubRuleCount=2 -->
+ <SubRule index="0">
+ <!-- GlyphCount=1 -->
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </SubstLookupRecord>
+ </SubRule>
+ <SubRule index="1">
+ <!-- GlyphCount=1 -->
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="2"/>
+ </SubstLookupRecord>
+ </SubRule>
+ </SubRuleSet>
</ContextSubst>
</Lookup>
<Lookup index="1">
diff --git a/Tests/feaLib/data/spec5f_ii_3.ttx b/Tests/feaLib/data/spec5f_ii_3.ttx
index a550f0b6..a94efcea 100644
--- a/Tests/feaLib/data/spec5f_ii_3.ttx
+++ b/Tests/feaLib/data/spec5f_ii_3.ttx
@@ -32,111 +32,115 @@
<Lookup index="0">
<LookupType value="6"/>
<LookupFlag value="0"/>
- <!-- SubTableCount=3 -->
- <ChainContextSubst index="0" Format="3">
- <!-- BacktrackGlyphCount=1 -->
- <BacktrackCoverage index="0">
- <Glyph value="a"/>
- <Glyph value="b"/>
- <Glyph value="c"/>
- <Glyph value="d"/>
- <Glyph value="e"/>
- <Glyph value="f"/>
- <Glyph value="g"/>
- <Glyph value="h"/>
- <Glyph value="i"/>
- <Glyph value="j"/>
- <Glyph value="k"/>
- <Glyph value="l"/>
- <Glyph value="m"/>
- <Glyph value="n"/>
- <Glyph value="o"/>
- <Glyph value="p"/>
- <Glyph value="q"/>
- <Glyph value="r"/>
- <Glyph value="s"/>
- <Glyph value="t"/>
- <Glyph value="u"/>
- <Glyph value="v"/>
- <Glyph value="w"/>
- <Glyph value="x"/>
- <Glyph value="y"/>
- <Glyph value="z"/>
- </BacktrackCoverage>
- <!-- InputGlyphCount=3 -->
- <InputCoverage index="0">
- <Glyph value="a"/>
- </InputCoverage>
- <InputCoverage index="1">
- <Glyph value="n"/>
- </InputCoverage>
- <InputCoverage index="2">
- <Glyph value="d"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=0 -->
- <!-- SubstCount=0 -->
- </ChainContextSubst>
- <ChainContextSubst index="1" Format="3">
- <!-- BacktrackGlyphCount=0 -->
- <!-- InputGlyphCount=3 -->
- <InputCoverage index="0">
- <Glyph value="a"/>
- </InputCoverage>
- <InputCoverage index="1">
- <Glyph value="n"/>
- </InputCoverage>
- <InputCoverage index="2">
- <Glyph value="d"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=1 -->
- <LookAheadCoverage index="0">
- <Glyph value="a"/>
- <Glyph value="b"/>
- <Glyph value="c"/>
- <Glyph value="d"/>
- <Glyph value="e"/>
- <Glyph value="f"/>
- <Glyph value="g"/>
- <Glyph value="h"/>
- <Glyph value="i"/>
- <Glyph value="j"/>
- <Glyph value="k"/>
- <Glyph value="l"/>
- <Glyph value="m"/>
- <Glyph value="n"/>
- <Glyph value="o"/>
- <Glyph value="p"/>
- <Glyph value="q"/>
- <Glyph value="r"/>
- <Glyph value="s"/>
- <Glyph value="t"/>
- <Glyph value="u"/>
- <Glyph value="v"/>
- <Glyph value="w"/>
- <Glyph value="x"/>
- <Glyph value="y"/>
- <Glyph value="z"/>
- </LookAheadCoverage>
- <!-- SubstCount=0 -->
- </ChainContextSubst>
- <ChainContextSubst index="2" Format="3">
- <!-- BacktrackGlyphCount=0 -->
- <!-- InputGlyphCount=3 -->
- <InputCoverage index="0">
+ <!-- SubTableCount=1 -->
+ <ChainContextSubst index="0" Format="2">
+ <Coverage>
<Glyph value="a"/>
- </InputCoverage>
- <InputCoverage index="1">
- <Glyph value="n"/>
- </InputCoverage>
- <InputCoverage index="2">
- <Glyph value="d"/>
- </InputCoverage>
- <!-- LookAheadGlyphCount=0 -->
- <!-- SubstCount=1 -->
- <SubstLookupRecord index="0">
- <SequenceIndex value="0"/>
- <LookupListIndex value="1"/>
- </SubstLookupRecord>
+ </Coverage>
+ <BacktrackClassDef>
+ <ClassDef glyph="a" class="1"/>
+ <ClassDef glyph="b" class="1"/>
+ <ClassDef glyph="c" class="1"/>
+ <ClassDef glyph="d" class="1"/>
+ <ClassDef glyph="e" class="1"/>
+ <ClassDef glyph="f" class="1"/>
+ <ClassDef glyph="g" class="1"/>
+ <ClassDef glyph="h" class="1"/>
+ <ClassDef glyph="i" class="1"/>
+ <ClassDef glyph="j" class="1"/>
+ <ClassDef glyph="k" class="1"/>
+ <ClassDef glyph="l" class="1"/>
+ <ClassDef glyph="m" class="1"/>
+ <ClassDef glyph="n" class="1"/>
+ <ClassDef glyph="o" class="1"/>
+ <ClassDef glyph="p" class="1"/>
+ <ClassDef glyph="q" class="1"/>
+ <ClassDef glyph="r" class="1"/>
+ <ClassDef glyph="s" class="1"/>
+ <ClassDef glyph="t" class="1"/>
+ <ClassDef glyph="u" class="1"/>
+ <ClassDef glyph="v" class="1"/>
+ <ClassDef glyph="w" class="1"/>
+ <ClassDef glyph="x" class="1"/>
+ <ClassDef glyph="y" class="1"/>
+ <ClassDef glyph="z" class="1"/>
+ </BacktrackClassDef>
+ <InputClassDef>
+ <ClassDef glyph="a" class="3"/>
+ <ClassDef glyph="d" class="2"/>
+ <ClassDef glyph="n" class="1"/>
+ </InputClassDef>
+ <LookAheadClassDef>
+ <ClassDef glyph="a" class="1"/>
+ <ClassDef glyph="b" class="1"/>
+ <ClassDef glyph="c" class="1"/>
+ <ClassDef glyph="d" class="1"/>
+ <ClassDef glyph="e" class="1"/>
+ <ClassDef glyph="f" class="1"/>
+ <ClassDef glyph="g" class="1"/>
+ <ClassDef glyph="h" class="1"/>
+ <ClassDef glyph="i" class="1"/>
+ <ClassDef glyph="j" class="1"/>
+ <ClassDef glyph="k" class="1"/>
+ <ClassDef glyph="l" class="1"/>
+ <ClassDef glyph="m" class="1"/>
+ <ClassDef glyph="n" class="1"/>
+ <ClassDef glyph="o" class="1"/>
+ <ClassDef glyph="p" class="1"/>
+ <ClassDef glyph="q" class="1"/>
+ <ClassDef glyph="r" class="1"/>
+ <ClassDef glyph="s" class="1"/>
+ <ClassDef glyph="t" class="1"/>
+ <ClassDef glyph="u" class="1"/>
+ <ClassDef glyph="v" class="1"/>
+ <ClassDef glyph="w" class="1"/>
+ <ClassDef glyph="x" class="1"/>
+ <ClassDef glyph="y" class="1"/>
+ <ClassDef glyph="z" class="1"/>
+ </LookAheadClassDef>
+ <!-- ChainSubClassSetCount=4 -->
+ <ChainSubClassSet index="0">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ <ChainSubClassSet index="1">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ <ChainSubClassSet index="2">
+ <!-- ChainSubClassRuleCount=0 -->
+ </ChainSubClassSet>
+ <ChainSubClassSet index="3">
+ <!-- ChainSubClassRuleCount=3 -->
+ <ChainSubClassRule index="0">
+ <!-- BacktrackGlyphCount=1 -->
+ <Backtrack index="0" value="1"/>
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="1"/>
+ <Input index="1" value="2"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=0 -->
+ </ChainSubClassRule>
+ <ChainSubClassRule index="1">
+ <!-- BacktrackGlyphCount=0 -->
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="1"/>
+ <Input index="1" value="2"/>
+ <!-- LookAheadGlyphCount=1 -->
+ <LookAhead index="0" value="1"/>
+ <!-- SubstCount=0 -->
+ </ChainSubClassRule>
+ <ChainSubClassRule index="2">
+ <!-- BacktrackGlyphCount=0 -->
+ <!-- InputGlyphCount=3 -->
+ <Input index="0" value="1"/>
+ <Input index="1" value="2"/>
+ <!-- LookAheadGlyphCount=0 -->
+ <!-- SubstCount=1 -->
+ <SubstLookupRecord index="0">
+ <SequenceIndex value="0"/>
+ <LookupListIndex value="1"/>
+ </SubstLookupRecord>
+ </ChainSubClassRule>
+ </ChainSubClassSet>
</ChainContextSubst>
</Lookup>
<Lookup index="1">