- From: Garret Rieger <grieger@google.com>
- Date: Tue, 30 Apr 2024 12:35:29 -0600
- To: Skef Iterum <siterum@adobe.com>
- Cc: "public-webfonts-wg@w3.org" <public-webfonts-wg@w3.org>
- Message-ID: <CAM=OCWZ5D4Wc3GrkCxOhU0b5waL12dWP3p6PuHuF97WqiTp2Vg@mail.gmail.com>
If we change that so that only one of the subset definition sets needs to intersect then that prevents an IFT font from expressing a mapping where you do want two or more of the sets to match (eg. a patch which adds support for a feature to a specific set of codepoints). I expect this to be a common pattern so we'll want to support it. The case you mentioned, where you want a patch to match if at least one of the subset definition sets intersects can be expressed in the current framework by using multiple entries. For your example: Entry 1: codepoints: {}, features: {dlig} -> patch i Entry 2: codepoints: {a, b, c}, features: {} -> patch i Would behave the same way as a single entry: codepoints: {a, b, c}, features: {dlig} -> patch i where the matching logic was changed to only require at least one intersection. On Mon, Apr 29, 2024 at 6:02 PM Skef Iterum <siterum@adobe.com> wrote: > On this: > > 1. For each set in <var>subset definition</var> (codepoints, feature > tags, design space) check if the set intersects > the corresponding set from <var>mapping entry</var>. A set intersects > when: > > <table> > <tr> > <th></th><th>subset definition set is empty</th><th>subset > definition set is not empty</th> > </tr> > <tr> > <th>mapping entry set is empty</th><td>true</td><td>true</td> > </tr> > <tr> > <th>mapping entry set is not empty</th><td>false</td><td>true if > the two sets intersect</td> > </tr> > </table> > > 2. If all sets checked in step 1 intersect, then return true for > <var>intersects</var> otherwise false. > > > Suppose I have an IFTB-style chunk that adds a certain list of code points > and then also some codepoints > associated with those for some feature. (This may be impossible with the > prototype IFTB encoding, but that's > a limitation I was intending to remove down the line.) Say that there are > some discretionary ligatures the encoder > decides to throw in. If the client isn't looking for dlig, and the patch > only lists dlig, then the intersection > for feature tags is false. And then, according to step 2, the intersection > generally is false. > > One can imagine analogous circumstances with design spaces. Maybe only a > certain subset of glyphs > "use" an axis, and the first patch that adds any of those glyphs may add > that axis. > > Are there reasons we are intentionally precluding those options with this > algorithm? If rule 2 read "If any sets..." > rather than "If all sets...", what would go poorly? Is the idea that there > may be multiple patches covering the > same set members and also others, and we want the most specific patch? (In > which case this algorithm > would effectively require a span of patches such that there was always one > with the right, matching specificity?) > Are we sure that's the right trade-off? > > Skef >
Received on Tuesday, 30 April 2024 18:35:53 UTC