This is a GlyphsApp extension, (partially) documented [here][1], but it is a
useful one as it allows concise glyph insertion using decomposition
without having to maintain the list of glyphs in two places. E.g.
```fea
@upper = [A-Z];
lookup insert {
sub @upper by @upper connector;
} insert;
feature ccmp {
sub @upper' lookup insert x;
} ccmp;
```
As apposed to:
```fea
@upper = [A-Z];
lookup insert {
sub A by A connector;
sub B by B connector;
sub C by C connector;
sub D by D connector;
sub E by E connector;
sub F by F connector;
sub G by G connector;
sub H by H connector;
sub I by I connector;
sub J by J connector;
sub K by K connector;
sub L by L connector;
sub M by M connector;
sub N by N connector;
sub O by O connector;
sub P by P connector;
sub R by R connector;
sub S by S connector;
sub T by T connector;
sub U by U connector;
sub V by V connector;
sub W by W connector;
sub X by X connector;
sub Y by Y connector;
sub Z by Z connector;
} insert;
feature ccmp {
sub @upper' lookup insert x;
} ccmp;
```
1. http://handbook.glyphsapp.com/en/layout/multiple-substitution-with-classes/
Fixes https://github.com/fonttools/fonttools/issues/2949
- If there are no marked glyphs in an "ignore" statement, issue a
warning. The spec disallows this but makeotf allows it. It is most
likely a typo, so a warning is warranted.
- Mark the first glyph not all the glyphs, this matches makeotf.
- In asFea() always mark the input glyph.
- Udpate the tests.
This patch ensures that feaLib always produces a name table with entries
sorted in the order proscribed by the spec: platform id, encoding id,
language id, name id.
This breaks some tests, and so I have manually updated the test data to
match the new outputs.
* Speed up varscalar with caching
* Don't use cached_property
* Make model pool a class attribute
* Don't catch things on the values side
* Remove unused import
* add test that fails for #2293
* fixing #2293: rewrite of contextual positioning logic, ensure len(suffix) > 1 yields the correct result; checking more edge cases and raising errors inspired by makeotf
* test error cases
* only check when we actually have a value
* catch one more case that makeotf errors on and we didn't
* Replaced all from ...py23 import * with explicit name imports, or removed completely when possible.
* Replaced tounicode() with tostr()
* Changed all BytesIO ans StringIO imports to from io import ..., replaced all UnicodeIO with StringIO.
* Replaced all unichr() with chr()
* Misc minor tweaks and fixes