Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import r from 'restructure';
// PostScript information
export default new r.VersionedStruct(r.fixed32, {
header: { // these fields exist at the top of all versions
italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.
underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline
underlineThickness: r.int16, // Suggested values for the underline thickness
isFixedPitch: r.uint32, // Whether the font is monospaced
minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font
maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font
minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font
maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font
},
1: {}, // version 1 has no additional fields
2: {
numberOfGlyphs: r.uint16,
glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),
import r from 'restructure';
import { LookupTable } from './aat';
let BslnSubtable = new r.VersionedStruct('format', {
0: { // Distance-based, no mapping
deltas: new r.Array(r.int16, 32)
},
1: { // Distance-based, with mapping
deltas: new r.Array(r.int16, 32),
mappingData: new LookupTable(r.uint16)
},
2: { // Control point-based, no mapping
standardGlyph: r.uint16,
controlPoints: new r.Array(r.uint16, 32)
},
3: { // Control point-based, with mapping
standardGlyph: r.uint16,
decode(stream) {
return r.uint8.decode(stream) & 0x7f;
}
}
let Range1 = new r.Struct({
first: r.uint16,
nLeft: r.uint8
});
let Range2 = new r.Struct({
first: r.uint16,
nLeft: r.uint16
});
let CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {
0: {
nCodes: r.uint8,
codes: new r.Array(r.uint8, 'nCodes')
},
1: {
nRanges: r.uint8,
ranges: new r.Array(Range1, 'nRanges')
}
// TODO: supplement?
});
let CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));
// Decodes an array of ranges until the total
import r from 'restructure';
import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';
import {ItemVariationStore} from './variations';
let AttachPoint = new r.Array(r.uint16, r.uint16);
let AttachList = new r.Struct({
coverage: new r.Pointer(r.uint16, Coverage),
glyphCount: r.uint16,
attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')
});
let CaretValue = new r.VersionedStruct(r.uint16, {
1: { // Design units only
coordinate: r.int16
},
2: { // Contour point
caretValuePoint: r.uint16
},
3: { // Design units plus Device table
coordinate: r.int16,
deviceTable: new r.Pointer(r.uint16, Device)
}
});
let LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);
stateTable: new StateTable1
});
let WidthDeltaRecord = new r.Struct({
justClass: r.uint32,
beforeGrowLimit: r.fixed32,
beforeShrinkLimit: r.fixed32,
afterGrowLimit: r.fixed32,
afterShrinkLimit: r.fixed32,
growFlags: r.uint16,
shrinkFlags: r.uint16
});
let WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);
let ActionData = new r.VersionedStruct('actionType', {
0: { // Decomposition action
lowerLimit: r.fixed32,
upperLimit: r.fixed32,
order: r.uint16,
glyphs: new r.Array(r.uint16, r.uint16)
},
1: { // Unconditional add glyph action
addGlyph: r.uint16
},
2: { // Conditional add glyph action
substThreshold: r.fixed32,
addGlyph: r.uint16,
substGlyph: r.uint16
},
let GPOSLookup = new r.VersionedStruct('lookupType', {
1: new r.VersionedStruct(r.uint16, { // Single Adjustment
1: { // Single positioning value
coverage: new r.Pointer(r.uint16, Coverage),
valueFormat: ValueFormat,
value: new ValueRecord()
},
2: {
coverage: new r.Pointer(r.uint16, Coverage),
valueFormat: ValueFormat,
valueCount: r.uint16,
values: new r.LazyArray(new ValueRecord(), 'valueCount')
}
}),
2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning
1: { // Adjustments for glyph pairs
coverage: new r.Pointer(r.uint16, Coverage),
valueFormat1: ValueFormat,
valueFormat2: ValueFormat,
pairSetCount: r.uint16,
pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')
},
2: { // Class pair adjustment
coverage: new r.Pointer(r.uint16, Coverage),
valueFormat1: ValueFormat,
valueFormat2: ValueFormat,
classDef1: new r.Pointer(r.uint16, ClassDef),
classDef2: new r.Pointer(r.uint16, ClassDef),
class1Count: r.uint16,
class2Count: r.uint16,
}
});
let CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));
let FDRange3 = new r.Struct({
first: r.uint16,
fd: r.uint8
});
let FDRange4 = new r.Struct({
first: r.uint32,
fd: r.uint16
});
let FDSelect = new r.VersionedStruct(r.uint8, {
0: {
fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)
},
3: {
nRanges: r.uint16,
ranges: new r.Array(FDRange3, 'nRanges'),
sentinel: r.uint16
},
4: {
nRanges: r.uint32,
ranges: new r.Array(FDRange4, 'nRanges'),
sentinel: r.uint32
}
});
let LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);
let LigCaretList = new r.Struct({
coverage: new r.Pointer(r.uint16, Coverage),
ligGlyphCount: r.uint16,
ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')
});
let MarkGlyphSetsDef = new r.Struct({
markSetTableFormat: r.uint16,
markSetCount: r.uint16,
coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')
});
export default new r.VersionedStruct(r.uint32, {
header: {
glyphClassDef: new r.Pointer(r.uint16, ClassDef),
attachList: new r.Pointer(r.uint16, AttachList),
ligCaretList: new r.Pointer(r.uint16, LigCaretList),
markAttachClassDef: new r.Pointer(r.uint16, ClassDef)
},
0x00010000: {},
0x00010002: {
markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)
},
0x00010003: {
markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),
itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)
}
});
regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),
deltaSets: new r.Array(DeltaSet, 'itemCount')
});
export let ItemVariationStore = new r.Struct({
format: r.uint16,
variationRegionList: new r.Pointer(r.uint32, VariationRegionList),
variationDataCount: r.uint16,
itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')
});
/**********************
* Feature Variations *
**********************/
let ConditionTable = new r.VersionedStruct(r.uint16, {
1: {
axisIndex: r.uint16,
axisIndex: r.uint16,
filterRangeMinValue: F2DOT14,
filterRangeMaxValue: F2DOT14
}
});
let ConditionSet = new r.Struct({
conditionCount: r.uint16,
conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')
});
let FeatureTableSubstitutionRecord = new r.Struct({
featureIndex: r.uint16,
alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})
import r from 'restructure';
let loca = new r.VersionedStruct('head.indexToLocFormat', {
0: {
offsets: new r.Array(r.uint16)
},
1: {
offsets: new r.Array(r.uint32)
}
});
loca.process = function() {
if (this.version === 0) {
for (let i = 0; i < this.offsets.length; i++) {
this.offsets[i] <<= 1;
}
}
};