Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/embedpre.../assets/pdf/build
File: pdf.worker.js
}
[15500] Fix | Delete
}
[15501] Fix | Delete
pos += 2;
[15502] Fix | Delete
break;
[15503] Fix | Delete
default:
[15504] Fix | Delete
throw new FormatError(`parseFDSelect: Unknown format "${format}".`);
[15505] Fix | Delete
}
[15506] Fix | Delete
if (fdSelect.length !== length) {
[15507] Fix | Delete
throw new FormatError("parseFDSelect: Invalid font data.");
[15508] Fix | Delete
}
[15509] Fix | Delete
return new CFFFDSelect(format, fdSelect);
[15510] Fix | Delete
}
[15511] Fix | Delete
}
[15512] Fix | Delete
class CFF {
[15513] Fix | Delete
constructor() {
[15514] Fix | Delete
this.header = null;
[15515] Fix | Delete
this.names = [];
[15516] Fix | Delete
this.topDict = null;
[15517] Fix | Delete
this.strings = new CFFStrings();
[15518] Fix | Delete
this.globalSubrIndex = null;
[15519] Fix | Delete
this.encoding = null;
[15520] Fix | Delete
this.charset = null;
[15521] Fix | Delete
this.charStrings = null;
[15522] Fix | Delete
this.fdArray = [];
[15523] Fix | Delete
this.fdSelect = null;
[15524] Fix | Delete
this.isCIDFont = false;
[15525] Fix | Delete
}
[15526] Fix | Delete
duplicateFirstGlyph() {
[15527] Fix | Delete
if (this.charStrings.count >= 65535) {
[15528] Fix | Delete
warn("Not enough space in charstrings to duplicate first glyph.");
[15529] Fix | Delete
return;
[15530] Fix | Delete
}
[15531] Fix | Delete
const glyphZero = this.charStrings.get(0);
[15532] Fix | Delete
this.charStrings.add(glyphZero);
[15533] Fix | Delete
if (this.isCIDFont) {
[15534] Fix | Delete
this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
[15535] Fix | Delete
}
[15536] Fix | Delete
}
[15537] Fix | Delete
hasGlyphId(id) {
[15538] Fix | Delete
if (id < 0 || id >= this.charStrings.count) {
[15539] Fix | Delete
return false;
[15540] Fix | Delete
}
[15541] Fix | Delete
const glyph = this.charStrings.get(id);
[15542] Fix | Delete
return glyph.length > 0;
[15543] Fix | Delete
}
[15544] Fix | Delete
}
[15545] Fix | Delete
class CFFHeader {
[15546] Fix | Delete
constructor(major, minor, hdrSize, offSize) {
[15547] Fix | Delete
this.major = major;
[15548] Fix | Delete
this.minor = minor;
[15549] Fix | Delete
this.hdrSize = hdrSize;
[15550] Fix | Delete
this.offSize = offSize;
[15551] Fix | Delete
}
[15552] Fix | Delete
}
[15553] Fix | Delete
class CFFStrings {
[15554] Fix | Delete
constructor() {
[15555] Fix | Delete
this.strings = [];
[15556] Fix | Delete
}
[15557] Fix | Delete
get(index) {
[15558] Fix | Delete
if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
[15559] Fix | Delete
return CFFStandardStrings[index];
[15560] Fix | Delete
}
[15561] Fix | Delete
if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
[15562] Fix | Delete
return this.strings[index - NUM_STANDARD_CFF_STRINGS];
[15563] Fix | Delete
}
[15564] Fix | Delete
return CFFStandardStrings[0];
[15565] Fix | Delete
}
[15566] Fix | Delete
getSID(str) {
[15567] Fix | Delete
let index = CFFStandardStrings.indexOf(str);
[15568] Fix | Delete
if (index !== -1) {
[15569] Fix | Delete
return index;
[15570] Fix | Delete
}
[15571] Fix | Delete
index = this.strings.indexOf(str);
[15572] Fix | Delete
if (index !== -1) {
[15573] Fix | Delete
return index + NUM_STANDARD_CFF_STRINGS;
[15574] Fix | Delete
}
[15575] Fix | Delete
return -1;
[15576] Fix | Delete
}
[15577] Fix | Delete
add(value) {
[15578] Fix | Delete
this.strings.push(value);
[15579] Fix | Delete
}
[15580] Fix | Delete
get count() {
[15581] Fix | Delete
return this.strings.length;
[15582] Fix | Delete
}
[15583] Fix | Delete
}
[15584] Fix | Delete
class CFFIndex {
[15585] Fix | Delete
constructor() {
[15586] Fix | Delete
this.objects = [];
[15587] Fix | Delete
this.length = 0;
[15588] Fix | Delete
}
[15589] Fix | Delete
add(data) {
[15590] Fix | Delete
this.length += data.length;
[15591] Fix | Delete
this.objects.push(data);
[15592] Fix | Delete
}
[15593] Fix | Delete
set(index, data) {
[15594] Fix | Delete
this.length += data.length - this.objects[index].length;
[15595] Fix | Delete
this.objects[index] = data;
[15596] Fix | Delete
}
[15597] Fix | Delete
get(index) {
[15598] Fix | Delete
return this.objects[index];
[15599] Fix | Delete
}
[15600] Fix | Delete
get count() {
[15601] Fix | Delete
return this.objects.length;
[15602] Fix | Delete
}
[15603] Fix | Delete
}
[15604] Fix | Delete
class CFFDict {
[15605] Fix | Delete
constructor(tables, strings) {
[15606] Fix | Delete
this.keyToNameMap = tables.keyToNameMap;
[15607] Fix | Delete
this.nameToKeyMap = tables.nameToKeyMap;
[15608] Fix | Delete
this.defaults = tables.defaults;
[15609] Fix | Delete
this.types = tables.types;
[15610] Fix | Delete
this.opcodes = tables.opcodes;
[15611] Fix | Delete
this.order = tables.order;
[15612] Fix | Delete
this.strings = strings;
[15613] Fix | Delete
this.values = Object.create(null);
[15614] Fix | Delete
}
[15615] Fix | Delete
setByKey(key, value) {
[15616] Fix | Delete
if (!(key in this.keyToNameMap)) {
[15617] Fix | Delete
return false;
[15618] Fix | Delete
}
[15619] Fix | Delete
if (value.length === 0) {
[15620] Fix | Delete
return true;
[15621] Fix | Delete
}
[15622] Fix | Delete
for (const val of value) {
[15623] Fix | Delete
if (isNaN(val)) {
[15624] Fix | Delete
warn(`Invalid CFFDict value: "${value}" for key "${key}".`);
[15625] Fix | Delete
return true;
[15626] Fix | Delete
}
[15627] Fix | Delete
}
[15628] Fix | Delete
const type = this.types[key];
[15629] Fix | Delete
if (type === "num" || type === "sid" || type === "offset") {
[15630] Fix | Delete
value = value[0];
[15631] Fix | Delete
}
[15632] Fix | Delete
this.values[key] = value;
[15633] Fix | Delete
return true;
[15634] Fix | Delete
}
[15635] Fix | Delete
setByName(name, value) {
[15636] Fix | Delete
if (!(name in this.nameToKeyMap)) {
[15637] Fix | Delete
throw new FormatError(`Invalid dictionary name "${name}"`);
[15638] Fix | Delete
}
[15639] Fix | Delete
this.values[this.nameToKeyMap[name]] = value;
[15640] Fix | Delete
}
[15641] Fix | Delete
hasName(name) {
[15642] Fix | Delete
return this.nameToKeyMap[name] in this.values;
[15643] Fix | Delete
}
[15644] Fix | Delete
getByName(name) {
[15645] Fix | Delete
if (!(name in this.nameToKeyMap)) {
[15646] Fix | Delete
throw new FormatError(`Invalid dictionary name ${name}"`);
[15647] Fix | Delete
}
[15648] Fix | Delete
const key = this.nameToKeyMap[name];
[15649] Fix | Delete
if (!(key in this.values)) {
[15650] Fix | Delete
return this.defaults[key];
[15651] Fix | Delete
}
[15652] Fix | Delete
return this.values[key];
[15653] Fix | Delete
}
[15654] Fix | Delete
removeByName(name) {
[15655] Fix | Delete
delete this.values[this.nameToKeyMap[name]];
[15656] Fix | Delete
}
[15657] Fix | Delete
static createTables(layout) {
[15658] Fix | Delete
const tables = {
[15659] Fix | Delete
keyToNameMap: {},
[15660] Fix | Delete
nameToKeyMap: {},
[15661] Fix | Delete
defaults: {},
[15662] Fix | Delete
types: {},
[15663] Fix | Delete
opcodes: {},
[15664] Fix | Delete
order: []
[15665] Fix | Delete
};
[15666] Fix | Delete
for (const entry of layout) {
[15667] Fix | Delete
const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
[15668] Fix | Delete
tables.keyToNameMap[key] = entry[1];
[15669] Fix | Delete
tables.nameToKeyMap[entry[1]] = key;
[15670] Fix | Delete
tables.types[key] = entry[2];
[15671] Fix | Delete
tables.defaults[key] = entry[3];
[15672] Fix | Delete
tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];
[15673] Fix | Delete
tables.order.push(key);
[15674] Fix | Delete
}
[15675] Fix | Delete
return tables;
[15676] Fix | Delete
}
[15677] Fix | Delete
}
[15678] Fix | Delete
const CFFTopDictLayout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
[15679] Fix | Delete
class CFFTopDict extends CFFDict {
[15680] Fix | Delete
static get tables() {
[15681] Fix | Delete
return shadow(this, "tables", this.createTables(CFFTopDictLayout));
[15682] Fix | Delete
}
[15683] Fix | Delete
constructor(strings) {
[15684] Fix | Delete
super(CFFTopDict.tables, strings);
[15685] Fix | Delete
this.privateDict = null;
[15686] Fix | Delete
}
[15687] Fix | Delete
}
[15688] Fix | Delete
const CFFPrivateDictLayout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
[15689] Fix | Delete
class CFFPrivateDict extends CFFDict {
[15690] Fix | Delete
static get tables() {
[15691] Fix | Delete
return shadow(this, "tables", this.createTables(CFFPrivateDictLayout));
[15692] Fix | Delete
}
[15693] Fix | Delete
constructor(strings) {
[15694] Fix | Delete
super(CFFPrivateDict.tables, strings);
[15695] Fix | Delete
this.subrsIndex = null;
[15696] Fix | Delete
}
[15697] Fix | Delete
}
[15698] Fix | Delete
const CFFCharsetPredefinedTypes = {
[15699] Fix | Delete
ISO_ADOBE: 0,
[15700] Fix | Delete
EXPERT: 1,
[15701] Fix | Delete
EXPERT_SUBSET: 2
[15702] Fix | Delete
};
[15703] Fix | Delete
class CFFCharset {
[15704] Fix | Delete
constructor(predefined, format, charset, raw) {
[15705] Fix | Delete
this.predefined = predefined;
[15706] Fix | Delete
this.format = format;
[15707] Fix | Delete
this.charset = charset;
[15708] Fix | Delete
this.raw = raw;
[15709] Fix | Delete
}
[15710] Fix | Delete
}
[15711] Fix | Delete
class CFFEncoding {
[15712] Fix | Delete
constructor(predefined, format, encoding, raw) {
[15713] Fix | Delete
this.predefined = predefined;
[15714] Fix | Delete
this.format = format;
[15715] Fix | Delete
this.encoding = encoding;
[15716] Fix | Delete
this.raw = raw;
[15717] Fix | Delete
}
[15718] Fix | Delete
}
[15719] Fix | Delete
class CFFFDSelect {
[15720] Fix | Delete
constructor(format, fdSelect) {
[15721] Fix | Delete
this.format = format;
[15722] Fix | Delete
this.fdSelect = fdSelect;
[15723] Fix | Delete
}
[15724] Fix | Delete
getFDIndex(glyphIndex) {
[15725] Fix | Delete
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
[15726] Fix | Delete
return -1;
[15727] Fix | Delete
}
[15728] Fix | Delete
return this.fdSelect[glyphIndex];
[15729] Fix | Delete
}
[15730] Fix | Delete
}
[15731] Fix | Delete
class CFFOffsetTracker {
[15732] Fix | Delete
constructor() {
[15733] Fix | Delete
this.offsets = Object.create(null);
[15734] Fix | Delete
}
[15735] Fix | Delete
isTracking(key) {
[15736] Fix | Delete
return key in this.offsets;
[15737] Fix | Delete
}
[15738] Fix | Delete
track(key, location) {
[15739] Fix | Delete
if (key in this.offsets) {
[15740] Fix | Delete
throw new FormatError(`Already tracking location of ${key}`);
[15741] Fix | Delete
}
[15742] Fix | Delete
this.offsets[key] = location;
[15743] Fix | Delete
}
[15744] Fix | Delete
offset(value) {
[15745] Fix | Delete
for (const key in this.offsets) {
[15746] Fix | Delete
this.offsets[key] += value;
[15747] Fix | Delete
}
[15748] Fix | Delete
}
[15749] Fix | Delete
setEntryLocation(key, values, output) {
[15750] Fix | Delete
if (!(key in this.offsets)) {
[15751] Fix | Delete
throw new FormatError(`Not tracking location of ${key}`);
[15752] Fix | Delete
}
[15753] Fix | Delete
const data = output.data;
[15754] Fix | Delete
const dataOffset = this.offsets[key];
[15755] Fix | Delete
const size = 5;
[15756] Fix | Delete
for (let i = 0, ii = values.length; i < ii; ++i) {
[15757] Fix | Delete
const offset0 = i * size + dataOffset;
[15758] Fix | Delete
const offset1 = offset0 + 1;
[15759] Fix | Delete
const offset2 = offset0 + 2;
[15760] Fix | Delete
const offset3 = offset0 + 3;
[15761] Fix | Delete
const offset4 = offset0 + 4;
[15762] Fix | Delete
if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
[15763] Fix | Delete
throw new FormatError("writing to an offset that is not empty");
[15764] Fix | Delete
}
[15765] Fix | Delete
const value = values[i];
[15766] Fix | Delete
data[offset0] = 0x1d;
[15767] Fix | Delete
data[offset1] = value >> 24 & 0xff;
[15768] Fix | Delete
data[offset2] = value >> 16 & 0xff;
[15769] Fix | Delete
data[offset3] = value >> 8 & 0xff;
[15770] Fix | Delete
data[offset4] = value & 0xff;
[15771] Fix | Delete
}
[15772] Fix | Delete
}
[15773] Fix | Delete
}
[15774] Fix | Delete
class CFFCompiler {
[15775] Fix | Delete
constructor(cff) {
[15776] Fix | Delete
this.cff = cff;
[15777] Fix | Delete
}
[15778] Fix | Delete
compile() {
[15779] Fix | Delete
const cff = this.cff;
[15780] Fix | Delete
const output = {
[15781] Fix | Delete
data: [],
[15782] Fix | Delete
length: 0,
[15783] Fix | Delete
add(data) {
[15784] Fix | Delete
try {
[15785] Fix | Delete
this.data.push(...data);
[15786] Fix | Delete
} catch {
[15787] Fix | Delete
this.data = this.data.concat(data);
[15788] Fix | Delete
}
[15789] Fix | Delete
this.length = this.data.length;
[15790] Fix | Delete
}
[15791] Fix | Delete
};
[15792] Fix | Delete
const header = this.compileHeader(cff.header);
[15793] Fix | Delete
output.add(header);
[15794] Fix | Delete
const nameIndex = this.compileNameIndex(cff.names);
[15795] Fix | Delete
output.add(nameIndex);
[15796] Fix | Delete
if (cff.isCIDFont) {
[15797] Fix | Delete
if (cff.topDict.hasName("FontMatrix")) {
[15798] Fix | Delete
const base = cff.topDict.getByName("FontMatrix");
[15799] Fix | Delete
cff.topDict.removeByName("FontMatrix");
[15800] Fix | Delete
for (const subDict of cff.fdArray) {
[15801] Fix | Delete
let matrix = base.slice(0);
[15802] Fix | Delete
if (subDict.hasName("FontMatrix")) {
[15803] Fix | Delete
matrix = Util.transform(matrix, subDict.getByName("FontMatrix"));
[15804] Fix | Delete
}
[15805] Fix | Delete
subDict.setByName("FontMatrix", matrix);
[15806] Fix | Delete
}
[15807] Fix | Delete
}
[15808] Fix | Delete
}
[15809] Fix | Delete
const xuid = cff.topDict.getByName("XUID");
[15810] Fix | Delete
if (xuid?.length > 16) {
[15811] Fix | Delete
cff.topDict.removeByName("XUID");
[15812] Fix | Delete
}
[15813] Fix | Delete
cff.topDict.setByName("charset", 0);
[15814] Fix | Delete
let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
[15815] Fix | Delete
output.add(compiled.output);
[15816] Fix | Delete
const topDictTracker = compiled.trackers[0];
[15817] Fix | Delete
const stringIndex = this.compileStringIndex(cff.strings.strings);
[15818] Fix | Delete
output.add(stringIndex);
[15819] Fix | Delete
const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
[15820] Fix | Delete
output.add(globalSubrIndex);
[15821] Fix | Delete
if (cff.encoding && cff.topDict.hasName("Encoding")) {
[15822] Fix | Delete
if (cff.encoding.predefined) {
[15823] Fix | Delete
topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
[15824] Fix | Delete
} else {
[15825] Fix | Delete
const encoding = this.compileEncoding(cff.encoding);
[15826] Fix | Delete
topDictTracker.setEntryLocation("Encoding", [output.length], output);
[15827] Fix | Delete
output.add(encoding);
[15828] Fix | Delete
}
[15829] Fix | Delete
}
[15830] Fix | Delete
const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
[15831] Fix | Delete
topDictTracker.setEntryLocation("charset", [output.length], output);
[15832] Fix | Delete
output.add(charset);
[15833] Fix | Delete
const charStrings = this.compileCharStrings(cff.charStrings);
[15834] Fix | Delete
topDictTracker.setEntryLocation("CharStrings", [output.length], output);
[15835] Fix | Delete
output.add(charStrings);
[15836] Fix | Delete
if (cff.isCIDFont) {
[15837] Fix | Delete
topDictTracker.setEntryLocation("FDSelect", [output.length], output);
[15838] Fix | Delete
const fdSelect = this.compileFDSelect(cff.fdSelect);
[15839] Fix | Delete
output.add(fdSelect);
[15840] Fix | Delete
compiled = this.compileTopDicts(cff.fdArray, output.length, true);
[15841] Fix | Delete
topDictTracker.setEntryLocation("FDArray", [output.length], output);
[15842] Fix | Delete
output.add(compiled.output);
[15843] Fix | Delete
const fontDictTrackers = compiled.trackers;
[15844] Fix | Delete
this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
[15845] Fix | Delete
}
[15846] Fix | Delete
this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
[15847] Fix | Delete
output.add([0]);
[15848] Fix | Delete
return output.data;
[15849] Fix | Delete
}
[15850] Fix | Delete
encodeNumber(value) {
[15851] Fix | Delete
if (Number.isInteger(value)) {
[15852] Fix | Delete
return this.encodeInteger(value);
[15853] Fix | Delete
}
[15854] Fix | Delete
return this.encodeFloat(value);
[15855] Fix | Delete
}
[15856] Fix | Delete
static get EncodeFloatRegExp() {
[15857] Fix | Delete
return shadow(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/);
[15858] Fix | Delete
}
[15859] Fix | Delete
encodeFloat(num) {
[15860] Fix | Delete
let value = num.toString();
[15861] Fix | Delete
const m = CFFCompiler.EncodeFloatRegExp.exec(value);
[15862] Fix | Delete
if (m) {
[15863] Fix | Delete
const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
[15864] Fix | Delete
value = (Math.round(num * epsilon) / epsilon).toString();
[15865] Fix | Delete
}
[15866] Fix | Delete
let nibbles = "";
[15867] Fix | Delete
let i, ii;
[15868] Fix | Delete
for (i = 0, ii = value.length; i < ii; ++i) {
[15869] Fix | Delete
const a = value[i];
[15870] Fix | Delete
if (a === "e") {
[15871] Fix | Delete
nibbles += value[++i] === "-" ? "c" : "b";
[15872] Fix | Delete
} else if (a === ".") {
[15873] Fix | Delete
nibbles += "a";
[15874] Fix | Delete
} else if (a === "-") {
[15875] Fix | Delete
nibbles += "e";
[15876] Fix | Delete
} else {
[15877] Fix | Delete
nibbles += a;
[15878] Fix | Delete
}
[15879] Fix | Delete
}
[15880] Fix | Delete
nibbles += nibbles.length & 1 ? "f" : "ff";
[15881] Fix | Delete
const out = [30];
[15882] Fix | Delete
for (i = 0, ii = nibbles.length; i < ii; i += 2) {
[15883] Fix | Delete
out.push(parseInt(nibbles.substring(i, i + 2), 16));
[15884] Fix | Delete
}
[15885] Fix | Delete
return out;
[15886] Fix | Delete
}
[15887] Fix | Delete
encodeInteger(value) {
[15888] Fix | Delete
let code;
[15889] Fix | Delete
if (value >= -107 && value <= 107) {
[15890] Fix | Delete
code = [value + 139];
[15891] Fix | Delete
} else if (value >= 108 && value <= 1131) {
[15892] Fix | Delete
value -= 108;
[15893] Fix | Delete
code = [(value >> 8) + 247, value & 0xff];
[15894] Fix | Delete
} else if (value >= -1131 && value <= -108) {
[15895] Fix | Delete
value = -value - 108;
[15896] Fix | Delete
code = [(value >> 8) + 251, value & 0xff];
[15897] Fix | Delete
} else if (value >= -32768 && value <= 32767) {
[15898] Fix | Delete
code = [0x1c, value >> 8 & 0xff, value & 0xff];
[15899] Fix | Delete
} else {
[15900] Fix | Delete
code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
[15901] Fix | Delete
}
[15902] Fix | Delete
return code;
[15903] Fix | Delete
}
[15904] Fix | Delete
compileHeader(header) {
[15905] Fix | Delete
return [header.major, header.minor, 4, header.offSize];
[15906] Fix | Delete
}
[15907] Fix | Delete
compileNameIndex(names) {
[15908] Fix | Delete
const nameIndex = new CFFIndex();
[15909] Fix | Delete
for (const name of names) {
[15910] Fix | Delete
const length = Math.min(name.length, 127);
[15911] Fix | Delete
let sanitizedName = new Array(length);
[15912] Fix | Delete
for (let j = 0; j < length; j++) {
[15913] Fix | Delete
let char = name[j];
[15914] Fix | Delete
if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
[15915] Fix | Delete
char = "_";
[15916] Fix | Delete
}
[15917] Fix | Delete
sanitizedName[j] = char;
[15918] Fix | Delete
}
[15919] Fix | Delete
sanitizedName = sanitizedName.join("");
[15920] Fix | Delete
if (sanitizedName === "") {
[15921] Fix | Delete
sanitizedName = "Bad_Font_Name";
[15922] Fix | Delete
}
[15923] Fix | Delete
nameIndex.add(stringToBytes(sanitizedName));
[15924] Fix | Delete
}
[15925] Fix | Delete
return this.compileIndex(nameIndex);
[15926] Fix | Delete
}
[15927] Fix | Delete
compileTopDicts(dicts, length, removeCidKeys) {
[15928] Fix | Delete
const fontDictTrackers = [];
[15929] Fix | Delete
let fdArrayIndex = new CFFIndex();
[15930] Fix | Delete
for (const fontDict of dicts) {
[15931] Fix | Delete
if (removeCidKeys) {
[15932] Fix | Delete
fontDict.removeByName("CIDFontVersion");
[15933] Fix | Delete
fontDict.removeByName("CIDFontRevision");
[15934] Fix | Delete
fontDict.removeByName("CIDFontType");
[15935] Fix | Delete
fontDict.removeByName("CIDCount");
[15936] Fix | Delete
fontDict.removeByName("UIDBase");
[15937] Fix | Delete
}
[15938] Fix | Delete
const fontDictTracker = new CFFOffsetTracker();
[15939] Fix | Delete
const fontDictData = this.compileDict(fontDict, fontDictTracker);
[15940] Fix | Delete
fontDictTrackers.push(fontDictTracker);
[15941] Fix | Delete
fdArrayIndex.add(fontDictData);
[15942] Fix | Delete
fontDictTracker.offset(length);
[15943] Fix | Delete
}
[15944] Fix | Delete
fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
[15945] Fix | Delete
return {
[15946] Fix | Delete
trackers: fontDictTrackers,
[15947] Fix | Delete
output: fdArrayIndex
[15948] Fix | Delete
};
[15949] Fix | Delete
}
[15950] Fix | Delete
compilePrivateDicts(dicts, trackers, output) {
[15951] Fix | Delete
for (let i = 0, ii = dicts.length; i < ii; ++i) {
[15952] Fix | Delete
const fontDict = dicts[i];
[15953] Fix | Delete
const privateDict = fontDict.privateDict;
[15954] Fix | Delete
if (!privateDict || !fontDict.hasName("Private")) {
[15955] Fix | Delete
throw new FormatError("There must be a private dictionary.");
[15956] Fix | Delete
}
[15957] Fix | Delete
const privateDictTracker = new CFFOffsetTracker();
[15958] Fix | Delete
const privateDictData = this.compileDict(privateDict, privateDictTracker);
[15959] Fix | Delete
let outputLength = output.length;
[15960] Fix | Delete
privateDictTracker.offset(outputLength);
[15961] Fix | Delete
if (!privateDictData.length) {
[15962] Fix | Delete
outputLength = 0;
[15963] Fix | Delete
}
[15964] Fix | Delete
trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
[15965] Fix | Delete
output.add(privateDictData);
[15966] Fix | Delete
if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
[15967] Fix | Delete
const subrs = this.compileIndex(privateDict.subrsIndex);
[15968] Fix | Delete
privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
[15969] Fix | Delete
output.add(subrs);
[15970] Fix | Delete
}
[15971] Fix | Delete
}
[15972] Fix | Delete
}
[15973] Fix | Delete
compileDict(dict, offsetTracker) {
[15974] Fix | Delete
const out = [];
[15975] Fix | Delete
for (const key of dict.order) {
[15976] Fix | Delete
if (!(key in dict.values)) {
[15977] Fix | Delete
continue;
[15978] Fix | Delete
}
[15979] Fix | Delete
let values = dict.values[key];
[15980] Fix | Delete
let types = dict.types[key];
[15981] Fix | Delete
if (!Array.isArray(types)) {
[15982] Fix | Delete
types = [types];
[15983] Fix | Delete
}
[15984] Fix | Delete
if (!Array.isArray(values)) {
[15985] Fix | Delete
values = [values];
[15986] Fix | Delete
}
[15987] Fix | Delete
if (values.length === 0) {
[15988] Fix | Delete
continue;
[15989] Fix | Delete
}
[15990] Fix | Delete
for (let j = 0, jj = types.length; j < jj; ++j) {
[15991] Fix | Delete
const type = types[j];
[15992] Fix | Delete
const value = values[j];
[15993] Fix | Delete
switch (type) {
[15994] Fix | Delete
case "num":
[15995] Fix | Delete
case "sid":
[15996] Fix | Delete
out.push(...this.encodeNumber(value));
[15997] Fix | Delete
break;
[15998] Fix | Delete
case "offset":
[15999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function