@figures=[zero one two three four five six seven eight nine]; @figures_mono=[zero.mono one.mono two.mono three.mono four.mono five.mono six.mono seven.mono eight.mono nine.mono]; @figures_mono_inverse=[zero.mono.inverse one.mono.inverse two.mono.inverse three.mono.inverse four.mono.inverse five.mono.inverse six.mono.inverse seven.mono.inverse eight.mono.inverse nine.mono.inverse]; @figures_multiple=[zero.multiple one.multiple two.multiple three.multiple four.multiple five.multiple six.multiple seven.multiple eight.multiple nine.multiple]; @figures_multiple_inverse=[zero.multiple.inverse one.multiple.inverse two.multiple.inverse three.multiple.inverse four.multiple.inverse five.multiple.inverse six.multiple.inverse seven.multiple.inverse eight.multiple.inverse nine.multiple.inverse]; #languagesystem DFLT dflt; languagesystem latn dflt; # Test ss01 and ss02 with: # [1] [12] [123] [1234] [1 1] [12 12] [123 123] feature ss01 { # http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html#8.c # (featureNames block is AFDKO 2.5 syntax.) #featureNames { # name "index"; # name 1 "index"; #} ; lookup Index1 { # [f.mono] sub bracketleft @figures' bracketright by @figures_mono; # [f f f.multiple] sub bracketleft @figures @figures @figures' bracketright by @figures_multiple; # [f f.multiple] sub bracketleft @figures @figures' bracketright by @figures_multiple; } Index1; lookup Index2 { # [f.multiple f.multiple] AND # [f f.multiple f.multiple] sub @figures' @figures_multiple by @figures_multiple; } Index2; lookup Index3 { # Same rule as in lookup Index2. # (Why can't a lookup be called more than one time in a feature?) # Rule is in a lookup only, because it is called by ss02. # [f.multiple f.multiple f.multiple] sub @figures' @figures_multiple by @figures_multiple; } Index3; lookup Index4 { sub bracketleft' [@figures_mono @figures_multiple] by bracketleft.square; sub [@figures_mono @figures_multiple] bracketright' by bracketright.square; } Index4; } ss01; feature ss02 { # http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html#8.c # (featureNames block is AFDKO 2.5 syntax.) #featureNames { # name "index inverse"; # name 1 "index inverse"; #} ; lookup Index1; lookup Index2; lookup Index3; lookup Index4; sub [@figures_mono @figures_multiple bracketleft.square bracketright.square] by [@figures_mono_inverse @figures_multiple_inverse bracketleft.square.inverse bracketright.square.inverse]; } ss02;