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/wp-conte.../plugins/embedpre.../assets/pdf/build
File: script.js
[9500] Fix | Delete
[9501] Fix | Delete
[9502] Fix | Delete
[9503] Fix | Delete
[9504] Fix | Delete
[9505] Fix | Delete
const SerializableEmpty = Object.freeze({
[9506] Fix | Delete
map: null,
[9507] Fix | Delete
hash: "",
[9508] Fix | Delete
transfer: undefined
[9509] Fix | Delete
});
[9510] Fix | Delete
class AnnotationStorage {
[9511] Fix | Delete
#modified = false;
[9512] Fix | Delete
#storage = new Map();
[9513] Fix | Delete
constructor() {
[9514] Fix | Delete
this.onSetModified = null;
[9515] Fix | Delete
this.onResetModified = null;
[9516] Fix | Delete
this.onAnnotationEditor = null;
[9517] Fix | Delete
}
[9518] Fix | Delete
getValue(key, defaultValue) {
[9519] Fix | Delete
const value = this.#storage.get(key);
[9520] Fix | Delete
if (value === undefined) {
[9521] Fix | Delete
return defaultValue;
[9522] Fix | Delete
}
[9523] Fix | Delete
return Object.assign(defaultValue, value);
[9524] Fix | Delete
}
[9525] Fix | Delete
getRawValue(key) {
[9526] Fix | Delete
return this.#storage.get(key);
[9527] Fix | Delete
}
[9528] Fix | Delete
remove(key) {
[9529] Fix | Delete
this.#storage.delete(key);
[9530] Fix | Delete
if (this.#storage.size === 0) {
[9531] Fix | Delete
this.resetModified();
[9532] Fix | Delete
}
[9533] Fix | Delete
if (typeof this.onAnnotationEditor === "function") {
[9534] Fix | Delete
for (const value of this.#storage.values()) {
[9535] Fix | Delete
if (value instanceof AnnotationEditor) {
[9536] Fix | Delete
return;
[9537] Fix | Delete
}
[9538] Fix | Delete
}
[9539] Fix | Delete
this.onAnnotationEditor(null);
[9540] Fix | Delete
}
[9541] Fix | Delete
}
[9542] Fix | Delete
setValue(key, value) {
[9543] Fix | Delete
const obj = this.#storage.get(key);
[9544] Fix | Delete
let modified = false;
[9545] Fix | Delete
if (obj !== undefined) {
[9546] Fix | Delete
for (const [entry, val] of Object.entries(value)) {
[9547] Fix | Delete
if (obj[entry] !== val) {
[9548] Fix | Delete
modified = true;
[9549] Fix | Delete
obj[entry] = val;
[9550] Fix | Delete
}
[9551] Fix | Delete
}
[9552] Fix | Delete
} else {
[9553] Fix | Delete
modified = true;
[9554] Fix | Delete
this.#storage.set(key, value);
[9555] Fix | Delete
}
[9556] Fix | Delete
if (modified) {
[9557] Fix | Delete
this.#setModified();
[9558] Fix | Delete
}
[9559] Fix | Delete
if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") {
[9560] Fix | Delete
this.onAnnotationEditor(value.constructor._type);
[9561] Fix | Delete
}
[9562] Fix | Delete
}
[9563] Fix | Delete
has(key) {
[9564] Fix | Delete
return this.#storage.has(key);
[9565] Fix | Delete
}
[9566] Fix | Delete
getAll() {
[9567] Fix | Delete
return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;
[9568] Fix | Delete
}
[9569] Fix | Delete
setAll(obj) {
[9570] Fix | Delete
for (const [key, val] of Object.entries(obj)) {
[9571] Fix | Delete
this.setValue(key, val);
[9572] Fix | Delete
}
[9573] Fix | Delete
}
[9574] Fix | Delete
get size() {
[9575] Fix | Delete
return this.#storage.size;
[9576] Fix | Delete
}
[9577] Fix | Delete
#setModified() {
[9578] Fix | Delete
if (!this.#modified) {
[9579] Fix | Delete
this.#modified = true;
[9580] Fix | Delete
if (typeof this.onSetModified === "function") {
[9581] Fix | Delete
this.onSetModified();
[9582] Fix | Delete
}
[9583] Fix | Delete
}
[9584] Fix | Delete
}
[9585] Fix | Delete
resetModified() {
[9586] Fix | Delete
if (this.#modified) {
[9587] Fix | Delete
this.#modified = false;
[9588] Fix | Delete
if (typeof this.onResetModified === "function") {
[9589] Fix | Delete
this.onResetModified();
[9590] Fix | Delete
}
[9591] Fix | Delete
}
[9592] Fix | Delete
}
[9593] Fix | Delete
get print() {
[9594] Fix | Delete
return new PrintAnnotationStorage(this);
[9595] Fix | Delete
}
[9596] Fix | Delete
get serializable() {
[9597] Fix | Delete
if (this.#storage.size === 0) {
[9598] Fix | Delete
return SerializableEmpty;
[9599] Fix | Delete
}
[9600] Fix | Delete
const map = new Map(),
[9601] Fix | Delete
hash = new MurmurHash3_64(),
[9602] Fix | Delete
transfer = [];
[9603] Fix | Delete
const context = Object.create(null);
[9604] Fix | Delete
let hasBitmap = false;
[9605] Fix | Delete
for (const [key, val] of this.#storage) {
[9606] Fix | Delete
const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val;
[9607] Fix | Delete
if (serialized) {
[9608] Fix | Delete
map.set(key, serialized);
[9609] Fix | Delete
hash.update(`${key}:${JSON.stringify(serialized)}`);
[9610] Fix | Delete
hasBitmap ||= !!serialized.bitmap;
[9611] Fix | Delete
}
[9612] Fix | Delete
}
[9613] Fix | Delete
if (hasBitmap) {
[9614] Fix | Delete
for (const value of map.values()) {
[9615] Fix | Delete
if (value.bitmap) {
[9616] Fix | Delete
transfer.push(value.bitmap);
[9617] Fix | Delete
}
[9618] Fix | Delete
}
[9619] Fix | Delete
}
[9620] Fix | Delete
return map.size > 0 ? {
[9621] Fix | Delete
map,
[9622] Fix | Delete
hash: hash.hexdigest(),
[9623] Fix | Delete
transfer
[9624] Fix | Delete
} : SerializableEmpty;
[9625] Fix | Delete
}
[9626] Fix | Delete
get editorStats() {
[9627] Fix | Delete
let stats = null;
[9628] Fix | Delete
const typeToEditor = new Map();
[9629] Fix | Delete
for (const value of this.#storage.values()) {
[9630] Fix | Delete
if (!(value instanceof AnnotationEditor)) {
[9631] Fix | Delete
continue;
[9632] Fix | Delete
}
[9633] Fix | Delete
const editorStats = value.telemetryFinalData;
[9634] Fix | Delete
if (!editorStats) {
[9635] Fix | Delete
continue;
[9636] Fix | Delete
}
[9637] Fix | Delete
const {
[9638] Fix | Delete
type
[9639] Fix | Delete
} = editorStats;
[9640] Fix | Delete
if (!typeToEditor.has(type)) {
[9641] Fix | Delete
typeToEditor.set(type, Object.getPrototypeOf(value).constructor);
[9642] Fix | Delete
}
[9643] Fix | Delete
stats ||= Object.create(null);
[9644] Fix | Delete
const map = stats[type] ||= new Map();
[9645] Fix | Delete
for (const [key, val] of Object.entries(editorStats)) {
[9646] Fix | Delete
if (key === "type") {
[9647] Fix | Delete
continue;
[9648] Fix | Delete
}
[9649] Fix | Delete
let counters = map.get(key);
[9650] Fix | Delete
if (!counters) {
[9651] Fix | Delete
counters = new Map();
[9652] Fix | Delete
map.set(key, counters);
[9653] Fix | Delete
}
[9654] Fix | Delete
const count = counters.get(val) ?? 0;
[9655] Fix | Delete
counters.set(val, count + 1);
[9656] Fix | Delete
}
[9657] Fix | Delete
}
[9658] Fix | Delete
for (const [type, editor] of typeToEditor) {
[9659] Fix | Delete
stats[type] = editor.computeTelemetryFinalData(stats[type]);
[9660] Fix | Delete
}
[9661] Fix | Delete
return stats;
[9662] Fix | Delete
}
[9663] Fix | Delete
}
[9664] Fix | Delete
class PrintAnnotationStorage extends AnnotationStorage {
[9665] Fix | Delete
#serializable;
[9666] Fix | Delete
constructor(parent) {
[9667] Fix | Delete
super();
[9668] Fix | Delete
const {
[9669] Fix | Delete
map,
[9670] Fix | Delete
hash,
[9671] Fix | Delete
transfer
[9672] Fix | Delete
} = parent.serializable;
[9673] Fix | Delete
const clone = structuredClone(map, transfer ? {
[9674] Fix | Delete
transfer
[9675] Fix | Delete
} : null);
[9676] Fix | Delete
this.#serializable = {
[9677] Fix | Delete
map: clone,
[9678] Fix | Delete
hash,
[9679] Fix | Delete
transfer
[9680] Fix | Delete
};
[9681] Fix | Delete
}
[9682] Fix | Delete
get print() {
[9683] Fix | Delete
unreachable("Should not call PrintAnnotationStorage.print");
[9684] Fix | Delete
}
[9685] Fix | Delete
get serializable() {
[9686] Fix | Delete
return this.#serializable;
[9687] Fix | Delete
}
[9688] Fix | Delete
}
[9689] Fix | Delete
[9690] Fix | Delete
;// CONCATENATED MODULE: ./src/display/font_loader.js
[9691] Fix | Delete
[9692] Fix | Delete
[9693] Fix | Delete
[9694] Fix | Delete
[9695] Fix | Delete
[9696] Fix | Delete
[9697] Fix | Delete
[9698] Fix | Delete
[9699] Fix | Delete
[9700] Fix | Delete
[9701] Fix | Delete
class FontLoader {
[9702] Fix | Delete
#systemFonts = new Set();
[9703] Fix | Delete
constructor({
[9704] Fix | Delete
ownerDocument = globalThis.document,
[9705] Fix | Delete
styleElement = null
[9706] Fix | Delete
}) {
[9707] Fix | Delete
this._document = ownerDocument;
[9708] Fix | Delete
this.nativeFontFaces = new Set();
[9709] Fix | Delete
this.styleElement = null;
[9710] Fix | Delete
this.loadingRequests = [];
[9711] Fix | Delete
this.loadTestFontId = 0;
[9712] Fix | Delete
}
[9713] Fix | Delete
addNativeFontFace(nativeFontFace) {
[9714] Fix | Delete
this.nativeFontFaces.add(nativeFontFace);
[9715] Fix | Delete
this._document.fonts.add(nativeFontFace);
[9716] Fix | Delete
}
[9717] Fix | Delete
removeNativeFontFace(nativeFontFace) {
[9718] Fix | Delete
this.nativeFontFaces.delete(nativeFontFace);
[9719] Fix | Delete
this._document.fonts.delete(nativeFontFace);
[9720] Fix | Delete
}
[9721] Fix | Delete
insertRule(rule) {
[9722] Fix | Delete
if (!this.styleElement) {
[9723] Fix | Delete
this.styleElement = this._document.createElement("style");
[9724] Fix | Delete
this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement);
[9725] Fix | Delete
}
[9726] Fix | Delete
const styleSheet = this.styleElement.sheet;
[9727] Fix | Delete
styleSheet.insertRule(rule, styleSheet.cssRules.length);
[9728] Fix | Delete
}
[9729] Fix | Delete
clear() {
[9730] Fix | Delete
for (const nativeFontFace of this.nativeFontFaces) {
[9731] Fix | Delete
this._document.fonts.delete(nativeFontFace);
[9732] Fix | Delete
}
[9733] Fix | Delete
this.nativeFontFaces.clear();
[9734] Fix | Delete
this.#systemFonts.clear();
[9735] Fix | Delete
if (this.styleElement) {
[9736] Fix | Delete
this.styleElement.remove();
[9737] Fix | Delete
this.styleElement = null;
[9738] Fix | Delete
}
[9739] Fix | Delete
}
[9740] Fix | Delete
async loadSystemFont({
[9741] Fix | Delete
systemFontInfo: info,
[9742] Fix | Delete
_inspectFont
[9743] Fix | Delete
}) {
[9744] Fix | Delete
if (!info || this.#systemFonts.has(info.loadedName)) {
[9745] Fix | Delete
return;
[9746] Fix | Delete
}
[9747] Fix | Delete
assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set.");
[9748] Fix | Delete
if (this.isFontLoadingAPISupported) {
[9749] Fix | Delete
const {
[9750] Fix | Delete
loadedName,
[9751] Fix | Delete
src,
[9752] Fix | Delete
style
[9753] Fix | Delete
} = info;
[9754] Fix | Delete
const fontFace = new FontFace(loadedName, src, style);
[9755] Fix | Delete
this.addNativeFontFace(fontFace);
[9756] Fix | Delete
try {
[9757] Fix | Delete
await fontFace.load();
[9758] Fix | Delete
this.#systemFonts.add(loadedName);
[9759] Fix | Delete
_inspectFont?.(info);
[9760] Fix | Delete
} catch {
[9761] Fix | Delete
warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);
[9762] Fix | Delete
this.removeNativeFontFace(fontFace);
[9763] Fix | Delete
}
[9764] Fix | Delete
return;
[9765] Fix | Delete
}
[9766] Fix | Delete
unreachable("Not implemented: loadSystemFont without the Font Loading API.");
[9767] Fix | Delete
}
[9768] Fix | Delete
async bind(font) {
[9769] Fix | Delete
if (font.attached || font.missingFile && !font.systemFontInfo) {
[9770] Fix | Delete
return;
[9771] Fix | Delete
}
[9772] Fix | Delete
font.attached = true;
[9773] Fix | Delete
if (font.systemFontInfo) {
[9774] Fix | Delete
await this.loadSystemFont(font);
[9775] Fix | Delete
return;
[9776] Fix | Delete
}
[9777] Fix | Delete
if (this.isFontLoadingAPISupported) {
[9778] Fix | Delete
const nativeFontFace = font.createNativeFontFace();
[9779] Fix | Delete
if (nativeFontFace) {
[9780] Fix | Delete
this.addNativeFontFace(nativeFontFace);
[9781] Fix | Delete
try {
[9782] Fix | Delete
await nativeFontFace.loaded;
[9783] Fix | Delete
} catch (ex) {
[9784] Fix | Delete
warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
[9785] Fix | Delete
font.disableFontFace = true;
[9786] Fix | Delete
throw ex;
[9787] Fix | Delete
}
[9788] Fix | Delete
}
[9789] Fix | Delete
return;
[9790] Fix | Delete
}
[9791] Fix | Delete
const rule = font.createFontFaceRule();
[9792] Fix | Delete
if (rule) {
[9793] Fix | Delete
this.insertRule(rule);
[9794] Fix | Delete
if (this.isSyncFontLoadingSupported) {
[9795] Fix | Delete
return;
[9796] Fix | Delete
}
[9797] Fix | Delete
await new Promise(resolve => {
[9798] Fix | Delete
const request = this._queueLoadingCallback(resolve);
[9799] Fix | Delete
this._prepareFontLoadEvent(font, request);
[9800] Fix | Delete
});
[9801] Fix | Delete
}
[9802] Fix | Delete
}
[9803] Fix | Delete
get isFontLoadingAPISupported() {
[9804] Fix | Delete
const hasFonts = !!this._document?.fonts;
[9805] Fix | Delete
return shadow(this, "isFontLoadingAPISupported", hasFonts);
[9806] Fix | Delete
}
[9807] Fix | Delete
get isSyncFontLoadingSupported() {
[9808] Fix | Delete
let supported = false;
[9809] Fix | Delete
if (isNodeJS) {
[9810] Fix | Delete
supported = true;
[9811] Fix | Delete
} else if (typeof navigator !== "undefined" && typeof navigator?.userAgent === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) {
[9812] Fix | Delete
supported = true;
[9813] Fix | Delete
}
[9814] Fix | Delete
return shadow(this, "isSyncFontLoadingSupported", supported);
[9815] Fix | Delete
}
[9816] Fix | Delete
_queueLoadingCallback(callback) {
[9817] Fix | Delete
function completeRequest() {
[9818] Fix | Delete
assert(!request.done, "completeRequest() cannot be called twice.");
[9819] Fix | Delete
request.done = true;
[9820] Fix | Delete
while (loadingRequests.length > 0 && loadingRequests[0].done) {
[9821] Fix | Delete
const otherRequest = loadingRequests.shift();
[9822] Fix | Delete
setTimeout(otherRequest.callback, 0);
[9823] Fix | Delete
}
[9824] Fix | Delete
}
[9825] Fix | Delete
const {
[9826] Fix | Delete
loadingRequests
[9827] Fix | Delete
} = this;
[9828] Fix | Delete
const request = {
[9829] Fix | Delete
done: false,
[9830] Fix | Delete
complete: completeRequest,
[9831] Fix | Delete
callback
[9832] Fix | Delete
};
[9833] Fix | Delete
loadingRequests.push(request);
[9834] Fix | Delete
return request;
[9835] Fix | Delete
}
[9836] Fix | Delete
get _loadTestFont() {
[9837] Fix | Delete
const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
[9838] Fix | Delete
return shadow(this, "_loadTestFont", testFont);
[9839] Fix | Delete
}
[9840] Fix | Delete
_prepareFontLoadEvent(font, request) {
[9841] Fix | Delete
function int32(data, offset) {
[9842] Fix | Delete
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
[9843] Fix | Delete
}
[9844] Fix | Delete
function spliceString(s, offset, remove, insert) {
[9845] Fix | Delete
const chunk1 = s.substring(0, offset);
[9846] Fix | Delete
const chunk2 = s.substring(offset + remove);
[9847] Fix | Delete
return chunk1 + insert + chunk2;
[9848] Fix | Delete
}
[9849] Fix | Delete
let i, ii;
[9850] Fix | Delete
const canvas = this._document.createElement("canvas");
[9851] Fix | Delete
canvas.width = 1;
[9852] Fix | Delete
canvas.height = 1;
[9853] Fix | Delete
const ctx = canvas.getContext("2d");
[9854] Fix | Delete
let called = 0;
[9855] Fix | Delete
function isFontReady(name, callback) {
[9856] Fix | Delete
if (++called > 30) {
[9857] Fix | Delete
warn("Load test font never loaded.");
[9858] Fix | Delete
callback();
[9859] Fix | Delete
return;
[9860] Fix | Delete
}
[9861] Fix | Delete
ctx.font = "30px " + name;
[9862] Fix | Delete
ctx.fillText(".", 0, 20);
[9863] Fix | Delete
const imageData = ctx.getImageData(0, 0, 1, 1);
[9864] Fix | Delete
if (imageData.data[3] > 0) {
[9865] Fix | Delete
callback();
[9866] Fix | Delete
return;
[9867] Fix | Delete
}
[9868] Fix | Delete
setTimeout(isFontReady.bind(null, name, callback));
[9869] Fix | Delete
}
[9870] Fix | Delete
const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
[9871] Fix | Delete
let data = this._loadTestFont;
[9872] Fix | Delete
const COMMENT_OFFSET = 976;
[9873] Fix | Delete
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
[9874] Fix | Delete
const CFF_CHECKSUM_OFFSET = 16;
[9875] Fix | Delete
const XXXX_VALUE = 0x58585858;
[9876] Fix | Delete
let checksum = int32(data, CFF_CHECKSUM_OFFSET);
[9877] Fix | Delete
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
[9878] Fix | Delete
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
[9879] Fix | Delete
}
[9880] Fix | Delete
if (i < loadTestFontId.length) {
[9881] Fix | Delete
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
[9882] Fix | Delete
}
[9883] Fix | Delete
data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));
[9884] Fix | Delete
const url = `url(data:font/opentype;base64,${btoa(data)});`;
[9885] Fix | Delete
const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
[9886] Fix | Delete
this.insertRule(rule);
[9887] Fix | Delete
const div = this._document.createElement("div");
[9888] Fix | Delete
div.style.visibility = "hidden";
[9889] Fix | Delete
div.style.width = div.style.height = "10px";
[9890] Fix | Delete
div.style.position = "absolute";
[9891] Fix | Delete
div.style.top = div.style.left = "0px";
[9892] Fix | Delete
for (const name of [font.loadedName, loadTestFontId]) {
[9893] Fix | Delete
const span = this._document.createElement("span");
[9894] Fix | Delete
span.textContent = "Hi";
[9895] Fix | Delete
span.style.fontFamily = name;
[9896] Fix | Delete
div.append(span);
[9897] Fix | Delete
}
[9898] Fix | Delete
this._document.body.append(div);
[9899] Fix | Delete
isFontReady(loadTestFontId, () => {
[9900] Fix | Delete
div.remove();
[9901] Fix | Delete
request.complete();
[9902] Fix | Delete
});
[9903] Fix | Delete
}
[9904] Fix | Delete
}
[9905] Fix | Delete
class FontFaceObject {
[9906] Fix | Delete
constructor(translatedData, {
[9907] Fix | Delete
disableFontFace = false,
[9908] Fix | Delete
inspectFont = null
[9909] Fix | Delete
}) {
[9910] Fix | Delete
this.compiledGlyphs = Object.create(null);
[9911] Fix | Delete
for (const i in translatedData) {
[9912] Fix | Delete
this[i] = translatedData[i];
[9913] Fix | Delete
}
[9914] Fix | Delete
this.disableFontFace = disableFontFace === true;
[9915] Fix | Delete
this._inspectFont = inspectFont;
[9916] Fix | Delete
}
[9917] Fix | Delete
createNativeFontFace() {
[9918] Fix | Delete
if (!this.data || this.disableFontFace) {
[9919] Fix | Delete
return null;
[9920] Fix | Delete
}
[9921] Fix | Delete
let nativeFontFace;
[9922] Fix | Delete
if (!this.cssFontInfo) {
[9923] Fix | Delete
nativeFontFace = new FontFace(this.loadedName, this.data, {});
[9924] Fix | Delete
} else {
[9925] Fix | Delete
const css = {
[9926] Fix | Delete
weight: this.cssFontInfo.fontWeight
[9927] Fix | Delete
};
[9928] Fix | Delete
if (this.cssFontInfo.italicAngle) {
[9929] Fix | Delete
css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
[9930] Fix | Delete
}
[9931] Fix | Delete
nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
[9932] Fix | Delete
}
[9933] Fix | Delete
this._inspectFont?.(this);
[9934] Fix | Delete
return nativeFontFace;
[9935] Fix | Delete
}
[9936] Fix | Delete
createFontFaceRule() {
[9937] Fix | Delete
if (!this.data || this.disableFontFace) {
[9938] Fix | Delete
return null;
[9939] Fix | Delete
}
[9940] Fix | Delete
const data = bytesToString(this.data);
[9941] Fix | Delete
const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
[9942] Fix | Delete
let rule;
[9943] Fix | Delete
if (!this.cssFontInfo) {
[9944] Fix | Delete
rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
[9945] Fix | Delete
} else {
[9946] Fix | Delete
let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
[9947] Fix | Delete
if (this.cssFontInfo.italicAngle) {
[9948] Fix | Delete
css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
[9949] Fix | Delete
}
[9950] Fix | Delete
rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
[9951] Fix | Delete
}
[9952] Fix | Delete
this._inspectFont?.(this, url);
[9953] Fix | Delete
return rule;
[9954] Fix | Delete
}
[9955] Fix | Delete
getPathGenerator(objs, character) {
[9956] Fix | Delete
if (this.compiledGlyphs[character] !== undefined) {
[9957] Fix | Delete
return this.compiledGlyphs[character];
[9958] Fix | Delete
}
[9959] Fix | Delete
let cmds;
[9960] Fix | Delete
try {
[9961] Fix | Delete
cmds = objs.get(this.loadedName + "_path_" + character);
[9962] Fix | Delete
} catch (ex) {
[9963] Fix | Delete
warn(`getPathGenerator - ignoring character: "${ex}".`);
[9964] Fix | Delete
}
[9965] Fix | Delete
if (!Array.isArray(cmds) || cmds.length === 0) {
[9966] Fix | Delete
return this.compiledGlyphs[character] = function (c, size) {};
[9967] Fix | Delete
}
[9968] Fix | Delete
const commands = [];
[9969] Fix | Delete
for (let i = 0, ii = cmds.length; i < ii;) {
[9970] Fix | Delete
switch (cmds[i++]) {
[9971] Fix | Delete
case FontRenderOps.BEZIER_CURVE_TO:
[9972] Fix | Delete
{
[9973] Fix | Delete
const [a, b, c, d, e, f] = cmds.slice(i, i + 6);
[9974] Fix | Delete
commands.push(ctx => ctx.bezierCurveTo(a, b, c, d, e, f));
[9975] Fix | Delete
i += 6;
[9976] Fix | Delete
}
[9977] Fix | Delete
break;
[9978] Fix | Delete
case FontRenderOps.MOVE_TO:
[9979] Fix | Delete
{
[9980] Fix | Delete
const [a, b] = cmds.slice(i, i + 2);
[9981] Fix | Delete
commands.push(ctx => ctx.moveTo(a, b));
[9982] Fix | Delete
i += 2;
[9983] Fix | Delete
}
[9984] Fix | Delete
break;
[9985] Fix | Delete
case FontRenderOps.LINE_TO:
[9986] Fix | Delete
{
[9987] Fix | Delete
const [a, b] = cmds.slice(i, i + 2);
[9988] Fix | Delete
commands.push(ctx => ctx.lineTo(a, b));
[9989] Fix | Delete
i += 2;
[9990] Fix | Delete
}
[9991] Fix | Delete
break;
[9992] Fix | Delete
case FontRenderOps.QUADRATIC_CURVE_TO:
[9993] Fix | Delete
{
[9994] Fix | Delete
const [a, b, c, d] = cmds.slice(i, i + 4);
[9995] Fix | Delete
commands.push(ctx => ctx.quadraticCurveTo(a, b, c, d));
[9996] Fix | Delete
i += 4;
[9997] Fix | Delete
}
[9998] Fix | Delete
break;
[9999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function