@lexmata/micropdf 0.4.0
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/LICENSE +191 -0
- package/README.md +985 -0
- package/binding.gyp +73 -0
- package/dist/annot.d.ts +458 -0
- package/dist/annot.d.ts.map +1 -0
- package/dist/annot.js +697 -0
- package/dist/annot.js.map +1 -0
- package/dist/archive.d.ts +128 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +268 -0
- package/dist/archive.js.map +1 -0
- package/dist/buffer.d.ts +572 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +971 -0
- package/dist/buffer.js.map +1 -0
- package/dist/colorspace.d.ts +287 -0
- package/dist/colorspace.d.ts.map +1 -0
- package/dist/colorspace.js +542 -0
- package/dist/colorspace.js.map +1 -0
- package/dist/context.d.ts +184 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +320 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie.d.ts +164 -0
- package/dist/cookie.d.ts.map +1 -0
- package/dist/cookie.js +306 -0
- package/dist/cookie.js.map +1 -0
- package/dist/device.d.ts +169 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +350 -0
- package/dist/device.js.map +1 -0
- package/dist/display-list.d.ts +202 -0
- package/dist/display-list.d.ts.map +1 -0
- package/dist/display-list.js +410 -0
- package/dist/display-list.js.map +1 -0
- package/dist/document.d.ts +637 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +902 -0
- package/dist/document.js.map +1 -0
- package/dist/easy.d.ts +423 -0
- package/dist/easy.d.ts.map +1 -0
- package/dist/easy.js +644 -0
- package/dist/easy.js.map +1 -0
- package/dist/enhanced.d.ts +226 -0
- package/dist/enhanced.d.ts.map +1 -0
- package/dist/enhanced.js +368 -0
- package/dist/enhanced.js.map +1 -0
- package/dist/filter.d.ts +51 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +381 -0
- package/dist/filter.js.map +1 -0
- package/dist/font.d.ts +222 -0
- package/dist/font.d.ts.map +1 -0
- package/dist/font.js +381 -0
- package/dist/font.js.map +1 -0
- package/dist/form.d.ts +214 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +497 -0
- package/dist/form.js.map +1 -0
- package/dist/geometry.d.ts +469 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +780 -0
- package/dist/geometry.js.map +1 -0
- package/dist/image.d.ts +172 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +348 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +171 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +168 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +343 -0
- package/dist/link.js.map +1 -0
- package/dist/micropdf.d.ts +40 -0
- package/dist/micropdf.d.ts.map +1 -0
- package/dist/micropdf.js +45 -0
- package/dist/micropdf.js.map +1 -0
- package/dist/nanopdf.d.ts +40 -0
- package/dist/nanopdf.d.ts.map +1 -0
- package/dist/nanopdf.js +45 -0
- package/dist/nanopdf.js.map +1 -0
- package/dist/native.d.ts +242 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +509 -0
- package/dist/native.js.map +1 -0
- package/dist/output.d.ts +166 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +365 -0
- package/dist/output.js.map +1 -0
- package/dist/path.d.ts +420 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +687 -0
- package/dist/path.js.map +1 -0
- package/dist/pdf/object.d.ts +489 -0
- package/dist/pdf/object.d.ts.map +1 -0
- package/dist/pdf/object.js +1045 -0
- package/dist/pdf/object.js.map +1 -0
- package/dist/pixmap.d.ts +315 -0
- package/dist/pixmap.d.ts.map +1 -0
- package/dist/pixmap.js +590 -0
- package/dist/pixmap.js.map +1 -0
- package/dist/profiler.d.ts +159 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +380 -0
- package/dist/profiler.js.map +1 -0
- package/dist/render-options.d.ts +227 -0
- package/dist/render-options.d.ts.map +1 -0
- package/dist/render-options.js +130 -0
- package/dist/render-options.js.map +1 -0
- package/dist/resource-tracking.d.ts +332 -0
- package/dist/resource-tracking.d.ts.map +1 -0
- package/dist/resource-tracking.js +653 -0
- package/dist/resource-tracking.js.map +1 -0
- package/dist/simple.d.ts +276 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +343 -0
- package/dist/simple.js.map +1 -0
- package/dist/stext.d.ts +290 -0
- package/dist/stext.d.ts.map +1 -0
- package/dist/stext.js +312 -0
- package/dist/stext.js.map +1 -0
- package/dist/stream.d.ts +174 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +476 -0
- package/dist/stream.js.map +1 -0
- package/dist/text.d.ts +337 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +454 -0
- package/dist/text.js.map +1 -0
- package/dist/typed-arrays.d.ts +127 -0
- package/dist/typed-arrays.d.ts.map +1 -0
- package/dist/typed-arrays.js +410 -0
- package/dist/typed-arrays.js.map +1 -0
- package/dist/types.d.ts +358 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +216 -0
- package/dist/types.js.map +1 -0
- package/native/annot.cc +557 -0
- package/native/buffer.cc +204 -0
- package/native/colorspace.cc +166 -0
- package/native/context.cc +84 -0
- package/native/cookie.cc +179 -0
- package/native/device.cc +179 -0
- package/native/display_list.cc +179 -0
- package/native/document.cc +268 -0
- package/native/enhanced.cc +70 -0
- package/native/font.cc +282 -0
- package/native/form.cc +523 -0
- package/native/geometry.cc +255 -0
- package/native/image.cc +216 -0
- package/native/include/micropdf/enhanced.h +38 -0
- package/native/include/micropdf/types.h +36 -0
- package/native/include/micropdf.h +106 -0
- package/native/include/mupdf-ffi.h +39 -0
- package/native/include/mupdf.h +11 -0
- package/native/include/mupdf_minimal.h +381 -0
- package/native/lib/linux-x64/libmicropdf.a +0 -0
- package/native/link.cc +234 -0
- package/native/micropdf.cc +71 -0
- package/native/output.cc +229 -0
- package/native/page.cc +572 -0
- package/native/path.cc +259 -0
- package/native/pixmap.cc +240 -0
- package/native/stext.cc +610 -0
- package/native/stream.cc +239 -0
- package/package.json +120 -0
- package/scripts/build-from-rust.js +97 -0
- package/scripts/install.js +184 -0
package/dist/text.js
ADDED
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text - PDF text object handling and layout
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive support for working with text in PDF documents,
|
|
5
|
+
* including text layout, glyph positioning, font management, and structured text extraction.
|
|
6
|
+
*
|
|
7
|
+
* This module provides 100% API compatibility with MuPDF's text operations.
|
|
8
|
+
*
|
|
9
|
+
* @module text
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { Text, Language, Matrix } from 'micropdf';
|
|
13
|
+
*
|
|
14
|
+
* // Create a text object
|
|
15
|
+
* const text = Text.create();
|
|
16
|
+
*
|
|
17
|
+
* // Set language for text processing
|
|
18
|
+
* text.setLanguage(Language.en);
|
|
19
|
+
*
|
|
20
|
+
* // Add glyphs (from font)
|
|
21
|
+
* text.showGlyph('Arial', 12, Matrix.identity(), 65, 0x0041, 0); // 'A'
|
|
22
|
+
*
|
|
23
|
+
* // Get bounding box
|
|
24
|
+
* const bounds = text.getBounds();
|
|
25
|
+
* console.log(`Text spans ${bounds.width} x ${bounds.height}`);
|
|
26
|
+
*
|
|
27
|
+
* // Walk through text structure
|
|
28
|
+
* text.walk({
|
|
29
|
+
* beginSpan(font, size, wmode, trm) {
|
|
30
|
+
* console.log(`Span: ${font} @ ${size}pt`);
|
|
31
|
+
* },
|
|
32
|
+
* showGlyph(x, y, glyph, unicode) {
|
|
33
|
+
* console.log(`Glyph ${glyph} at (${x}, ${y})`);
|
|
34
|
+
* }
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Clean up
|
|
38
|
+
* text.drop();
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
import { Rect, Matrix } from './geometry.js';
|
|
42
|
+
/**
|
|
43
|
+
* Language codes for text handling.
|
|
44
|
+
*
|
|
45
|
+
* These language codes are used to assist with text extraction, hyphenation,
|
|
46
|
+
* and language-specific text processing in PDF documents.
|
|
47
|
+
*
|
|
48
|
+
* @enum {number}
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const text = Text.create();
|
|
52
|
+
*
|
|
53
|
+
* // Set English
|
|
54
|
+
* text.setLanguage(Language.en);
|
|
55
|
+
*
|
|
56
|
+
* // Set Spanish
|
|
57
|
+
* text.setLanguage(Language.es);
|
|
58
|
+
*
|
|
59
|
+
* // Set Chinese
|
|
60
|
+
* text.setLanguage(Language.zh);
|
|
61
|
+
*
|
|
62
|
+
* // Check current language
|
|
63
|
+
* if (text.getLanguage() === Language.ja) {
|
|
64
|
+
* console.log('Japanese text');
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export var Language;
|
|
69
|
+
(function (Language) {
|
|
70
|
+
/** No language set or unknown language */
|
|
71
|
+
Language[Language["UNSET"] = 0] = "UNSET";
|
|
72
|
+
/** English (en) */
|
|
73
|
+
Language[Language["en"] = 1] = "en";
|
|
74
|
+
/** Spanish (es) */
|
|
75
|
+
Language[Language["es"] = 2] = "es";
|
|
76
|
+
/** Chinese (zh) */
|
|
77
|
+
Language[Language["zh"] = 3] = "zh";
|
|
78
|
+
/** French (fr) */
|
|
79
|
+
Language[Language["fr"] = 4] = "fr";
|
|
80
|
+
/** German (de) */
|
|
81
|
+
Language[Language["de"] = 5] = "de";
|
|
82
|
+
/** Japanese (ja) */
|
|
83
|
+
Language[Language["ja"] = 6] = "ja";
|
|
84
|
+
/** Korean (ko) */
|
|
85
|
+
Language[Language["ko"] = 7] = "ko";
|
|
86
|
+
/** Russian (ru) */
|
|
87
|
+
Language[Language["ru"] = 8] = "ru";
|
|
88
|
+
/** Arabic (ar) */
|
|
89
|
+
Language[Language["ar"] = 9] = "ar";
|
|
90
|
+
/** Portuguese (pt) */
|
|
91
|
+
Language[Language["pt"] = 10] = "pt";
|
|
92
|
+
/** Italian (it) */
|
|
93
|
+
Language[Language["it"] = 11] = "it";
|
|
94
|
+
/** Dutch (nl) */
|
|
95
|
+
Language[Language["nl"] = 12] = "nl";
|
|
96
|
+
/** Swedish (sv) */
|
|
97
|
+
Language[Language["sv"] = 13] = "sv";
|
|
98
|
+
/** Polish (pl) */
|
|
99
|
+
Language[Language["pl"] = 14] = "pl";
|
|
100
|
+
/** Turkish (tr) */
|
|
101
|
+
Language[Language["tr"] = 15] = "tr";
|
|
102
|
+
})(Language || (Language = {}));
|
|
103
|
+
/**
|
|
104
|
+
* A PDF text object for structured text layout and rendering.
|
|
105
|
+
*
|
|
106
|
+
* Text objects provide low-level control over text positioning, font selection,
|
|
107
|
+
* and glyph rendering. They maintain a structured representation of text with
|
|
108
|
+
* spans and items for precise layout control.
|
|
109
|
+
*
|
|
110
|
+
* **Reference Counting**: Text objects use manual reference counting. Call `keep()`
|
|
111
|
+
* to increment the reference count and `drop()` to decrement it.
|
|
112
|
+
*
|
|
113
|
+
* @class Text
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // Create and configure text object
|
|
117
|
+
* const text = Text.create();
|
|
118
|
+
* text.setLanguage(Language.en);
|
|
119
|
+
*
|
|
120
|
+
* // Add text with font and positioning
|
|
121
|
+
* const font = 'Arial';
|
|
122
|
+
* const size = 12;
|
|
123
|
+
* const matrix = Matrix.translate(100, 200);
|
|
124
|
+
*
|
|
125
|
+
* // Show individual glyphs
|
|
126
|
+
* 'Hello'.split('').forEach((char, i) => {
|
|
127
|
+
* const glyph = char.charCodeAt(0);
|
|
128
|
+
* const unicode = char.codePointAt(0)!;
|
|
129
|
+
* text.showGlyph(font, size, matrix, glyph, unicode);
|
|
130
|
+
* });
|
|
131
|
+
*
|
|
132
|
+
* // Get bounding box
|
|
133
|
+
* const bounds = text.getBounds();
|
|
134
|
+
* console.log(`Text size: ${bounds.width} x ${bounds.height}`);
|
|
135
|
+
*
|
|
136
|
+
* // Walk through structure
|
|
137
|
+
* text.walk({
|
|
138
|
+
* showGlyph(x, y, glyph, unicode) {
|
|
139
|
+
* console.log(`Character: ${String.fromCodePoint(unicode)}`);
|
|
140
|
+
* }
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* // Clean up
|
|
144
|
+
* text.drop();
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export class Text {
|
|
148
|
+
_spans = [];
|
|
149
|
+
_language = Language.en;
|
|
150
|
+
_refCount = 1;
|
|
151
|
+
_currentSpan = null;
|
|
152
|
+
constructor(_handle) {
|
|
153
|
+
// Accept handle parameter for compatibility (optional and unused)
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a new text object
|
|
157
|
+
*/
|
|
158
|
+
static create() {
|
|
159
|
+
return new Text();
|
|
160
|
+
}
|
|
161
|
+
// ============================================================================
|
|
162
|
+
// Reference Counting
|
|
163
|
+
// ============================================================================
|
|
164
|
+
keep() {
|
|
165
|
+
this._refCount++;
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
drop() {
|
|
169
|
+
if (this._refCount > 0) {
|
|
170
|
+
this._refCount--;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Clone this text object
|
|
175
|
+
*/
|
|
176
|
+
clone() {
|
|
177
|
+
const cloned = new Text();
|
|
178
|
+
cloned._language = this._language;
|
|
179
|
+
for (const span of this._spans) {
|
|
180
|
+
cloned._spans.push({
|
|
181
|
+
font: span.font,
|
|
182
|
+
size: span.size,
|
|
183
|
+
wmode: span.wmode,
|
|
184
|
+
trm: span.trm,
|
|
185
|
+
items: [...span.items]
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return cloned;
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Language
|
|
192
|
+
// ============================================================================
|
|
193
|
+
get language() {
|
|
194
|
+
return this._language;
|
|
195
|
+
}
|
|
196
|
+
set language(lang) {
|
|
197
|
+
this._language = lang;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the language code
|
|
201
|
+
*/
|
|
202
|
+
getLanguage() {
|
|
203
|
+
return this._language;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Set the language code
|
|
207
|
+
*/
|
|
208
|
+
setLanguage(lang) {
|
|
209
|
+
this._language = lang;
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Adding Text
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Begin a new text span
|
|
216
|
+
*/
|
|
217
|
+
beginSpan(font, size, wmode, trm) {
|
|
218
|
+
this._currentSpan = {
|
|
219
|
+
font,
|
|
220
|
+
size,
|
|
221
|
+
wmode,
|
|
222
|
+
trm,
|
|
223
|
+
items: []
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* End the current text span
|
|
228
|
+
*/
|
|
229
|
+
endSpan() {
|
|
230
|
+
if (this._currentSpan) {
|
|
231
|
+
this._spans.push(this._currentSpan);
|
|
232
|
+
this._currentSpan = null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Show a single glyph
|
|
237
|
+
*/
|
|
238
|
+
showGlyph(font, size, trm, glyph, unicode, wmode = 0) {
|
|
239
|
+
const trmMatrix = Matrix.from(trm);
|
|
240
|
+
// Start new span if needed
|
|
241
|
+
if (this._currentSpan?.font !== font ||
|
|
242
|
+
this._currentSpan.size !== size ||
|
|
243
|
+
this._currentSpan.wmode !== wmode ||
|
|
244
|
+
!this._currentSpan.trm.equals(trmMatrix)) {
|
|
245
|
+
if (this._currentSpan) {
|
|
246
|
+
this.endSpan();
|
|
247
|
+
}
|
|
248
|
+
this.beginSpan(font, size, wmode, trmMatrix);
|
|
249
|
+
}
|
|
250
|
+
// Extract position from TRM
|
|
251
|
+
const pos = trmMatrix.transformPoint({ x: 0, y: 0 });
|
|
252
|
+
this._currentSpan.items.push({
|
|
253
|
+
x: pos.x,
|
|
254
|
+
y: pos.y,
|
|
255
|
+
glyph,
|
|
256
|
+
unicode
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Show a string of text
|
|
261
|
+
*/
|
|
262
|
+
showString(font, size, trm, text, wmode = 0) {
|
|
263
|
+
const trmMatrix = Matrix.from(trm);
|
|
264
|
+
if (this._currentSpan?.font !== font ||
|
|
265
|
+
this._currentSpan.size !== size ||
|
|
266
|
+
this._currentSpan.wmode !== wmode ||
|
|
267
|
+
!this._currentSpan.trm.equals(trmMatrix)) {
|
|
268
|
+
if (this._currentSpan) {
|
|
269
|
+
this.endSpan();
|
|
270
|
+
}
|
|
271
|
+
this.beginSpan(font, size, wmode, trmMatrix);
|
|
272
|
+
}
|
|
273
|
+
// Add each character
|
|
274
|
+
let x = 0;
|
|
275
|
+
for (let i = 0; i < text.length; i++) {
|
|
276
|
+
const unicode = text.charCodeAt(i);
|
|
277
|
+
const pos = trmMatrix.transformPoint({ x, y: 0 });
|
|
278
|
+
this._currentSpan.items.push({
|
|
279
|
+
x: pos.x,
|
|
280
|
+
y: pos.y,
|
|
281
|
+
glyph: unicode, // Use unicode as glyph ID (FFI would provide actual glyph ID)
|
|
282
|
+
unicode
|
|
283
|
+
});
|
|
284
|
+
// Advance x by approximate character width (FFI would use actual glyph metrics)
|
|
285
|
+
x += size * 0.5;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// ============================================================================
|
|
289
|
+
// Bounding Box
|
|
290
|
+
// ============================================================================
|
|
291
|
+
/**
|
|
292
|
+
* Calculate the bounding box of all text
|
|
293
|
+
*/
|
|
294
|
+
getBounds(ctm) {
|
|
295
|
+
// Finalize current span
|
|
296
|
+
if (this._currentSpan) {
|
|
297
|
+
this.endSpan();
|
|
298
|
+
}
|
|
299
|
+
if (this._spans.length === 0) {
|
|
300
|
+
return Rect.EMPTY;
|
|
301
|
+
}
|
|
302
|
+
let minX = Infinity;
|
|
303
|
+
let minY = Infinity;
|
|
304
|
+
let maxX = -Infinity;
|
|
305
|
+
let maxY = -Infinity;
|
|
306
|
+
const transform = ctm ? Matrix.from(ctm) : Matrix.IDENTITY;
|
|
307
|
+
for (const span of this._spans) {
|
|
308
|
+
for (const item of span.items) {
|
|
309
|
+
const p = transform.transformPoint({ x: item.x, y: item.y });
|
|
310
|
+
// Approximate glyph bounds (height = font size, width = size * 0.5)
|
|
311
|
+
const width = span.size * 0.5;
|
|
312
|
+
const height = span.size;
|
|
313
|
+
minX = Math.min(minX, p.x);
|
|
314
|
+
minY = Math.min(minY, p.y - height);
|
|
315
|
+
maxX = Math.max(maxX, p.x + width);
|
|
316
|
+
maxY = Math.max(maxY, p.y);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (minX === Infinity) {
|
|
320
|
+
return Rect.EMPTY;
|
|
321
|
+
}
|
|
322
|
+
return new Rect(minX, minY, maxX, maxY);
|
|
323
|
+
}
|
|
324
|
+
// ============================================================================
|
|
325
|
+
// Counting
|
|
326
|
+
// ============================================================================
|
|
327
|
+
/**
|
|
328
|
+
* Count number of text spans
|
|
329
|
+
*/
|
|
330
|
+
countSpans() {
|
|
331
|
+
// Finalize current span
|
|
332
|
+
if (this._currentSpan) {
|
|
333
|
+
this.endSpan();
|
|
334
|
+
}
|
|
335
|
+
return this._spans.length;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Count total number of items (glyphs/characters)
|
|
339
|
+
*/
|
|
340
|
+
countItems() {
|
|
341
|
+
// Finalize current span
|
|
342
|
+
if (this._currentSpan) {
|
|
343
|
+
this.endSpan();
|
|
344
|
+
}
|
|
345
|
+
let count = 0;
|
|
346
|
+
for (const span of this._spans) {
|
|
347
|
+
count += span.items.length;
|
|
348
|
+
}
|
|
349
|
+
return count;
|
|
350
|
+
}
|
|
351
|
+
// ============================================================================
|
|
352
|
+
// Clearing
|
|
353
|
+
// ============================================================================
|
|
354
|
+
/**
|
|
355
|
+
* Clear all text
|
|
356
|
+
*/
|
|
357
|
+
clear() {
|
|
358
|
+
this._spans = [];
|
|
359
|
+
this._currentSpan = null;
|
|
360
|
+
}
|
|
361
|
+
// ============================================================================
|
|
362
|
+
// Validation
|
|
363
|
+
// ============================================================================
|
|
364
|
+
/**
|
|
365
|
+
* Check if text object is valid
|
|
366
|
+
*/
|
|
367
|
+
isValid() {
|
|
368
|
+
return true; // Text objects are always valid in this implementation
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Check if text is empty
|
|
372
|
+
*/
|
|
373
|
+
isEmpty() {
|
|
374
|
+
// Finalize current span
|
|
375
|
+
if (this._currentSpan) {
|
|
376
|
+
this.endSpan();
|
|
377
|
+
}
|
|
378
|
+
return this._spans.length === 0;
|
|
379
|
+
}
|
|
380
|
+
// ============================================================================
|
|
381
|
+
// Walking
|
|
382
|
+
// ============================================================================
|
|
383
|
+
/**
|
|
384
|
+
* Walk through all text spans and items
|
|
385
|
+
*/
|
|
386
|
+
walk(walker) {
|
|
387
|
+
// Finalize current span
|
|
388
|
+
if (this._currentSpan) {
|
|
389
|
+
this.endSpan();
|
|
390
|
+
}
|
|
391
|
+
for (const span of this._spans) {
|
|
392
|
+
if (walker.beginSpan) {
|
|
393
|
+
walker.beginSpan(span.font, span.size, span.wmode, span.trm);
|
|
394
|
+
}
|
|
395
|
+
for (const item of span.items) {
|
|
396
|
+
walker.showGlyph(item.x, item.y, item.glyph, item.unicode);
|
|
397
|
+
}
|
|
398
|
+
if (walker.endSpan) {
|
|
399
|
+
walker.endSpan();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// ============================================================================
|
|
404
|
+
// Extraction
|
|
405
|
+
// ============================================================================
|
|
406
|
+
/**
|
|
407
|
+
* Extract text content as plain string
|
|
408
|
+
*/
|
|
409
|
+
extractText() {
|
|
410
|
+
// Finalize current span
|
|
411
|
+
if (this._currentSpan) {
|
|
412
|
+
this.endSpan();
|
|
413
|
+
}
|
|
414
|
+
let result = '';
|
|
415
|
+
for (const span of this._spans) {
|
|
416
|
+
for (const item of span.items) {
|
|
417
|
+
result += String.fromCharCode(item.unicode);
|
|
418
|
+
}
|
|
419
|
+
result += ' '; // Space between spans
|
|
420
|
+
}
|
|
421
|
+
return result.trim();
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Get all spans
|
|
425
|
+
*/
|
|
426
|
+
getSpans() {
|
|
427
|
+
// Finalize current span
|
|
428
|
+
if (this._currentSpan) {
|
|
429
|
+
this.endSpan();
|
|
430
|
+
}
|
|
431
|
+
return this._spans.map((span) => ({
|
|
432
|
+
...span,
|
|
433
|
+
items: [...span.items]
|
|
434
|
+
}));
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Get span by index
|
|
438
|
+
*/
|
|
439
|
+
getSpan(index) {
|
|
440
|
+
// Finalize current span
|
|
441
|
+
if (this._currentSpan) {
|
|
442
|
+
this.endSpan();
|
|
443
|
+
}
|
|
444
|
+
if (index < 0 || index >= this._spans.length) {
|
|
445
|
+
return undefined;
|
|
446
|
+
}
|
|
447
|
+
const span = this._spans[index];
|
|
448
|
+
return {
|
|
449
|
+
...span,
|
|
450
|
+
items: [...span.items]
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
//# sourceMappingURL=text.js.map
|
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypedArray utilities for high-performance numeric operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides optimized operations using TypedArrays instead of
|
|
5
|
+
* regular JavaScript arrays for numeric data. TypedArrays offer:
|
|
6
|
+
* - Better memory efficiency (fixed-size elements)
|
|
7
|
+
* - Faster iteration (no type checking per element)
|
|
8
|
+
* - Better cache locality
|
|
9
|
+
* - Direct memory access for FFI operations
|
|
10
|
+
*
|
|
11
|
+
* @module typed-arrays
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Create a color array from RGB values (0-255 or 0-1).
|
|
15
|
+
* Returns Float32Array normalized to 0-1 range.
|
|
16
|
+
*/
|
|
17
|
+
export declare function colorFromRGB(r: number, g: number, b: number, normalize?: boolean): Float32Array;
|
|
18
|
+
/**
|
|
19
|
+
* Create a color array from RGBA values.
|
|
20
|
+
*/
|
|
21
|
+
export declare function colorFromRGBA(r: number, g: number, b: number, a: number, normalize?: boolean): Float32Array;
|
|
22
|
+
/**
|
|
23
|
+
* Create a grayscale color array.
|
|
24
|
+
*/
|
|
25
|
+
export declare function colorFromGray(gray: number, normalize?: boolean): Float32Array;
|
|
26
|
+
/**
|
|
27
|
+
* Create a CMYK color array.
|
|
28
|
+
*/
|
|
29
|
+
export declare function colorFromCMYK(c: number, m: number, y: number, k: number, normalize?: boolean): Float32Array;
|
|
30
|
+
/**
|
|
31
|
+
* Create a point array from coordinates.
|
|
32
|
+
* Stores as [x0, y0, x1, y1, x2, y2, ...]
|
|
33
|
+
*/
|
|
34
|
+
export declare function pointsFromCoords(...coords: number[]): Float32Array;
|
|
35
|
+
/**
|
|
36
|
+
* Create a point array from Point-like objects.
|
|
37
|
+
*/
|
|
38
|
+
export declare function pointsFromObjects(points: {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
}[]): Float32Array;
|
|
42
|
+
/**
|
|
43
|
+
* Transform points in-place by a matrix.
|
|
44
|
+
* Points are stored as [x0, y0, x1, y1, ...]
|
|
45
|
+
* Matrix is [a, b, c, d, e, f]
|
|
46
|
+
*/
|
|
47
|
+
export declare function transformPointsInPlace(points: Float32Array, a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
48
|
+
/**
|
|
49
|
+
* Transform points, returning a new array.
|
|
50
|
+
*/
|
|
51
|
+
export declare function transformPoints(points: Float32Array, a: number, b: number, c: number, d: number, e: number, f: number): Float32Array;
|
|
52
|
+
/**
|
|
53
|
+
* Create a rectangle array from coordinates.
|
|
54
|
+
* Stores as [x0, y0, x1, y1, ...]
|
|
55
|
+
*/
|
|
56
|
+
export declare function rectsFromCoords(...coords: number[]): Float32Array;
|
|
57
|
+
/**
|
|
58
|
+
* Create a rectangle array from Rect-like objects.
|
|
59
|
+
*/
|
|
60
|
+
export declare function rectsFromObjects(rects: {
|
|
61
|
+
x0: number;
|
|
62
|
+
y0: number;
|
|
63
|
+
x1: number;
|
|
64
|
+
y1: number;
|
|
65
|
+
}[]): Float32Array;
|
|
66
|
+
/**
|
|
67
|
+
* Transform rectangles in-place by a matrix.
|
|
68
|
+
* For axis-aligned transforms (b=0, c=0), preserves rectangle form.
|
|
69
|
+
* For other transforms, computes bounding box of transformed corners.
|
|
70
|
+
*/
|
|
71
|
+
export declare function transformRectsInPlace(rects: Float32Array, a: number, b: number, c: number, d: number, e: number, f: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Create an identity matrix.
|
|
74
|
+
*/
|
|
75
|
+
export declare function matrixIdentity(): Float32Array;
|
|
76
|
+
/**
|
|
77
|
+
* Create a translation matrix.
|
|
78
|
+
*/
|
|
79
|
+
export declare function matrixTranslate(tx: number, ty: number): Float32Array;
|
|
80
|
+
/**
|
|
81
|
+
* Create a scale matrix.
|
|
82
|
+
*/
|
|
83
|
+
export declare function matrixScale(sx: number, sy?: number): Float32Array;
|
|
84
|
+
/**
|
|
85
|
+
* Create a rotation matrix (degrees).
|
|
86
|
+
*/
|
|
87
|
+
export declare function matrixRotate(degrees: number): Float32Array;
|
|
88
|
+
/**
|
|
89
|
+
* Concatenate two matrices in-place (m1 = m1 * m2).
|
|
90
|
+
*/
|
|
91
|
+
export declare function matrixConcatInPlace(m1: Float32Array, m2: Float32Array): void;
|
|
92
|
+
/**
|
|
93
|
+
* Concatenate two matrices, returning new array.
|
|
94
|
+
*/
|
|
95
|
+
export declare function matrixConcat(m1: Float32Array, m2: Float32Array): Float32Array;
|
|
96
|
+
/**
|
|
97
|
+
* Calculate distances from one point to multiple points.
|
|
98
|
+
* Returns Float32Array of distances.
|
|
99
|
+
*/
|
|
100
|
+
export declare function pointDistances(fromX: number, fromY: number, points: Float32Array): Float32Array;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate squared distances (faster, no sqrt).
|
|
103
|
+
*/
|
|
104
|
+
export declare function pointDistancesSquared(fromX: number, fromY: number, points: Float32Array): Float32Array;
|
|
105
|
+
/**
|
|
106
|
+
* Test which points are inside a rectangle.
|
|
107
|
+
* Returns Uint8Array (0 = outside, 1 = inside).
|
|
108
|
+
*/
|
|
109
|
+
export declare function rectContainsPoints(x0: number, y0: number, x1: number, y1: number, points: Float32Array): Uint8Array;
|
|
110
|
+
/**
|
|
111
|
+
* Count points inside a rectangle (no allocation).
|
|
112
|
+
*/
|
|
113
|
+
export declare function countPointsInRect(x0: number, y0: number, x1: number, y1: number, points: Float32Array): number;
|
|
114
|
+
/**
|
|
115
|
+
* Convert pixel data from one format to another.
|
|
116
|
+
* Supported: RGB to RGBA, RGBA to RGB, Gray to RGB, etc.
|
|
117
|
+
*/
|
|
118
|
+
export declare function convertPixelFormat(src: Uint8Array, srcComponents: number, dstComponents: number, defaultAlpha?: number): Uint8Array;
|
|
119
|
+
/**
|
|
120
|
+
* Premultiply alpha in RGBA pixel data (in-place).
|
|
121
|
+
*/
|
|
122
|
+
export declare function premultiplyAlpha(pixels: Uint8Array): void;
|
|
123
|
+
/**
|
|
124
|
+
* Unpremultiply alpha in RGBA pixel data (in-place).
|
|
125
|
+
*/
|
|
126
|
+
export declare function unpremultiplyAlpha(pixels: Uint8Array): void;
|
|
127
|
+
//# sourceMappingURL=typed-arrays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-arrays.d.ts","sourceRoot":"","sources":["../src/typed-arrays.ts"],"names":[],"mappings":"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"}
|