Skip to content

Commit c27c1a0

Browse files
committed
Clarify fallback patch handling,
- Rename Merging Exclusive Patches -> Merging Input Segments. - Addd some context on patch merging early on.
1 parent 013e2a8 commit c27c1a0

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

docs/closure_glyph_segmentation.md

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ express a desired segmentation of the original font using unicode code points. T
3030
this document describes a procedure for converting a desired unicode code point segmentation into a
3131
set of glyph patches with load conditions described in terms of those provided unicode segments.
3232

33-
Notably, this document does not aim to describe a solution to producing the unicode code point segmentation
34-
which is of high importance to the production of performant overall glyph segmentations.
33+
Notably, this document does not aim to describe a solution to producing the unicode code point
34+
segmentation which is of high importance to the production of performant overall glyph
35+
segmentations.
3536

3637
The code that implements the procedures in this document can be found in
3738
[closure_glyph_segmenter.cc](../ift/encoder/closure_glyph_segmenter.cc)
@@ -62,9 +63,12 @@ remaining areas for development in this particular approach:
6263
are commonly used together. This document and the implementation make no attempt to solve this
6364
problem yet.
6465

65-
* Patch merging: a very basic patch merging process has been included in the implementation but
66-
there is lots of room for improvement. Notably, it does not yet handle conditional patch merging.
67-
Additionally, a more advanced heuristic is needed for selecting which patches to merge.
66+
* Patch merging: is the process of combining patches from a found segmentation together in order to
67+
reduce overall overhead (eg. if there was a patch containing only one glyph the overhead cost of
68+
the patch format and network transfer would dominate, therefore it may make sense to merge into
69+
another similar patch). A very basic patch merging process has been included in the implementation
70+
but there is lots of room for improvement. Notably, it does not yet handle conditional patch
71+
merging. Additionally, a more advanced heuristic is needed for selecting which patches to merge.
6872

6973
* [Multi segment analysis](#multi-segment-dependencies): the current implementation only does single
7074
segment analysis which in some cases leaves sizable fallback glyph sets. How to implement multi
@@ -206,6 +210,14 @@ Next, we can use the per glyph information to form the glyph groupings:
206210
4. Lastly, collect the set of glyphs that are not part of any patch formed in steps 1 through 3. These form a fallback patch
207211
whose activation condition is $\bigvee_{1}^{n} s_j$.
208212

213+
## Fallback Patch
214+
215+
An output of the segmentation process above will include a fallback patch which is activated on the
216+
presence of any input segment. In practice it will be slightly more efficient to instead move all of
217+
the glyphs in the fallback patch into the initial font. This has the same overall effect as using a
218+
fallback patch. In some cases the encoder may be purposely trying to minimize and/or eliminate glyph
219+
data in the initial font. In these cases leaving them in the fallback patch may make the most sense.
220+
209221
## Merging
210222

211223
In some cases the patch set produced above may result in some patches that contain a small number of
@@ -217,7 +229,7 @@ There are two types of patches that can be merged: exclusive and conditional. Th
217229
merging is dependent on the type. The next two sections provide some guidelines for merging the two
218230
types together.
219231

220-
### Merging Exclusive Patches
232+
### Merging Input Segments
221233

222234
This section outlines a procedure to find and merge input code point segments in order to increase
223235
the sizes of one or more exclusive patches. It searches for other input segments that interact with
@@ -280,10 +292,10 @@ the activation condition.
280292
There are also two other options for merging conditional patches, though these are generally less
281293
preferable than the merging procedure described above:
282294

283-
1. Move the patch's glyphs into the initial font or merge with the fallback patch. This removes the patch at
284-
the cost of always loading the glyph's data. This may be useful when there is a very small patch
285-
with a wide activation condition. In this case it may not be desirable to merge with other larger
286-
conditional patches due to excessive widening of their activation conditions.
295+
1. Move the patch's glyphs into the initial font or merge with the fallback patch. This removes the
296+
patch at the cost of always loading the glyph's data. This may be useful when there is a very
297+
small patch with a wide activation condition. In this case it may not be desirable to merge with
298+
other larger conditional patches due to excessive widening of their activation conditions.
287299

288300
2. Duplicate the patch's glyphs into the segments that make up the patch's condition. This
289301
eliminates the patch at the cost of duplicating glyph data. It may be useful in cases of small

0 commit comments

Comments
 (0)