@ot-builder/rectify
Advanced tools
| import * as Ot from "@ot-builder/ot"; | ||
| import { AxisRectifier } from "../../interface"; | ||
| export declare function cleanupGsubGposData<L, Table extends Ot.GsubGpos.TableT<L>>(table: Table, newTable: Table, lookupCorrespondence: Map<L, L>, fnRemovable: (lookup: L) => boolean): Table | null; | ||
| export interface LookupCleaner<L> { | ||
| lookupRemovable(lookup: L): boolean; | ||
| cleanupBrokenCrossLinks: (lookup: L, validLookupSet: Set<L>) => void; | ||
| } | ||
| export declare function cleanupGsubGposData<L, Table extends Ot.GsubGpos.TableT<L>>(table: Table, newTable: Table, lookupCorrespondence: Map<L, L>, cleaner: LookupCleaner<L>): Table | null; | ||
| export declare function axesRectifyFeatureVariation<L>(rec: AxisRectifier, fv: Ot.GsubGpos.FeatureVariationT<L>): void; | ||
| //# sourceMappingURL=cleanup.d.ts.map |
@@ -6,8 +6,4 @@ "use strict"; | ||
| const shared_1 = require("../../shared"); | ||
| function cleanupGsubGposData(table, newTable, lookupCorrespondence, fnRemovable) { | ||
| const lookups = []; | ||
| for (const lookup of [...lookupCorrespondence.values()]) { | ||
| if (!fnRemovable(lookup)) | ||
| lookups.push(lookup); | ||
| } | ||
| function cleanupGsubGposData(table, newTable, lookupCorrespondence, cleaner) { | ||
| const lookups = cleanupLookups([...lookupCorrespondence.values()], cleaner); | ||
| newTable.lookups = lookups; | ||
@@ -28,2 +24,21 @@ const lookupSet = new Set(lookups); | ||
| } | ||
| function cleanupLookups(source, cleaner) { | ||
| let lookups = source; | ||
| let n = lookups.length; | ||
| let n1 = n; | ||
| do { | ||
| n = n1; | ||
| const lookups1 = []; | ||
| for (const lookup of lookups) { | ||
| if (!cleaner.lookupRemovable(lookup)) | ||
| lookups1.push(lookup); | ||
| } | ||
| const validSet = new Set(lookups1); | ||
| for (const lookup of lookups1) | ||
| cleaner.cleanupBrokenCrossLinks(lookup, validSet); | ||
| n1 = lookups1.length; | ||
| lookups = lookups1; | ||
| } while (n1 < n); | ||
| return lookups; | ||
| } | ||
| function cleanupFeature(ft, lookupCorrespondence, ls, featureCorrespondence, keepEmptyFeature) { | ||
@@ -30,0 +45,0 @@ const l1 = shared_1.RectifyImpl.Elim.listSome(ft.lookups.map(l => lookupCorrespondence.get(l)), ls); |
@@ -9,18 +9,9 @@ "use strict"; | ||
| const rectify_1 = require("./rectify"); | ||
| function fnApplyGsubLookup(lookup, alg) { | ||
| return alg.process(lookup); | ||
| } | ||
| function fnGsubLookupRemovable(lookup) { | ||
| return lookup_removable_alg_1.LookupRemovableAlg.process(lookup); | ||
| } | ||
| function fnApplyGposLookup(lookup, alg) { | ||
| return alg.process(lookup); | ||
| } | ||
| function fnGposLookupRemovable(lookup) { | ||
| return lookup_removable_alg_1.LookupRemovableAlg.process(lookup); | ||
| } | ||
| function rectifyGsubTable(recGlyphs, recAxes, recCoord, recPA, table) { | ||
| const alg = new rectify_1.RectifyGsubGlyphCoordAlg(recGlyphs, recCoord, recPA); | ||
| const lookupCorrespondence = (0, rectify_1.rectifyLookupList)(table.lookups, alg, fnApplyGsubLookup); | ||
| const newTable = (0, cleanup_1.cleanupGsubGposData)(table, new Ot.Gsub.Table(), lookupCorrespondence, fnGsubLookupRemovable); | ||
| const lookupCorrespondence = (0, rectify_1.rectifyLookupList)(table.lookups, alg, (l, a) => a.process(l)); | ||
| const newTable = (0, cleanup_1.cleanupGsubGposData)(table, new Ot.Gsub.Table(), lookupCorrespondence, { | ||
| lookupRemovable: l => lookup_removable_alg_1.LookupRemovableAlg.process(l), | ||
| cleanupBrokenCrossLinks: (l, v) => lookup_removable_alg_1.RemoveBrokenLinkAlg.process(l, v) | ||
| }); | ||
| if (newTable && newTable.featureVariations) { | ||
@@ -34,4 +25,7 @@ for (const fv of newTable.featureVariations) | ||
| const alg = new rectify_1.RectifyGposGlyphCoordAlg(recGlyphs, recCoord, recPA); | ||
| const lookupCorrespondence = (0, rectify_1.rectifyLookupList)(table.lookups, alg, fnApplyGposLookup); | ||
| const newTable = (0, cleanup_1.cleanupGsubGposData)(table, new Ot.Gpos.Table(), lookupCorrespondence, fnGposLookupRemovable); | ||
| const lookupCorrespondence = (0, rectify_1.rectifyLookupList)(table.lookups, alg, (l, a) => a.process(l)); | ||
| const newTable = (0, cleanup_1.cleanupGsubGposData)(table, new Ot.Gpos.Table(), lookupCorrespondence, { | ||
| lookupRemovable: l => lookup_removable_alg_1.LookupRemovableAlg.process(l), | ||
| cleanupBrokenCrossLinks: (l, v) => lookup_removable_alg_1.RemoveBrokenLinkAlg.process(l, v) | ||
| }); | ||
| if (newTable && newTable.featureVariations) { | ||
@@ -38,0 +32,0 @@ for (const fv of newTable.featureVariations) |
@@ -19,2 +19,7 @@ import * as Ot from "@ot-builder/ot"; | ||
| export declare const LookupRemovableAlg: CLookupRemovableAlg; | ||
| export declare class CRemoveBrokenLinkAlg { | ||
| process(lookup: Ot.Gsub.Lookup | Ot.Gpos.Lookup, validSet: Set<Ot.Gsub.Lookup | Ot.Gpos.Lookup>): void; | ||
| chaining(props: Ot.Gsub.Chaining | Ot.Gpos.Chaining, validSet: Set<Ot.Gsub.Lookup | Ot.Gpos.Lookup>): void; | ||
| } | ||
| export declare const RemoveBrokenLinkAlg: CRemoveBrokenLinkAlg; | ||
| //# sourceMappingURL=lookup-removable-alg.d.ts.map |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.LookupRemovableAlg = exports.CLookupRemovableAlg = void 0; | ||
| exports.RemoveBrokenLinkAlg = exports.CRemoveBrokenLinkAlg = exports.LookupRemovableAlg = exports.CLookupRemovableAlg = void 0; | ||
| const Ot = require("@ot-builder/ot"); | ||
@@ -89,2 +89,32 @@ class CLookupRemovableAlg { | ||
| exports.LookupRemovableAlg = new CLookupRemovableAlg(); | ||
| class CRemoveBrokenLinkAlg { | ||
| process(lookup, validSet) { | ||
| switch (lookup.type) { | ||
| case Ot.Gsub.LookupType.Chaining: | ||
| this.chaining(lookup, validSet); | ||
| break; | ||
| case Ot.Gpos.LookupType.Chaining: | ||
| this.chaining(lookup, validSet); | ||
| break; | ||
| } | ||
| } | ||
| chaining(props, validSet) { | ||
| let rear = 0; | ||
| for (let front = 0; front < props.rules.length; front++) { | ||
| const rule = props.rules[front]; | ||
| let apRear = 0; | ||
| for (let apFront = 0; apFront < rule.applications.length; apFront++) { | ||
| if (validSet.has(rule.applications[apFront].apply)) { | ||
| rule.applications[apRear++] = rule.applications[apFront]; | ||
| } | ||
| } | ||
| rule.applications.length = apRear; | ||
| if (rule.applications.length) | ||
| props.rules[rear++] = rule; | ||
| } | ||
| props.rules.length = rear; | ||
| } | ||
| } | ||
| exports.CRemoveBrokenLinkAlg = CRemoveBrokenLinkAlg; | ||
| exports.RemoveBrokenLinkAlg = new CRemoveBrokenLinkAlg(); | ||
| //# sourceMappingURL=lookup-removable-alg.js.map |
+5
-5
| { | ||
| "name": "@ot-builder/rectify", | ||
| "version": "1.7.5", | ||
| "version": "1.7.6", | ||
| "license": "MIT", | ||
@@ -26,8 +26,8 @@ "repository": { | ||
| "dependencies": { | ||
| "@ot-builder/ot": "1.7.5", | ||
| "@ot-builder/ot": "1.7.6", | ||
| "@ot-builder/common-impl": "1.7.5", | ||
| "@ot-builder/ot-glyphs": "1.7.5", | ||
| "@ot-builder/ot-metadata": "1.7.5", | ||
| "@ot-builder/ot-glyphs": "1.7.6", | ||
| "@ot-builder/ot-metadata": "1.7.6", | ||
| "@ot-builder/prelude": "1.7.5", | ||
| "@ot-builder/variance": "1.7.5", | ||
| "@ot-builder/variance": "1.7.6", | ||
| "tslib": "^2.8.1" | ||
@@ -34,0 +34,0 @@ }, |
98276
2.16%2096
2.34%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated