Fix font matrix handling for an edge case #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
By pure chance, I found that Typst main fails to properly render some text with the new subsetter:
After debuging, I realized that this is because, if the TOP DICT matrix is empty and the FONT DICT matrix is not, then in the subsetted font we would write 0.001 for the TOP DICT matrix and the existing FONT DICT matrix, which means that we are applying two transforms now. After rereading the comment in the ghostscript tracker, what ghostscript does is initialize TOP DICT matrix to 0.001 like we were doing before, but scales the FONT DICT matrix by x1000.
The way it is in the PR is not entirely correct because I don't think you can just scale the matrix like that, but I haven't seen any font matrix that has a skew/translation part, so I hope this should be fine for now.
Before (current Typst main): Only Apple Preview would render the PDF:
After: All viewers render it, including Acrobat:
Having no TOP DICT matrix but a FONT DICT matrix seems to be somewhat of an edge case, which is also why no tests are affected by this. So hopefully this doesn't cause any unwanted regressions.