- From: Garret Rieger <grieger@google.com>
- Date: Tue, 5 Dec 2023 15:32:09 -0700
- To: "w3c-webfonts-wg (public-webfonts-wg@w3.org)" <public-webfonts-wg@w3.org>
- Message-ID: <CAM=OCWa2uQhvbyz29CDMCe=WOQGLHj9fxWSboAiRe54AchFJQg@mail.gmail.com>
Demo Link <https://garretrieger.github.io/ift-demo/> Here's the notes I have for the presentation I gave at today's call: *Layout Feature Augmentation* - Added support to the prototype to add optional layout features via patches. This allows support for chosen layout features to be added dynamically via a patch when needed. - The demo has been updated with sample text that dynamically loads small caps to demonstrate this. - While the demo does this via shared brotli patches I also implemented support for this via IFTB patches. - With this the generic mapping table now has equivalent functionality to the IFTB mapping table and it's possible to convert IFTB mappings one to one to the generic mapping format. *Glyph mapping, Retain gids, and Changing Loca lengths* - When mixing shared brotli and IFTB patches it's currently necessary to subset with "retain glyph ids" which keeps glyph ids stable between subsets. Additionally the loca table must be kept at a consistent length. - I experimented with removing these restrictions: - I added a glyph map to the mapping table which records the mapping from original glyph ids to whatever space the current subset is using. - This ended up being quite complex to implement, and in all of the examples I tested it performed worse (from number of bytes transferred) then just keeping gids stable. Therefore unless more compelling use cases are found, I suggest we don't include a glyph map and stick with keeping gids stable. - I updated the IFTB merger to handle changing loca lengths, this worked well. However, after further thought I realized that it's possible to craft a shared brotli patch to extend the loca table without interfering with IFTB patching. This is preferable to changing the IFTB merger as it keeps the font internally consistent after shared brotli patch application instead of relying on subsequent IFTB patching to fix loca length. *Multiple Level Jumping* - I updated the encoder to produce graphs which contain jumps across a configurable number of levels. This allows multiple scripts to be loaded in a single network round trip. The demo has an added cyrillic and greek sample text to demonstrate this. *Variable Design Space Augmentation* - I updated the prototype to support optional variable design space augmentation. This allows the fonts design space to be extended by a patch. For example you could take a multi axis VF and include only a single axis in the initial file and then later on add support for the other two axes via patches. - I've updated the demo with a sample that dynamically loads a width axis to demonstrate this. - So far this is only implemented for shared brotli patches. However, Skef has proposed a technique to allow this to work for a mixture of shared brotli and IFTB patches. I will explore this next. - The proposed technique: - The font will initial include a mapping for IFTB patches that work with the current design space. - Shared brotli patches will be used to update all of the non-outline tables to support a new axis. Additionally, it will update the IFTB mappings to point to a new set of patches that are compatible with the extended design space. This will be done in a way that triggers the download of replacement IFTB patches for any currently loaded glyphs (in order to insert updated gvar data for those glyphs). *Additional demo updates* - Added some additional Chinese sample texts that include low frequency characters to demonstrate how that works (existing samples contained almost all high frequency codepoints).
Received on Tuesday, 5 December 2023 22:32:34 UTC