You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: Overview.bs
+17-16
Original file line number
Diff line number
Diff line change
@@ -426,21 +426,22 @@ The algorithm:
426
426
either table is not valid, invoke [$Handle errors$]. If <var>extended font subset</var> does not have an 'IFT ' table, then it is
427
427
not an [=incremental font=] and cannot be extended, return <var>extended font subset</var>.
428
428
429
-
3. For each of [[open-type/otff#table-directory|tables]]'IFT ' and 'IFTX' (if present): convert the table into a list of entries by
429
+
3. If the compatibility ID in 'IFT ' is equal to the compatibility ID in 'IFTX' this is an error, invoke [$Handle errors$].
430
+
431
+
4. For each of [[open-type/otff#table-directory|tables]]'IFT ' and 'IFTX' (if present): convert the table into a list of entries by
430
432
invoking [$Interpret Format 1 Patch Map$] or [$Interpret Format 2 Patch Map$]. Concatenate the returned entry lists into a single list,
431
433
<var>entry list</var>.
432
434
433
-
434
-
4. For each <var>entry</var> in <var>entry list</var> invoke [$Check entry intersection$] with <var>entry</var> and
435
+
5. For each <var>entry</var> in <var>entry list</var> invoke [$Check entry intersection$] with <var>entry</var> and
435
436
<var>target subset definition</var> as inputs, if it returns false remove <var>entry</var>
436
437
from <var>entry list</var>.
437
438
438
-
5. Remove any entries in <var>entry list</var> which have a patch URI which was loaded and applied previously during the execution
439
+
6. Remove any entries in <var>entry list</var> which have a patch URI which was loaded and applied previously during the execution
439
440
of this algorithm.
440
441
441
-
6. If <var>entry list</var> is empty, then the extension operation is finished, return <var>extended font subset</var>.
442
+
7. If <var>entry list</var> is empty, then the extension operation is finished, return <var>extended font subset</var>.
442
443
443
-
7. Pick one <var>entry</var> from <var>entry list</var> with the following procedure:
444
+
8. Pick one <var>entry</var> from <var>entry list</var> with the following procedure:
444
445
445
446
* If <var>entry list</var> contains one or more [=patch map entries=] which have a patch format that is [=Full Invalidation=]
446
447
then, select exactly one of the [=Full Invalidation=] entries in <var>entry list</var>. Follow the criteria in
@@ -453,7 +454,7 @@ The algorithm:
453
454
* Otherwise select exactly one of the [=No Invalidation=] entries in <var>entry list</var>.
454
455
The criteria for selecting the single entry is left up to the implementation to decide.
455
456
456
-
8. Load <var>patch file</var> by invoking [$Load patch file$] with the <var>initial font subset URI</var> as the initial font URI and
457
+
9. Load <var>patch file</var> by invoking [$Load patch file$] with the <var>initial font subset URI</var> as the initial font URI and
457
458
the <var>entry</var> patch URI as the patch URI. The total number of patches that a client can load and apply during a single execution
458
459
of this algorithm is limited to:
459
460
@@ -464,15 +465,15 @@ The algorithm:
464
465
Can be loaded and applied during a single invocation of this algorithm. If either count has been exceeded this is an error invoke
465
466
[$Handle errors$].
466
467
467
-
9. Apply <var>patch file</var> using the appropriate application algorithm (matching the patches format in <var>entry</var>) from
468
-
[[#font-patch-formats]] to apply the <var>patch file</var> using the patch URI and the compatibility id from <var>entry</var> to
469
-
<var>extended font subset</var>.
468
+
10. Apply <var>patch file</var> using the appropriate application algorithm (matching the patches format in <var>entry</var>) from
469
+
[[#font-patch-formats]] to apply the <var>patch file</var> using the patch URI and the compatibility id from <var>entry</var> to
470
+
<var>extended font subset</var>.
470
471
471
-
10. Go to step 2.
472
+
11. Go to step 2.
472
473
473
474
Note: the algorithm here presents patch loads as being done one at a time; however, to improve performance client implementations are
474
475
encouraged to pre-fetch patch files that will be applied in later iterations by the algorithm. The
475
-
[[#font-patch-invalidations|invalidation categories]] can be used to predict which intersecting patches from step 4 will remain be valid
476
+
[[#font-patch-invalidations|invalidation categories]] can be used to predict which intersecting patches from step 5 will remain be valid
476
477
to be applied. For example: in a case where there are only "No Invalidation" intersecting patches the client could safely load all
477
478
intersecting patches in parallel, since no patch application will invalidate any of the other intersecting patches.
478
479
@@ -700,7 +701,7 @@ patch entry from a list of candidate entries. The selection criteria used has a
700
701
perform the extension. Round trips are costly so for maximum performance patches should be selected in a way that minimizes the total number of needed
701
702
round trips.
702
703
703
-
The following selection criteria minimizes round trips and must be used by the client when selecting a single partial or full invalidation patch in step 7
704
+
The following selection criteria minimizes round trips and must be used by the client when selecting a single partial or full invalidation patch in step 8
704
705
of [$Extend an Incremental Font Subset$]:
705
706
706
707
1. For each candidate entry compute the set intersection between each subset definition in the entry and the target subset definition. Union
@@ -755,7 +756,7 @@ parts of some content an incremental font can render:
755
756
0 then the incremental font does not fully support rendering the shaping unit.
756
757
757
758
* Second, compute the corresponding [=font subset definition=] and execute the [$Extend an Incremental Font Subset$] algorithm,
758
-
stopping at step 6. If the entry list is not empty then the incremental font does not fully support rendering the shaping unit.
759
+
stopping at step 7. If the entry list is not empty then the incremental font does not fully support rendering the shaping unit.
759
760
760
761
* Any shaping units that passed both checks can be rendered in their entirety with the font.
0 commit comments