docier-web 0.1.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/editor.d.ts +3 -0
- package/dist/api/editor.d.ts.map +1 -1
- package/dist/api/editor.js +115 -0
- package/dist/api/editor.js.map +1 -1
- package/dist/api/package-images.d.ts +8 -0
- package/dist/api/package-images.d.ts.map +1 -0
- package/dist/api/package-images.js +98 -0
- package/dist/api/package-images.js.map +1 -0
- package/dist/edit/areas/document.d.ts +16 -0
- package/dist/edit/areas/document.d.ts.map +1 -0
- package/dist/edit/areas/document.js +50 -0
- package/dist/edit/areas/document.js.map +1 -0
- package/dist/edit/areas/find.d.ts +21 -0
- package/dist/edit/areas/find.d.ts.map +1 -0
- package/dist/edit/areas/find.js +159 -0
- package/dist/edit/areas/find.js.map +1 -0
- package/dist/edit/areas/index.d.ts +2 -0
- package/dist/edit/areas/index.d.ts.map +1 -1
- package/dist/edit/areas/index.js +5 -0
- package/dist/edit/areas/index.js.map +1 -1
- package/dist/edit/areas/insert.d.ts +5 -0
- package/dist/edit/areas/insert.d.ts.map +1 -1
- package/dist/edit/areas/insert.js +9 -2
- package/dist/edit/areas/insert.js.map +1 -1
- package/dist/edit/areas/unsupported.d.ts.map +1 -1
- package/dist/edit/areas/unsupported.js +0 -20
- package/dist/edit/areas/unsupported.js.map +1 -1
- package/dist/edit/clipboard/html-export.d.ts +1 -0
- package/dist/edit/clipboard/html-export.d.ts.map +1 -1
- package/dist/edit/clipboard/html-export.js +3 -1
- package/dist/edit/clipboard/html-export.js.map +1 -1
- package/dist/edit/clipboard/index.d.ts +1 -1
- package/dist/edit/clipboard/index.d.ts.map +1 -1
- package/dist/edit/clipboard/index.js +1 -1
- package/dist/edit/clipboard/index.js.map +1 -1
- package/dist/edit/image-file.d.ts +26 -0
- package/dist/edit/image-file.d.ts.map +1 -0
- package/dist/edit/image-file.js +94 -0
- package/dist/edit/image-file.js.map +1 -0
- package/dist/edit/input.d.ts.map +1 -1
- package/dist/edit/input.js +30 -3
- package/dist/edit/input.js.map +1 -1
- package/dist/edit/mutation.d.ts +1 -0
- package/dist/edit/mutation.d.ts.map +1 -1
- package/dist/edit/mutation.js +65 -0
- package/dist/edit/mutation.js.map +1 -1
- package/dist/edit/navigation.js +3 -3
- package/dist/edit/navigation.js.map +1 -1
- package/dist/edit/positions.d.ts +2 -0
- package/dist/edit/positions.d.ts.map +1 -1
- package/dist/edit/positions.js +22 -6
- package/dist/edit/positions.js.map +1 -1
- package/dist/edit/session.d.ts.map +1 -1
- package/dist/edit/session.js +18 -1
- package/dist/edit/session.js.map +1 -1
- package/dist/render/document.js +1 -1
- package/dist/render/document.js.map +1 -1
- package/dist/style.css +19 -9
- package/dist/ui/chrome.d.ts.map +1 -1
- package/dist/ui/chrome.js +16 -5
- package/dist/ui/chrome.js.map +1 -1
- package/dist/ui/colour-picker.js +5 -5
- package/dist/ui/controls.d.ts.map +1 -1
- package/dist/ui/controls.js +37 -9
- package/dist/ui/controls.js.map +1 -1
- package/dist/ui/dialog.d.ts +5 -5
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +32 -6
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/find-dialog.d.ts +17 -0
- package/dist/ui/find-dialog.d.ts.map +1 -0
- package/dist/ui/find-dialog.js +94 -0
- package/dist/ui/find-dialog.js.map +1 -0
- package/dist/ui/font-dialog.d.ts +14 -3
- package/dist/ui/font-dialog.d.ts.map +1 -1
- package/dist/ui/font-dialog.js +193 -33
- package/dist/ui/font-dialog.js.map +1 -1
- package/dist/ui/font-family.d.ts +3 -0
- package/dist/ui/font-family.d.ts.map +1 -0
- package/dist/ui/font-family.js +6 -0
- package/dist/ui/font-family.js.map +1 -0
- package/dist/ui/i18n.d.ts.map +1 -1
- package/dist/ui/i18n.js +5 -0
- package/dist/ui/i18n.js.map +1 -1
- package/dist/ui/icons.d.ts.map +1 -1
- package/dist/ui/icons.js +4 -0
- package/dist/ui/icons.js.map +1 -1
- package/dist/ui/image-picker.d.ts +1 -14
- package/dist/ui/image-picker.d.ts.map +1 -1
- package/dist/ui/image-picker.js +2 -53
- package/dist/ui/image-picker.js.map +1 -1
- package/dist/ui/menu-bar.d.ts +6 -0
- package/dist/ui/menu-bar.d.ts.map +1 -1
- package/dist/ui/menu-bar.js +30 -1
- package/dist/ui/menu-bar.js.map +1 -1
- package/dist/ui/menu-model.d.ts +1 -0
- package/dist/ui/menu-model.d.ts.map +1 -1
- package/dist/ui/menu-model.js +26 -33
- package/dist/ui/menu-model.js.map +1 -1
- package/dist/ui/menu.d.ts.map +1 -1
- package/dist/ui/menu.js +4 -0
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/styles.d.ts.map +1 -1
- package/dist/ui/styles.js +16 -6
- package/dist/ui/styles.js.map +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +11 -0
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/types.d.ts +1 -0
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/ui/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/edit/search.d.ts +0 -19
- package/dist/edit/search.d.ts.map +0 -1
- package/dist/edit/search.js +0 -65
- package/dist/edit/search.js.map +0 -1
- package/dist/pdf/fonts/sfnt.d.ts +0 -83
- package/dist/pdf/fonts/sfnt.d.ts.map +0 -1
- package/dist/pdf/fonts/sfnt.js +0 -363
- package/dist/pdf/fonts/sfnt.js.map +0 -1
package/dist/edit/search.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { docPos } from '../layout/index.js';
|
|
2
|
-
import { blockText } from './positions.js';
|
|
3
|
-
export const MAX_MATCHES = 5000;
|
|
4
|
-
const WORD_CHARACTER = /[\p{L}\p{N}_]/u;
|
|
5
|
-
const isWordCharacter = (text, index) => {
|
|
6
|
-
if (index < 0 || index >= text.length)
|
|
7
|
-
return false;
|
|
8
|
-
const character = text.slice(index, index + 1);
|
|
9
|
-
return WORD_CHARACTER.test(character);
|
|
10
|
-
};
|
|
11
|
-
const normalise = (value, matchCase) => matchCase ? value : value.toLocaleLowerCase();
|
|
12
|
-
export const searchResult = (index, query, options = {}) => {
|
|
13
|
-
if (query === '')
|
|
14
|
-
return { matches: [], truncated: false };
|
|
15
|
-
const matchCase = options.matchCase ?? false;
|
|
16
|
-
const wholeWord = options.wholeWord ?? false;
|
|
17
|
-
const needle = normalise(query, matchCase);
|
|
18
|
-
const matches = [];
|
|
19
|
-
let truncated = false;
|
|
20
|
-
for (const span of index.paragraphs) {
|
|
21
|
-
if (truncated)
|
|
22
|
-
break;
|
|
23
|
-
const text = blockText(span);
|
|
24
|
-
if (text === '')
|
|
25
|
-
continue;
|
|
26
|
-
const haystack = normalise(text, matchCase);
|
|
27
|
-
let from = 0;
|
|
28
|
-
for (;;) {
|
|
29
|
-
const at = haystack.indexOf(needle, from);
|
|
30
|
-
if (at < 0)
|
|
31
|
-
break;
|
|
32
|
-
from = at + Math.max(1, needle.length);
|
|
33
|
-
if (wholeWord) {
|
|
34
|
-
if (isWordCharacter(text, at - 1))
|
|
35
|
-
continue;
|
|
36
|
-
if (isWordCharacter(text, at + needle.length))
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
if (matches.length >= MAX_MATCHES) {
|
|
40
|
-
truncated = true;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
const start = docPos(span.start + at);
|
|
44
|
-
matches.push({ start, end: docPos(start + query.length) });
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return { matches, truncated };
|
|
48
|
-
};
|
|
49
|
-
export const matchAt = (matches, pos) => matches.find((match) => match.start <= pos && match.end >= pos);
|
|
50
|
-
export const adjacentMatch = (matches, pos, direction) => {
|
|
51
|
-
const last = matches[matches.length - 1];
|
|
52
|
-
if (last === undefined)
|
|
53
|
-
return undefined;
|
|
54
|
-
if (direction > 0) {
|
|
55
|
-
return matches.find((match) => match.start > pos) ?? matches[0];
|
|
56
|
-
}
|
|
57
|
-
let found;
|
|
58
|
-
for (const match of matches) {
|
|
59
|
-
if (match.end >= pos)
|
|
60
|
-
break;
|
|
61
|
-
found = match;
|
|
62
|
-
}
|
|
63
|
-
return found ?? last;
|
|
64
|
-
};
|
|
65
|
-
//# sourceMappingURL=search.js.map
|
package/dist/edit/search.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/edit/search.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf/fonts/sfnt.d.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
export interface TableRecord {
|
|
2
|
-
readonly tag: string;
|
|
3
|
-
readonly offset: number;
|
|
4
|
-
readonly length: number;
|
|
5
|
-
}
|
|
6
|
-
export interface SfntHead {
|
|
7
|
-
readonly unitsPerEm: number;
|
|
8
|
-
readonly indexToLocFormat: number;
|
|
9
|
-
readonly xMin: number;
|
|
10
|
-
readonly yMin: number;
|
|
11
|
-
readonly xMax: number;
|
|
12
|
-
readonly yMax: number;
|
|
13
|
-
readonly macStyle: number;
|
|
14
|
-
}
|
|
15
|
-
export interface SfntHhea {
|
|
16
|
-
readonly ascender: number;
|
|
17
|
-
readonly descender: number;
|
|
18
|
-
readonly lineGap: number;
|
|
19
|
-
readonly numberOfHMetrics: number;
|
|
20
|
-
}
|
|
21
|
-
export interface SfntOs2 {
|
|
22
|
-
readonly version: number;
|
|
23
|
-
readonly fsType: number;
|
|
24
|
-
readonly weightClass: number;
|
|
25
|
-
readonly typoAscender: number;
|
|
26
|
-
readonly typoDescender: number;
|
|
27
|
-
readonly typoLineGap: number;
|
|
28
|
-
readonly capHeight: number;
|
|
29
|
-
}
|
|
30
|
-
export declare const SFNT_TAG: (bytes: Uint8Array, at: number) => string;
|
|
31
|
-
export declare class Sfnt {
|
|
32
|
-
private readonly view;
|
|
33
|
-
private readonly tables;
|
|
34
|
-
readonly bytes: Uint8Array;
|
|
35
|
-
readonly isCff: boolean;
|
|
36
|
-
constructor(bytes: Uint8Array);
|
|
37
|
-
private require;
|
|
38
|
-
table(tag: string): Uint8Array | undefined;
|
|
39
|
-
has(tag: string): boolean;
|
|
40
|
-
tagNames(): readonly string[];
|
|
41
|
-
private u8;
|
|
42
|
-
private i16;
|
|
43
|
-
private u16;
|
|
44
|
-
private i32;
|
|
45
|
-
private u32;
|
|
46
|
-
get head(): SfntHead;
|
|
47
|
-
get hhea(): SfntHhea;
|
|
48
|
-
get os2(): SfntOs2 | undefined;
|
|
49
|
-
get italicAngle(): number;
|
|
50
|
-
get underline(): {
|
|
51
|
-
readonly position: number;
|
|
52
|
-
readonly thickness: number;
|
|
53
|
-
};
|
|
54
|
-
get strikeout(): {
|
|
55
|
-
readonly position: number;
|
|
56
|
-
readonly size: number;
|
|
57
|
-
} | undefined;
|
|
58
|
-
isMonospaced(): boolean;
|
|
59
|
-
get numGlyphs(): number;
|
|
60
|
-
postScriptName(fallback: string): string;
|
|
61
|
-
private decodeName;
|
|
62
|
-
hasGlyf(): boolean;
|
|
63
|
-
private locaOffset;
|
|
64
|
-
glyphRange(glyph: number): {
|
|
65
|
-
readonly start: number;
|
|
66
|
-
readonly end: number;
|
|
67
|
-
} | undefined;
|
|
68
|
-
glyphByteLength(glyph: number): number;
|
|
69
|
-
private static readonly ARG_1_AND_2_ARE_WORDS;
|
|
70
|
-
private static readonly WE_HAVE_A_SCALE;
|
|
71
|
-
private static readonly MORE_COMPONENTS;
|
|
72
|
-
private static readonly WE_HAVE_AN_X_AND_Y_SCALE;
|
|
73
|
-
private static readonly WE_HAVE_A_TWO_BY_TWO;
|
|
74
|
-
compositeGlyphs(glyph: number): readonly number[];
|
|
75
|
-
advanceWidths(): readonly number[];
|
|
76
|
-
private cmapFormat;
|
|
77
|
-
private bestCmap;
|
|
78
|
-
glyphFor(codePoint: number): number;
|
|
79
|
-
private glyphFromFormat6;
|
|
80
|
-
private glyphFromFormat4;
|
|
81
|
-
private glyphFromFormat12;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=sfnt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sfnt.d.ts","sourceRoot":"","sources":["../../../src/pdf/fonts/sfnt.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf/fonts/sfnt.js
DELETED
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
import { PdfError } from '../errors.js';
|
|
2
|
-
export const SFNT_TAG = (bytes, at) => {
|
|
3
|
-
let tag = '';
|
|
4
|
-
for (let index = 0; index < 4; index += 1)
|
|
5
|
-
tag += String.fromCharCode(bytes[at + index] ?? 0);
|
|
6
|
-
return tag;
|
|
7
|
-
};
|
|
8
|
-
const sanitizeName = (value) => value.replace(/[^A-Za-z0-9._+-]/g, '').slice(0, 63);
|
|
9
|
-
const unreadable = (detail) => new PdfError(`the font file could not be parsed: ${detail}`, {
|
|
10
|
-
code: 'PDF_FONT_UNREADABLE',
|
|
11
|
-
detail,
|
|
12
|
-
});
|
|
13
|
-
export class Sfnt {
|
|
14
|
-
view;
|
|
15
|
-
tables;
|
|
16
|
-
bytes;
|
|
17
|
-
isCff;
|
|
18
|
-
constructor(bytes) {
|
|
19
|
-
this.bytes = bytes;
|
|
20
|
-
this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
21
|
-
this.tables = new Map();
|
|
22
|
-
if (bytes.byteLength < 12)
|
|
23
|
-
throw unreadable('the file is shorter than an sfnt header');
|
|
24
|
-
const flavour = this.view.getUint32(0, false);
|
|
25
|
-
this.isCff = flavour === 0x4f54544f;
|
|
26
|
-
if (!this.isCff && flavour !== 0x00010000 && flavour !== 0x74727565) {
|
|
27
|
-
throw unreadable('the file has no sfnt version');
|
|
28
|
-
}
|
|
29
|
-
const count = this.view.getUint16(4, false);
|
|
30
|
-
if (12 + count * 16 > bytes.byteLength)
|
|
31
|
-
throw unreadable('the table directory runs past the file');
|
|
32
|
-
for (let index = 0; index < count; index += 1) {
|
|
33
|
-
const at = 12 + index * 16;
|
|
34
|
-
const tag = SFNT_TAG(bytes, at);
|
|
35
|
-
const offset = this.view.getUint32(at + 8, false);
|
|
36
|
-
const length = this.view.getUint32(at + 12, false);
|
|
37
|
-
if (offset + length > bytes.byteLength)
|
|
38
|
-
throw unreadable(`table "${tag}" runs past the file`);
|
|
39
|
-
this.tables.set(tag, { tag, offset, length });
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
require(tag) {
|
|
43
|
-
const record = this.tables.get(tag);
|
|
44
|
-
if (record === undefined)
|
|
45
|
-
throw unreadable(`table "${tag}" is missing`);
|
|
46
|
-
return record;
|
|
47
|
-
}
|
|
48
|
-
table(tag) {
|
|
49
|
-
const record = this.tables.get(tag);
|
|
50
|
-
if (record === undefined)
|
|
51
|
-
return undefined;
|
|
52
|
-
return this.bytes.subarray(record.offset, record.offset + record.length);
|
|
53
|
-
}
|
|
54
|
-
has(tag) {
|
|
55
|
-
return this.tables.has(tag);
|
|
56
|
-
}
|
|
57
|
-
tagNames() {
|
|
58
|
-
return [...this.tables.keys()];
|
|
59
|
-
}
|
|
60
|
-
u8(at) {
|
|
61
|
-
return this.view.getUint8(at);
|
|
62
|
-
}
|
|
63
|
-
i16(at) {
|
|
64
|
-
return this.view.getInt16(at, false);
|
|
65
|
-
}
|
|
66
|
-
u16(at) {
|
|
67
|
-
return this.view.getUint16(at, false);
|
|
68
|
-
}
|
|
69
|
-
i32(at) {
|
|
70
|
-
return this.view.getInt32(at, false);
|
|
71
|
-
}
|
|
72
|
-
u32(at) {
|
|
73
|
-
return this.view.getUint32(at, false);
|
|
74
|
-
}
|
|
75
|
-
get head() {
|
|
76
|
-
const at = this.require('head').offset;
|
|
77
|
-
return {
|
|
78
|
-
unitsPerEm: this.u16(at + 18),
|
|
79
|
-
indexToLocFormat: this.i16(at + 50),
|
|
80
|
-
xMin: this.i16(at + 36),
|
|
81
|
-
yMin: this.i16(at + 38),
|
|
82
|
-
xMax: this.i16(at + 40),
|
|
83
|
-
yMax: this.i16(at + 42),
|
|
84
|
-
macStyle: this.u16(at + 44),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
get hhea() {
|
|
88
|
-
const at = this.require('hhea').offset;
|
|
89
|
-
return {
|
|
90
|
-
ascender: this.i16(at + 4),
|
|
91
|
-
descender: this.i16(at + 6),
|
|
92
|
-
lineGap: this.i16(at + 8),
|
|
93
|
-
numberOfHMetrics: this.u16(at + 34),
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
get os2() {
|
|
97
|
-
const record = this.tables.get('OS/2');
|
|
98
|
-
if (record === undefined)
|
|
99
|
-
return undefined;
|
|
100
|
-
const at = record.offset;
|
|
101
|
-
const version = this.u16(at);
|
|
102
|
-
const typoAscender = this.i16(at + 68);
|
|
103
|
-
const typoDescender = this.i16(at + 70);
|
|
104
|
-
const typoLineGap = this.i16(at + 72);
|
|
105
|
-
const capHeight = record.length >= 90 ? this.i16(at + 88) : 0;
|
|
106
|
-
return {
|
|
107
|
-
version,
|
|
108
|
-
fsType: this.u16(at + 8),
|
|
109
|
-
weightClass: this.u16(at + 4),
|
|
110
|
-
typoAscender,
|
|
111
|
-
typoDescender,
|
|
112
|
-
typoLineGap,
|
|
113
|
-
capHeight,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
get italicAngle() {
|
|
117
|
-
const record = this.tables.get('post');
|
|
118
|
-
if (record === undefined || record.length < 8)
|
|
119
|
-
return 0;
|
|
120
|
-
return this.i32(record.offset + 4) / 65536;
|
|
121
|
-
}
|
|
122
|
-
get underline() {
|
|
123
|
-
const record = this.tables.get('post');
|
|
124
|
-
if (record === undefined || record.length < 12) {
|
|
125
|
-
return { position: -Math.round(this.head.unitsPerEm * 0.1), thickness: Math.max(1, Math.round(this.head.unitsPerEm / 20)) };
|
|
126
|
-
}
|
|
127
|
-
const thickness = this.i16(record.offset + 10);
|
|
128
|
-
return {
|
|
129
|
-
position: this.i16(record.offset + 8),
|
|
130
|
-
thickness: thickness > 0 ? thickness : Math.max(1, Math.round(this.head.unitsPerEm / 20)),
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
get strikeout() {
|
|
134
|
-
const record = this.tables.get('OS/2');
|
|
135
|
-
if (record === undefined || record.length < 30)
|
|
136
|
-
return undefined;
|
|
137
|
-
return {
|
|
138
|
-
position: this.i16(record.offset + 26),
|
|
139
|
-
size: Math.max(1, this.i16(record.offset + 28)),
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
isMonospaced() {
|
|
143
|
-
const widths = this.advanceWidths();
|
|
144
|
-
const first = widths[Math.min(widths.length - 1, 32)] ?? 0;
|
|
145
|
-
for (let glyph = 33; glyph < Math.min(widths.length, 127); glyph += 1) {
|
|
146
|
-
if ((widths[glyph] ?? 0) !== first)
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
return first > 0;
|
|
150
|
-
}
|
|
151
|
-
get numGlyphs() {
|
|
152
|
-
const at = this.require('maxp').offset;
|
|
153
|
-
return this.u16(at + 4);
|
|
154
|
-
}
|
|
155
|
-
postScriptName(fallback) {
|
|
156
|
-
const record = this.tables.get('name');
|
|
157
|
-
if (record === undefined)
|
|
158
|
-
return fallback;
|
|
159
|
-
const count = this.u16(record.offset + 2);
|
|
160
|
-
const storage = record.offset + this.u16(record.offset + 4);
|
|
161
|
-
let mac;
|
|
162
|
-
for (let index = 0; index < count; index += 1) {
|
|
163
|
-
const at = record.offset + 6 + index * 12;
|
|
164
|
-
if (at + 12 > this.bytes.byteLength)
|
|
165
|
-
break;
|
|
166
|
-
const platform = this.u16(at);
|
|
167
|
-
const nameId = this.u16(at + 6);
|
|
168
|
-
if (nameId !== 6)
|
|
169
|
-
continue;
|
|
170
|
-
const length = this.u16(at + 8);
|
|
171
|
-
const offset = this.u16(at + 10);
|
|
172
|
-
const text = this.decodeName(storage + offset, length, platform);
|
|
173
|
-
if (platform === 3 && text !== '')
|
|
174
|
-
return sanitizeName(text);
|
|
175
|
-
if (mac === undefined && text !== '')
|
|
176
|
-
mac = sanitizeName(text);
|
|
177
|
-
}
|
|
178
|
-
return mac ?? fallback;
|
|
179
|
-
}
|
|
180
|
-
decodeName(at, length, platform) {
|
|
181
|
-
if (at + length > this.bytes.byteLength)
|
|
182
|
-
return '';
|
|
183
|
-
let out = '';
|
|
184
|
-
if (platform === 3 || platform === 0) {
|
|
185
|
-
for (let index = 0; index + 1 < length; index += 2)
|
|
186
|
-
out += String.fromCharCode(this.u16(at + index));
|
|
187
|
-
return out;
|
|
188
|
-
}
|
|
189
|
-
for (let index = 0; index < length; index += 1)
|
|
190
|
-
out += String.fromCharCode(this.u8(at + index));
|
|
191
|
-
return out;
|
|
192
|
-
}
|
|
193
|
-
hasGlyf() {
|
|
194
|
-
return this.tables.has('glyf') && this.tables.has('loca');
|
|
195
|
-
}
|
|
196
|
-
locaOffset(glyph) {
|
|
197
|
-
const record = this.require('loca');
|
|
198
|
-
const format = this.head.indexToLocFormat;
|
|
199
|
-
const numGlyphs = this.numGlyphs;
|
|
200
|
-
const index = Math.min(Math.max(glyph, 0), numGlyphs);
|
|
201
|
-
if (format === 0)
|
|
202
|
-
return this.u16(record.offset + index * 2) * 2;
|
|
203
|
-
return this.u32(record.offset + index * 4);
|
|
204
|
-
}
|
|
205
|
-
glyphRange(glyph) {
|
|
206
|
-
if (!this.hasGlyf())
|
|
207
|
-
return undefined;
|
|
208
|
-
const record = this.require('glyf');
|
|
209
|
-
const start = record.offset + this.locaOffset(glyph);
|
|
210
|
-
const end = record.offset + this.locaOffset(glyph + 1);
|
|
211
|
-
if (end <= start)
|
|
212
|
-
return undefined;
|
|
213
|
-
return { start, end: Math.min(end, this.bytes.byteLength) };
|
|
214
|
-
}
|
|
215
|
-
glyphByteLength(glyph) {
|
|
216
|
-
const range = this.glyphRange(glyph);
|
|
217
|
-
return range === undefined ? 0 : range.end - range.start;
|
|
218
|
-
}
|
|
219
|
-
static ARG_1_AND_2_ARE_WORDS = 0x0001;
|
|
220
|
-
static WE_HAVE_A_SCALE = 0x0008;
|
|
221
|
-
static MORE_COMPONENTS = 0x0020;
|
|
222
|
-
static WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
|
|
223
|
-
static WE_HAVE_A_TWO_BY_TWO = 0x0080;
|
|
224
|
-
compositeGlyphs(glyph) {
|
|
225
|
-
const range = this.glyphRange(glyph);
|
|
226
|
-
if (range === undefined)
|
|
227
|
-
return [];
|
|
228
|
-
if (this.i16(range.start) >= 0)
|
|
229
|
-
return [];
|
|
230
|
-
const out = [];
|
|
231
|
-
let at = range.start + 10;
|
|
232
|
-
for (;;) {
|
|
233
|
-
if (at + 4 > range.end)
|
|
234
|
-
break;
|
|
235
|
-
const flags = this.u16(at);
|
|
236
|
-
const component = this.u16(at + 2);
|
|
237
|
-
out.push(component);
|
|
238
|
-
at += 4;
|
|
239
|
-
at += (flags & Sfnt.ARG_1_AND_2_ARE_WORDS) !== 0 ? 4 : 2;
|
|
240
|
-
if ((flags & Sfnt.WE_HAVE_A_SCALE) !== 0)
|
|
241
|
-
at += 2;
|
|
242
|
-
else if ((flags & Sfnt.WE_HAVE_AN_X_AND_Y_SCALE) !== 0)
|
|
243
|
-
at += 4;
|
|
244
|
-
else if ((flags & Sfnt.WE_HAVE_A_TWO_BY_TWO) !== 0)
|
|
245
|
-
at += 8;
|
|
246
|
-
if ((flags & Sfnt.MORE_COMPONENTS) === 0)
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
return out;
|
|
250
|
-
}
|
|
251
|
-
advanceWidths() {
|
|
252
|
-
const record = this.require('hmtx');
|
|
253
|
-
const numberOfHMetrics = this.hhea.numberOfHMetrics;
|
|
254
|
-
const numGlyphs = this.numGlyphs;
|
|
255
|
-
const out = [];
|
|
256
|
-
let last = 0;
|
|
257
|
-
for (let glyph = 0; glyph < numGlyphs; glyph += 1) {
|
|
258
|
-
if (glyph < numberOfHMetrics) {
|
|
259
|
-
last = this.u16(record.offset + glyph * 4);
|
|
260
|
-
}
|
|
261
|
-
out.push(last);
|
|
262
|
-
}
|
|
263
|
-
return out;
|
|
264
|
-
}
|
|
265
|
-
cmapFormat(offset) {
|
|
266
|
-
return this.u16(this.require('cmap').offset + offset);
|
|
267
|
-
}
|
|
268
|
-
bestCmap() {
|
|
269
|
-
const record = this.require('cmap');
|
|
270
|
-
const count = this.u16(record.offset + 2);
|
|
271
|
-
let best;
|
|
272
|
-
let bestScore = -1;
|
|
273
|
-
for (let index = 0; index < count; index += 1) {
|
|
274
|
-
const platform = this.u16(record.offset + 4 + index * 8);
|
|
275
|
-
const encoding = this.u16(record.offset + 6 + index * 8);
|
|
276
|
-
const offset = this.u32(record.offset + 8 + index * 8);
|
|
277
|
-
const format = this.cmapFormat(offset);
|
|
278
|
-
if (format !== 0 && format !== 4 && format !== 6 && format !== 12)
|
|
279
|
-
continue;
|
|
280
|
-
const unicode = platform === 3 && (encoding === 1 || encoding === 10);
|
|
281
|
-
const score = (unicode ? 100 : 0) + (format === 12 ? 10 : 0) + (platform === 0 ? 5 : 0);
|
|
282
|
-
if (score > bestScore) {
|
|
283
|
-
bestScore = score;
|
|
284
|
-
best = offset;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return best;
|
|
288
|
-
}
|
|
289
|
-
glyphFor(codePoint) {
|
|
290
|
-
const offset = this.bestCmap();
|
|
291
|
-
if (offset === undefined)
|
|
292
|
-
return 0;
|
|
293
|
-
const format = this.cmapFormat(offset);
|
|
294
|
-
if (format === 4)
|
|
295
|
-
return this.glyphFromFormat4(offset, codePoint);
|
|
296
|
-
if (format === 12)
|
|
297
|
-
return this.glyphFromFormat12(offset, codePoint);
|
|
298
|
-
if (format === 6)
|
|
299
|
-
return this.glyphFromFormat6(offset, codePoint);
|
|
300
|
-
if (format === 0) {
|
|
301
|
-
if (codePoint > 0xff)
|
|
302
|
-
return 0;
|
|
303
|
-
return this.u8(this.require('cmap').offset + offset + 6 + codePoint);
|
|
304
|
-
}
|
|
305
|
-
return 0;
|
|
306
|
-
}
|
|
307
|
-
glyphFromFormat6(offset, codePoint) {
|
|
308
|
-
const at = this.require('cmap').offset + offset;
|
|
309
|
-
const first = this.u16(at + 6);
|
|
310
|
-
const count = this.u16(at + 8);
|
|
311
|
-
if (codePoint < first || codePoint >= first + count)
|
|
312
|
-
return 0;
|
|
313
|
-
return this.u16(at + 10 + (codePoint - first) * 2);
|
|
314
|
-
}
|
|
315
|
-
glyphFromFormat4(offset, codePoint) {
|
|
316
|
-
if (codePoint > 0xffff)
|
|
317
|
-
return 0;
|
|
318
|
-
const base = this.require('cmap').offset + offset;
|
|
319
|
-
const segCount = this.u16(base + 6) / 2;
|
|
320
|
-
const endAt = base + 14;
|
|
321
|
-
const startAt = endAt + segCount * 2 + 2;
|
|
322
|
-
const deltaAt = startAt + segCount * 2;
|
|
323
|
-
const rangeAt = deltaAt + segCount * 2;
|
|
324
|
-
for (let segment = 0; segment < segCount; segment += 1) {
|
|
325
|
-
const end = this.u16(endAt + segment * 2);
|
|
326
|
-
if (end < codePoint)
|
|
327
|
-
continue;
|
|
328
|
-
const start = this.u16(startAt + segment * 2);
|
|
329
|
-
if (start > codePoint)
|
|
330
|
-
return 0;
|
|
331
|
-
const delta = this.i16(deltaAt + segment * 2);
|
|
332
|
-
const rangeOffset = this.u16(rangeAt + segment * 2);
|
|
333
|
-
if (rangeOffset === 0)
|
|
334
|
-
return (codePoint + delta) & 0xffff;
|
|
335
|
-
const at = rangeAt + segment * 2 + rangeOffset + (codePoint - start) * 2;
|
|
336
|
-
const glyph = this.u16(at);
|
|
337
|
-
if (glyph === 0)
|
|
338
|
-
return 0;
|
|
339
|
-
return (glyph + delta) & 0xffff;
|
|
340
|
-
}
|
|
341
|
-
return 0;
|
|
342
|
-
}
|
|
343
|
-
glyphFromFormat12(offset, codePoint) {
|
|
344
|
-
const base = this.require('cmap').offset + offset;
|
|
345
|
-
const groups = this.u32(base + 12);
|
|
346
|
-
let low = 0;
|
|
347
|
-
let high = groups - 1;
|
|
348
|
-
while (low <= high) {
|
|
349
|
-
const middle = (low + high) >> 1;
|
|
350
|
-
const at = base + 16 + middle * 12;
|
|
351
|
-
const start = this.u32(at);
|
|
352
|
-
const end = this.u32(at + 4);
|
|
353
|
-
if (codePoint < start)
|
|
354
|
-
high = middle - 1;
|
|
355
|
-
else if (codePoint > end)
|
|
356
|
-
low = middle + 1;
|
|
357
|
-
else
|
|
358
|
-
return this.u32(at + 8) + (codePoint - start);
|
|
359
|
-
}
|
|
360
|
-
return 0;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
//# sourceMappingURL=sfnt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sfnt.js","sourceRoot":"","sources":["../../../src/pdf/fonts/sfnt.ts"],"names":[],"mappings":"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"}
|