Hi Sascha,This is Liang Hai. We had some interaction on GitHub (I wasn't very helpful though…) and birefly met once at the Unicode Conference.I've heard that you're probably working on a project of merging a number of script-specific Noto families into a single multi-script family, which makes wonder if you have some insights about how to better manage OpenType features.For example, are there any tools that you use to parse and manage .fea files through higher level objects instead of plain text? — I've found it's very hard to manage feature code in plain text when they have complex interactions (any changes will lead to extensive side effects on other rules), which is very common for complex scripts such as Indic ones.(I've just noticed fontTools.feaLib seems to provide a pretty complete object system and might allow extensively manipulating feature objects trees.)
--
You received this message because you are subscribed to the Google Groups "fonttools" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fonttools+...@googlegroups.com.
To post to this group, send email to font...@googlegroups.com.
Visit this group at https://groups.google.com/group/fonttools.
For more options, visit https://groups.google.com/d/optout.
This spec imposes a rule that any lookup should have a unique name, and their unique names reference them. Anything enclosed as a code is a variable; other names are fixed attributes of this interface. Scripts and Lookups are part of font lib. This is as close as it gets to the binary structure, but with enough abstraction which ensures JIT compiling it would be easy. Lookup subtables are not considered here, but they can be discussed in another topic.
Scripts (set of Scripts):
-- Script (dict of strings):
---- Tag (string): script_tag
# DFLT, latn, ...
---- Languages (set of Languages):
------ Language (dict of strings):
-------- Tag (string): language_tag
# dflt, FAR, ...
-------- LookupList (list of strings): [lookup_name
, ...] # any unicode string
Lookups (set of Lookups):
-- Lookup (dict of strings):
---- Name (string): lookup_name
# any unicode string
---- Type (string): lookup_type
# SingleSubst, LigatureSubst
---- Flags (set of strings): [lookup_flag
, ...] # IgnoreMark, ...
---- Features (set of strings): [feature_tag
, ...] # liga, ...
Complier sorts ScriptSet and LanguageSet alphabetically based on their tags. Order of lookups is designed in the Language.LookupList by the user.