[api-minor] Initialize the unicode-category *lazily* on the Glyph-instance

The purpose of this patch is twofold:
 - Initialize the unicode-category data *lazily* during text-extraction, since this is completely unused during general parsing/rendering.
 - Stop exposing this data in the API, since it's unused on the main-thread and it seems like it was *accidentally* included.

Obviously these changes are API-observable, but hopefully no user is depending on this. Furthermore, it's trivial for a user to re-create this unicode-category data manually with a regular expression (from the exposed `unicode` property).
This commit is contained in:
Jonas Jenwald 2022-11-05 10:04:31 +01:00
parent 26f6f77db6
commit c8868a1c7a
2 changed files with 18 additions and 7 deletions

View File

@ -2775,7 +2775,9 @@ class PartialEvaluator {
for (let i = 0, ii = glyphs.length; i < ii; i++) {
const glyph = glyphs[i];
if (glyph.isInvisibleFormatMark) {
const { category } = glyph;
if (category.isInvisibleFormatMark) {
continue;
}
let charSpacing =
@ -2787,7 +2789,7 @@ class PartialEvaluator {
}
let scaledDim = glyphWidth * scale;
if (glyph.isWhitespace) {
if (category.isWhitespace) {
// Don't push a " " in the textContentItem
// (except when it's between two non-spaces chars),
// it will be done (if required) in next call to
@ -2815,7 +2817,7 @@ class PartialEvaluator {
// Must be called after compareWithLastPosition because
// the textContentItem could have been flushed.
const textChunk = ensureTextContentItem();
if (glyph.isZeroWidthDiacritic) {
if (category.isZeroWidthDiacritic) {
scaledDim = 0;
}

View File

@ -214,11 +214,20 @@ class Glyph {
this.operatorListId = operatorListId;
this.isSpace = isSpace;
this.isInFont = isInFont;
}
const category = getCharUnicodeCategory(unicode);
this.isWhitespace = category.isWhitespace;
this.isZeroWidthDiacritic = category.isZeroWidthDiacritic;
this.isInvisibleFormatMark = category.isInvisibleFormatMark;
/**
* This property, which is only used by `PartialEvaluator.getTextContent`,
* is purposely made non-serializable.
* @type {Object}
*/
get category() {
return shadow(
this,
"category",
getCharUnicodeCategory(this.unicode),
/* nonSerializable = */ true
);
}
/**