@file-viewer/doc 2.1.10
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 +21 -0
- package/README.en.md +34 -0
- package/README.md +263 -0
- package/dist/core/binary.d.ts +31 -0
- package/dist/core/binary.js +102 -0
- package/dist/core/cfb.d.ts +7 -0
- package/dist/core/cfb.js +286 -0
- package/dist/core/utils.d.ts +19 -0
- package/dist/core/utils.js +129 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/msdoc/clx.d.ts +18 -0
- package/dist/msdoc/clx.js +172 -0
- package/dist/msdoc/constants.d.ts +73 -0
- package/dist/msdoc/constants.js +73 -0
- package/dist/msdoc/fib.d.ts +4 -0
- package/dist/msdoc/fib.js +125 -0
- package/dist/msdoc/fkp.d.ts +19 -0
- package/dist/msdoc/fkp.js +184 -0
- package/dist/msdoc/fonts.d.ts +2 -0
- package/dist/msdoc/fonts.js +87 -0
- package/dist/msdoc/objects.d.ts +15 -0
- package/dist/msdoc/objects.js +192 -0
- package/dist/msdoc/parser.d.ts +8 -0
- package/dist/msdoc/parser.js +549 -0
- package/dist/msdoc/properties.d.ts +18 -0
- package/dist/msdoc/properties.js +405 -0
- package/dist/msdoc/sprm.d.ts +153 -0
- package/dist/msdoc/sprm.js +500 -0
- package/dist/msdoc/styles.d.ts +10 -0
- package/dist/msdoc/styles.js +214 -0
- package/dist/render/html.d.ts +8 -0
- package/dist/render/html.js +311 -0
- package/dist/types.d.ts +635 -0
- package/dist/types.js +1 -0
- package/dist/viewer.d.ts +8 -0
- package/dist/viewer.js +71 -0
- package/dist/worker-client.d.ts +19 -0
- package/dist/worker-client.js +71 -0
- package/dist/worker.d.ts +1 -0
- package/dist/worker.js +36 -0
- package/package.json +73 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,635 @@
|
|
|
1
|
+
export type BinaryInput = ArrayBuffer | Uint8Array | ArrayBufferView;
|
|
2
|
+
export interface MsDocWarning {
|
|
3
|
+
message: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface BinaryInputLike {
|
|
7
|
+
byteLength: number;
|
|
8
|
+
}
|
|
9
|
+
export interface CFBEntry {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
objectType: number;
|
|
13
|
+
colorFlag: number;
|
|
14
|
+
leftSiblingId: number;
|
|
15
|
+
rightSiblingId: number;
|
|
16
|
+
childId: number;
|
|
17
|
+
clsid: Uint8Array;
|
|
18
|
+
stateBits: number;
|
|
19
|
+
creationTime: number;
|
|
20
|
+
modifiedTime: number;
|
|
21
|
+
startSector: number;
|
|
22
|
+
streamSize: number;
|
|
23
|
+
children: number[];
|
|
24
|
+
parentId: number | null;
|
|
25
|
+
path?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ParsedCFB {
|
|
28
|
+
bytes: Uint8Array;
|
|
29
|
+
majorVersion: number;
|
|
30
|
+
sectorSize: number;
|
|
31
|
+
miniSectorSize: number;
|
|
32
|
+
numDirSectors: number;
|
|
33
|
+
numFatSectors: number;
|
|
34
|
+
firstDirSector: number;
|
|
35
|
+
transactionSignature: number;
|
|
36
|
+
miniStreamCutoffSize: number;
|
|
37
|
+
warnings: MsDocWarning[];
|
|
38
|
+
entries: CFBEntry[];
|
|
39
|
+
root: CFBEntry;
|
|
40
|
+
pathMap: Map<string, CFBEntry>;
|
|
41
|
+
getEntry(path: string): CFBEntry | null;
|
|
42
|
+
getStream(identifier: string | CFBEntry): Uint8Array | null;
|
|
43
|
+
listChildren(path: string | CFBEntry): CFBEntry[];
|
|
44
|
+
findByName(name: string, startPath?: string): CFBEntry | null;
|
|
45
|
+
}
|
|
46
|
+
export interface FibBase {
|
|
47
|
+
wIdent: number;
|
|
48
|
+
nFib: number;
|
|
49
|
+
lid: number;
|
|
50
|
+
pnNext: number;
|
|
51
|
+
flags: number;
|
|
52
|
+
envFlags: number;
|
|
53
|
+
fDot: boolean;
|
|
54
|
+
fGlsy: boolean;
|
|
55
|
+
fComplex: boolean;
|
|
56
|
+
fHasPic: boolean;
|
|
57
|
+
cQuickSaves: number;
|
|
58
|
+
fEncrypted: boolean;
|
|
59
|
+
fWhichTblStm: number;
|
|
60
|
+
fReadOnlyRecommended: boolean;
|
|
61
|
+
fWriteReservation: boolean;
|
|
62
|
+
fExtChar: boolean;
|
|
63
|
+
fLoadOverride: boolean;
|
|
64
|
+
fFarEast: boolean;
|
|
65
|
+
fObfuscated: boolean;
|
|
66
|
+
nFibBack: number;
|
|
67
|
+
lKey: number;
|
|
68
|
+
envr: number;
|
|
69
|
+
fMac: boolean;
|
|
70
|
+
fEmptySpecial: boolean;
|
|
71
|
+
fLoadOverridePage: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface FibRgLw {
|
|
74
|
+
raw: number[];
|
|
75
|
+
cbMac: number;
|
|
76
|
+
ccpText: number;
|
|
77
|
+
ccpFtn: number;
|
|
78
|
+
ccpHdd: number;
|
|
79
|
+
ccpMcr: number;
|
|
80
|
+
ccpAtn: number;
|
|
81
|
+
ccpEdn: number;
|
|
82
|
+
ccpTxbx: number;
|
|
83
|
+
ccpHdrTxbx: number;
|
|
84
|
+
}
|
|
85
|
+
export interface FibFcLcbPair {
|
|
86
|
+
name: string;
|
|
87
|
+
fc: number;
|
|
88
|
+
lcb: number;
|
|
89
|
+
index: number;
|
|
90
|
+
}
|
|
91
|
+
export interface FibRgFcLcb {
|
|
92
|
+
_pairs: FibFcLcbPair[];
|
|
93
|
+
[key: string]: number | FibFcLcbPair[] | undefined;
|
|
94
|
+
}
|
|
95
|
+
export interface ParsedFib {
|
|
96
|
+
base: FibBase;
|
|
97
|
+
csw: number;
|
|
98
|
+
cslw: number;
|
|
99
|
+
cbRgFcLcb: number;
|
|
100
|
+
cswNew: number;
|
|
101
|
+
nFibNew: number;
|
|
102
|
+
fibRgWBytes: Uint8Array;
|
|
103
|
+
fibRgLwBytes: Uint8Array;
|
|
104
|
+
fibRgFcLcbBytes: Uint8Array;
|
|
105
|
+
fibRgCswNewBytes: Uint8Array;
|
|
106
|
+
fibRgLw: FibRgLw;
|
|
107
|
+
fibRgFcLcb: FibRgFcLcb;
|
|
108
|
+
}
|
|
109
|
+
export interface PieceDescriptor {
|
|
110
|
+
index: number;
|
|
111
|
+
descriptor: number;
|
|
112
|
+
fNoParaLast: boolean;
|
|
113
|
+
fRaw: boolean;
|
|
114
|
+
prm: number;
|
|
115
|
+
compressed: boolean;
|
|
116
|
+
fcRaw: number;
|
|
117
|
+
fc: number;
|
|
118
|
+
cpStart: number;
|
|
119
|
+
cpEnd: number;
|
|
120
|
+
actualByteStart: number;
|
|
121
|
+
byteLength: number;
|
|
122
|
+
actualByteEnd: number;
|
|
123
|
+
}
|
|
124
|
+
export interface PieceTable {
|
|
125
|
+
cps: number[];
|
|
126
|
+
pieces: PieceDescriptor[];
|
|
127
|
+
}
|
|
128
|
+
export interface ParsedClx {
|
|
129
|
+
prcs: Array<{
|
|
130
|
+
type: number;
|
|
131
|
+
cbGrpprl: number;
|
|
132
|
+
bytes: Uint8Array;
|
|
133
|
+
}>;
|
|
134
|
+
pcdt: {
|
|
135
|
+
lcb: number;
|
|
136
|
+
pieceTable: PieceTable;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export interface CpFileOffsetInfo {
|
|
140
|
+
piece: PieceDescriptor;
|
|
141
|
+
offset: number;
|
|
142
|
+
compressed: boolean;
|
|
143
|
+
}
|
|
144
|
+
export type PropertyKind = 'char' | 'para' | 'table' | 'unknown';
|
|
145
|
+
export interface DecodedProperty<TValue = unknown> {
|
|
146
|
+
kind: PropertyKind;
|
|
147
|
+
name: string;
|
|
148
|
+
value: TValue;
|
|
149
|
+
code?: number;
|
|
150
|
+
operandBytes?: Uint8Array;
|
|
151
|
+
raw?: number | Uint8Array;
|
|
152
|
+
}
|
|
153
|
+
export interface StyleBase {
|
|
154
|
+
sti?: number;
|
|
155
|
+
flags1?: number;
|
|
156
|
+
stk: number;
|
|
157
|
+
istdBase: number;
|
|
158
|
+
cupx: number;
|
|
159
|
+
istdNext: number;
|
|
160
|
+
bchUpe?: number;
|
|
161
|
+
grfstd?: number;
|
|
162
|
+
}
|
|
163
|
+
export interface StyleDefinition {
|
|
164
|
+
istd: number;
|
|
165
|
+
name: string;
|
|
166
|
+
stdfBase: StyleBase;
|
|
167
|
+
paraProps: DecodedProperty[];
|
|
168
|
+
charProps: DecodedProperty[];
|
|
169
|
+
tableProps: DecodedProperty[];
|
|
170
|
+
empty: boolean;
|
|
171
|
+
}
|
|
172
|
+
export interface ResolvedStyle {
|
|
173
|
+
styleIds: number[];
|
|
174
|
+
paraProps: DecodedProperty[];
|
|
175
|
+
charProps: DecodedProperty[];
|
|
176
|
+
tableProps: DecodedProperty[];
|
|
177
|
+
}
|
|
178
|
+
export interface StyleCollection {
|
|
179
|
+
header: {
|
|
180
|
+
cbStshi: number;
|
|
181
|
+
cstd: number;
|
|
182
|
+
cbSTDBaseInFile: number;
|
|
183
|
+
ftcAsci: number;
|
|
184
|
+
ftcFE: number;
|
|
185
|
+
ftcOther: number;
|
|
186
|
+
} | null;
|
|
187
|
+
styles: Map<number, StyleDefinition>;
|
|
188
|
+
resolveStyle(istd: number | null | undefined): ResolvedStyle;
|
|
189
|
+
}
|
|
190
|
+
export interface FontInfo {
|
|
191
|
+
index: number;
|
|
192
|
+
cbFfnM1: number;
|
|
193
|
+
ffid: number;
|
|
194
|
+
weight: number;
|
|
195
|
+
charset: number;
|
|
196
|
+
ixchSzAlt: number;
|
|
197
|
+
panose: Uint8Array;
|
|
198
|
+
fontSignature: Uint8Array;
|
|
199
|
+
name: string;
|
|
200
|
+
altName: string;
|
|
201
|
+
}
|
|
202
|
+
export interface FontsCollection {
|
|
203
|
+
header: {
|
|
204
|
+
cData: number;
|
|
205
|
+
cbExtra: number;
|
|
206
|
+
} | null;
|
|
207
|
+
fonts: FontInfo[];
|
|
208
|
+
byIndex(index: number | null | undefined): FontInfo | null;
|
|
209
|
+
}
|
|
210
|
+
export interface BorderSpec {
|
|
211
|
+
borderType?: number;
|
|
212
|
+
lineWidth?: number;
|
|
213
|
+
color?: number;
|
|
214
|
+
[key: string]: unknown;
|
|
215
|
+
}
|
|
216
|
+
export interface HighlightInfo {
|
|
217
|
+
index: number;
|
|
218
|
+
color?: string;
|
|
219
|
+
}
|
|
220
|
+
export interface SymbolInfo {
|
|
221
|
+
fontId?: number;
|
|
222
|
+
charCode?: number;
|
|
223
|
+
[key: string]: unknown;
|
|
224
|
+
}
|
|
225
|
+
export interface CharState {
|
|
226
|
+
bold: boolean;
|
|
227
|
+
italic: boolean;
|
|
228
|
+
strike: boolean;
|
|
229
|
+
underline: number;
|
|
230
|
+
fontSizeHalfPoints?: number;
|
|
231
|
+
fontFamilyId?: number;
|
|
232
|
+
fontFamily?: string;
|
|
233
|
+
colorIndex?: number;
|
|
234
|
+
highlight?: HighlightInfo | number;
|
|
235
|
+
spacing: number;
|
|
236
|
+
positionHalfPoints: number;
|
|
237
|
+
scale: number;
|
|
238
|
+
hidden: boolean;
|
|
239
|
+
smallCaps: boolean;
|
|
240
|
+
caps: boolean;
|
|
241
|
+
outline: boolean;
|
|
242
|
+
shadow: boolean;
|
|
243
|
+
emboss: boolean;
|
|
244
|
+
imprint: boolean;
|
|
245
|
+
rtl: boolean;
|
|
246
|
+
pictureOffset?: number;
|
|
247
|
+
data: boolean;
|
|
248
|
+
ole2: boolean;
|
|
249
|
+
object: boolean;
|
|
250
|
+
special: boolean;
|
|
251
|
+
plain?: boolean;
|
|
252
|
+
charStyleId?: number;
|
|
253
|
+
boldBi?: boolean;
|
|
254
|
+
italicBi?: boolean;
|
|
255
|
+
doubleStrike?: boolean;
|
|
256
|
+
symbol?: SymbolInfo;
|
|
257
|
+
[key: string]: unknown;
|
|
258
|
+
}
|
|
259
|
+
export interface ParaBorders {
|
|
260
|
+
top?: BorderSpec;
|
|
261
|
+
left?: BorderSpec;
|
|
262
|
+
bottom?: BorderSpec;
|
|
263
|
+
right?: BorderSpec;
|
|
264
|
+
between?: BorderSpec;
|
|
265
|
+
bar?: BorderSpec;
|
|
266
|
+
}
|
|
267
|
+
export interface ParaState {
|
|
268
|
+
styleId: number;
|
|
269
|
+
alignment: number;
|
|
270
|
+
spacingBefore: number;
|
|
271
|
+
spacingAfter: number;
|
|
272
|
+
lineSpacing: number;
|
|
273
|
+
leftIndent: number;
|
|
274
|
+
rightIndent: number;
|
|
275
|
+
firstLineIndent: number;
|
|
276
|
+
keepLines: boolean;
|
|
277
|
+
keepNext: boolean;
|
|
278
|
+
pageBreakBefore: boolean;
|
|
279
|
+
widowControl: boolean;
|
|
280
|
+
inTable: boolean;
|
|
281
|
+
tableRowEnd: boolean;
|
|
282
|
+
innerTableCell: boolean;
|
|
283
|
+
innerTableRowEnd: boolean;
|
|
284
|
+
itap: number;
|
|
285
|
+
dtap: number;
|
|
286
|
+
listLevel?: number;
|
|
287
|
+
listId?: number;
|
|
288
|
+
rtlPara: boolean;
|
|
289
|
+
adjustRight: boolean;
|
|
290
|
+
frameLeft?: number;
|
|
291
|
+
frameTop?: number;
|
|
292
|
+
frameWidth?: number;
|
|
293
|
+
frameHeight?: number;
|
|
294
|
+
framePosition?: number;
|
|
295
|
+
frameWrap?: number;
|
|
296
|
+
borders: ParaBorders;
|
|
297
|
+
shading?: unknown;
|
|
298
|
+
[key: string]: unknown;
|
|
299
|
+
}
|
|
300
|
+
export interface Tcgrf {
|
|
301
|
+
horzMerge?: number;
|
|
302
|
+
vertMerge?: number;
|
|
303
|
+
vertAlign?: number;
|
|
304
|
+
fitText?: boolean;
|
|
305
|
+
noWrap?: boolean;
|
|
306
|
+
hideMark?: boolean;
|
|
307
|
+
textFlow?: number;
|
|
308
|
+
ftsWidth?: number;
|
|
309
|
+
[key: string]: unknown;
|
|
310
|
+
}
|
|
311
|
+
export interface TableCellDefinition {
|
|
312
|
+
wWidth?: number;
|
|
313
|
+
tcgrf?: Tcgrf;
|
|
314
|
+
borders?: Record<string, BorderSpec>;
|
|
315
|
+
[key: string]: unknown;
|
|
316
|
+
}
|
|
317
|
+
export interface TDefTableOperand {
|
|
318
|
+
rgdxaCenter?: number[];
|
|
319
|
+
cells: TableCellDefinition[];
|
|
320
|
+
[key: string]: unknown;
|
|
321
|
+
}
|
|
322
|
+
export interface ItcRange {
|
|
323
|
+
first: number;
|
|
324
|
+
lim: number;
|
|
325
|
+
}
|
|
326
|
+
export interface RangeWidthOperand {
|
|
327
|
+
cb?: number;
|
|
328
|
+
range: ItcRange;
|
|
329
|
+
width?: number;
|
|
330
|
+
wWidth?: number;
|
|
331
|
+
ftsWidth?: number;
|
|
332
|
+
}
|
|
333
|
+
export interface RangeBorderOperand {
|
|
334
|
+
cb?: number;
|
|
335
|
+
range: ItcRange;
|
|
336
|
+
border: BorderSpec;
|
|
337
|
+
extra?: Uint8Array;
|
|
338
|
+
}
|
|
339
|
+
export interface RangeValueOperand {
|
|
340
|
+
cb?: number;
|
|
341
|
+
range: ItcRange;
|
|
342
|
+
value: number | boolean | unknown;
|
|
343
|
+
extra?: Uint8Array;
|
|
344
|
+
}
|
|
345
|
+
export interface TableWidthOperand {
|
|
346
|
+
ftsWidth?: number;
|
|
347
|
+
width?: number;
|
|
348
|
+
wWidth?: number;
|
|
349
|
+
}
|
|
350
|
+
export interface TInsertOperand {
|
|
351
|
+
cb?: number;
|
|
352
|
+
range?: ItcRange;
|
|
353
|
+
itcFirst?: number;
|
|
354
|
+
dxaCol?: number[] | number;
|
|
355
|
+
dxaGapHalf?: number;
|
|
356
|
+
ctc?: number;
|
|
357
|
+
cells?: unknown[];
|
|
358
|
+
[key: string]: unknown;
|
|
359
|
+
}
|
|
360
|
+
export interface TableState {
|
|
361
|
+
styleId?: number;
|
|
362
|
+
alignment: number;
|
|
363
|
+
leftIndent: number;
|
|
364
|
+
gapHalf: number;
|
|
365
|
+
cantSplit: boolean;
|
|
366
|
+
header: boolean;
|
|
367
|
+
rowHeight: number;
|
|
368
|
+
rtl: boolean;
|
|
369
|
+
positionCode?: number;
|
|
370
|
+
absLeft?: number;
|
|
371
|
+
absTop?: number;
|
|
372
|
+
distanceLeft?: number;
|
|
373
|
+
distanceTop?: number;
|
|
374
|
+
tableWidth?: TableWidthOperand;
|
|
375
|
+
autoFit?: unknown;
|
|
376
|
+
widthBefore?: unknown;
|
|
377
|
+
widthAfter?: unknown;
|
|
378
|
+
defTable?: TDefTableOperand;
|
|
379
|
+
operations: DecodedProperty[];
|
|
380
|
+
[key: string]: unknown;
|
|
381
|
+
}
|
|
382
|
+
export interface TableCellMeta {
|
|
383
|
+
index: number;
|
|
384
|
+
width?: number;
|
|
385
|
+
ftsWidth?: number;
|
|
386
|
+
borders?: Record<string, BorderSpec>;
|
|
387
|
+
merge?: number;
|
|
388
|
+
vertMerge?: number;
|
|
389
|
+
vertAlign?: number;
|
|
390
|
+
fitText?: boolean;
|
|
391
|
+
noWrap?: boolean;
|
|
392
|
+
hideMark?: boolean;
|
|
393
|
+
textFlow?: number;
|
|
394
|
+
rightBoundary?: number;
|
|
395
|
+
leftBoundary?: number;
|
|
396
|
+
shading?: unknown;
|
|
397
|
+
}
|
|
398
|
+
export interface CharSegment {
|
|
399
|
+
cpStart: number;
|
|
400
|
+
cpEnd: number;
|
|
401
|
+
text: string;
|
|
402
|
+
state: CharState;
|
|
403
|
+
}
|
|
404
|
+
export interface ParagraphRange {
|
|
405
|
+
cpStart: number;
|
|
406
|
+
cpEnd: number;
|
|
407
|
+
terminator: string;
|
|
408
|
+
styleId: number;
|
|
409
|
+
properties: DecodedProperty[];
|
|
410
|
+
}
|
|
411
|
+
export interface FieldInstructionHyperlink {
|
|
412
|
+
type: 'hyperlink';
|
|
413
|
+
href: string;
|
|
414
|
+
}
|
|
415
|
+
export interface FieldInstructionIncludePicture {
|
|
416
|
+
type: 'includePicture';
|
|
417
|
+
target: string;
|
|
418
|
+
}
|
|
419
|
+
export interface FieldInstructionRaw {
|
|
420
|
+
type: 'embed' | 'link' | 'unknown';
|
|
421
|
+
raw: string;
|
|
422
|
+
}
|
|
423
|
+
export type FieldInstruction = FieldInstructionHyperlink | FieldInstructionIncludePicture | FieldInstructionRaw;
|
|
424
|
+
export interface ImageAsset {
|
|
425
|
+
id: string;
|
|
426
|
+
type: 'image';
|
|
427
|
+
mime: string;
|
|
428
|
+
bytes: Uint8Array;
|
|
429
|
+
dataUrl: string;
|
|
430
|
+
meta?: Record<string, unknown>;
|
|
431
|
+
}
|
|
432
|
+
export interface AttachmentAsset {
|
|
433
|
+
id: string;
|
|
434
|
+
type: 'attachment';
|
|
435
|
+
name: string;
|
|
436
|
+
mime: string;
|
|
437
|
+
bytes: Uint8Array;
|
|
438
|
+
dataUrl: string;
|
|
439
|
+
meta?: Record<string, unknown>;
|
|
440
|
+
}
|
|
441
|
+
export type MsDocAsset = ImageAsset | AttachmentAsset;
|
|
442
|
+
export interface ObjectPoolInfo {
|
|
443
|
+
entry: CFBEntry;
|
|
444
|
+
streams: CFBEntry[];
|
|
445
|
+
displayName: string;
|
|
446
|
+
attachment: AttachmentAsset | null;
|
|
447
|
+
objectData: Uint8Array | null;
|
|
448
|
+
}
|
|
449
|
+
export interface TextInlineNode {
|
|
450
|
+
type: 'text';
|
|
451
|
+
text: string;
|
|
452
|
+
style: CharState;
|
|
453
|
+
href?: string;
|
|
454
|
+
}
|
|
455
|
+
export interface ImageInlineNode {
|
|
456
|
+
type: 'image';
|
|
457
|
+
asset: ImageAsset;
|
|
458
|
+
style: CharState;
|
|
459
|
+
href?: string;
|
|
460
|
+
}
|
|
461
|
+
export interface AttachmentInlineNode {
|
|
462
|
+
type: 'attachment';
|
|
463
|
+
asset: AttachmentAsset;
|
|
464
|
+
style: CharState;
|
|
465
|
+
href?: string;
|
|
466
|
+
}
|
|
467
|
+
export interface LineBreakInlineNode {
|
|
468
|
+
type: 'lineBreak';
|
|
469
|
+
}
|
|
470
|
+
export interface PageBreakInlineNode {
|
|
471
|
+
type: 'pageBreak';
|
|
472
|
+
}
|
|
473
|
+
export type InlineNode = TextInlineNode | ImageInlineNode | AttachmentInlineNode | LineBreakInlineNode | PageBreakInlineNode;
|
|
474
|
+
export interface ParagraphBlock {
|
|
475
|
+
type: 'paragraph';
|
|
476
|
+
id: string;
|
|
477
|
+
styleId: number;
|
|
478
|
+
styleName: string;
|
|
479
|
+
paraState: ParaState;
|
|
480
|
+
inlines: InlineNode[];
|
|
481
|
+
text: string;
|
|
482
|
+
}
|
|
483
|
+
export interface TableCellBlock {
|
|
484
|
+
id: string;
|
|
485
|
+
paragraphs: ParagraphBlock[];
|
|
486
|
+
meta: TableCellMeta | null;
|
|
487
|
+
colIndex?: number;
|
|
488
|
+
colspan?: number;
|
|
489
|
+
rowspan?: number;
|
|
490
|
+
hidden?: boolean;
|
|
491
|
+
}
|
|
492
|
+
export interface TableRowBlock {
|
|
493
|
+
id: string;
|
|
494
|
+
cells: TableCellBlock[];
|
|
495
|
+
state: TableState;
|
|
496
|
+
gridWidthTwips: number;
|
|
497
|
+
}
|
|
498
|
+
export interface TableBlock {
|
|
499
|
+
type: 'table';
|
|
500
|
+
id: string;
|
|
501
|
+
depth: number;
|
|
502
|
+
rows: TableRowBlock[];
|
|
503
|
+
state: TableState;
|
|
504
|
+
gridWidthTwips: number;
|
|
505
|
+
}
|
|
506
|
+
export interface AttachmentsBlock {
|
|
507
|
+
type: 'attachments';
|
|
508
|
+
id: string;
|
|
509
|
+
items: AttachmentAsset[];
|
|
510
|
+
}
|
|
511
|
+
export type MsDocBlock = ParagraphBlock | TableBlock | AttachmentsBlock;
|
|
512
|
+
export interface ParagraphModel {
|
|
513
|
+
id: string;
|
|
514
|
+
cpStart: number;
|
|
515
|
+
cpEnd: number;
|
|
516
|
+
terminator: string;
|
|
517
|
+
text: string;
|
|
518
|
+
rawProperties: DecodedProperty[];
|
|
519
|
+
styleId: number;
|
|
520
|
+
styleName: string;
|
|
521
|
+
paraProps: DecodedProperty[];
|
|
522
|
+
paraState: ParaState;
|
|
523
|
+
tableProps: DecodedProperty[];
|
|
524
|
+
tableState: TableState;
|
|
525
|
+
segments: CharSegment[];
|
|
526
|
+
inlines: InlineNode[];
|
|
527
|
+
}
|
|
528
|
+
export interface MsDocParseOptions {
|
|
529
|
+
maxPictureBytes?: number;
|
|
530
|
+
[key: string]: unknown;
|
|
531
|
+
}
|
|
532
|
+
export interface MsDocRenderOptions {
|
|
533
|
+
css?: string;
|
|
534
|
+
}
|
|
535
|
+
export interface MsDocMeta {
|
|
536
|
+
fib: {
|
|
537
|
+
wIdent: number;
|
|
538
|
+
nFib: number;
|
|
539
|
+
fWhichTblStm: number;
|
|
540
|
+
fComplex: boolean;
|
|
541
|
+
fEncrypted: boolean;
|
|
542
|
+
ccpText: number;
|
|
543
|
+
};
|
|
544
|
+
counts: {
|
|
545
|
+
paragraphs: number;
|
|
546
|
+
blocks: number;
|
|
547
|
+
assets: number;
|
|
548
|
+
styles: number;
|
|
549
|
+
fonts: number;
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
export interface MsDocStyleSummary {
|
|
553
|
+
istd: number;
|
|
554
|
+
name: string;
|
|
555
|
+
type?: number;
|
|
556
|
+
basedOn?: number;
|
|
557
|
+
next?: number;
|
|
558
|
+
}
|
|
559
|
+
export interface MsDocParseResult {
|
|
560
|
+
kind: 'msdoc';
|
|
561
|
+
version: number;
|
|
562
|
+
warnings: MsDocWarning[];
|
|
563
|
+
meta: MsDocMeta;
|
|
564
|
+
fonts: FontInfo[];
|
|
565
|
+
styles: MsDocStyleSummary[];
|
|
566
|
+
blocks: MsDocBlock[];
|
|
567
|
+
assets: MsDocAsset[];
|
|
568
|
+
}
|
|
569
|
+
export interface MsDocRenderResult {
|
|
570
|
+
html: string;
|
|
571
|
+
css: string;
|
|
572
|
+
warnings: MsDocWarning[];
|
|
573
|
+
meta: MsDocMeta;
|
|
574
|
+
assets: MsDocAsset[];
|
|
575
|
+
parsed: MsDocParseResult;
|
|
576
|
+
}
|
|
577
|
+
export interface MsDocParseToHtmlOptions {
|
|
578
|
+
workerClient?: MsDocWorkerClientLike;
|
|
579
|
+
parseOptions?: MsDocParseOptions;
|
|
580
|
+
renderOptions?: MsDocRenderOptions;
|
|
581
|
+
}
|
|
582
|
+
export interface MsDocViewerConfig {
|
|
583
|
+
workerClient?: MsDocWorkerClientLike;
|
|
584
|
+
parseOptions?: MsDocParseOptions;
|
|
585
|
+
renderOptions?: MsDocRenderOptions;
|
|
586
|
+
}
|
|
587
|
+
export interface MsDocViewerLoadOptions {
|
|
588
|
+
workerClient?: MsDocWorkerClientLike;
|
|
589
|
+
parseOptions?: MsDocParseOptions;
|
|
590
|
+
renderOptions?: MsDocRenderOptions;
|
|
591
|
+
}
|
|
592
|
+
export interface MsDocViewer {
|
|
593
|
+
load(input: ViewerInput, options?: MsDocViewerLoadOptions): Promise<MsDocRenderResult>;
|
|
594
|
+
mount(rendered: MsDocRenderResult): HTMLElement;
|
|
595
|
+
clear(): void;
|
|
596
|
+
destroy(): void;
|
|
597
|
+
readonly value: MsDocRenderResult | null;
|
|
598
|
+
}
|
|
599
|
+
export type ViewerInput = ArrayBuffer | ArrayBufferView | Blob | string;
|
|
600
|
+
export type WorkerRequestType = 'parse' | 'render' | 'parseToHtml';
|
|
601
|
+
export interface WorkerRequestMap {
|
|
602
|
+
parse: {
|
|
603
|
+
buffer: ArrayBuffer;
|
|
604
|
+
options?: MsDocParseOptions;
|
|
605
|
+
};
|
|
606
|
+
render: {
|
|
607
|
+
parsed: MsDocParseResult;
|
|
608
|
+
options?: MsDocRenderOptions;
|
|
609
|
+
};
|
|
610
|
+
parseToHtml: {
|
|
611
|
+
buffer: ArrayBuffer;
|
|
612
|
+
options?: MsDocParseToHtmlOptions;
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
export interface WorkerResponse<T> {
|
|
616
|
+
id: number;
|
|
617
|
+
ok: boolean;
|
|
618
|
+
result?: T;
|
|
619
|
+
error?: string;
|
|
620
|
+
}
|
|
621
|
+
export interface WorkerLike {
|
|
622
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
623
|
+
addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
624
|
+
addEventListener(type: 'error', listener: (event: ErrorEvent) => void): void;
|
|
625
|
+
removeEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
626
|
+
removeEventListener(type: 'error', listener: (event: ErrorEvent) => void): void;
|
|
627
|
+
terminate(): void;
|
|
628
|
+
}
|
|
629
|
+
export interface MsDocWorkerClientLike {
|
|
630
|
+
parse(input: ArrayBuffer | ArrayBufferView, options?: MsDocParseOptions): Promise<MsDocParseResult>;
|
|
631
|
+
render(parsed: MsDocParseResult, options?: MsDocRenderOptions): Promise<MsDocRenderResult>;
|
|
632
|
+
parseToHtml(input: ArrayBuffer | ArrayBufferView, options?: MsDocParseToHtmlOptions): Promise<MsDocRenderResult>;
|
|
633
|
+
destroy(): void;
|
|
634
|
+
}
|
|
635
|
+
export type CssStyleObject = Record<string, string | number | undefined>;
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/viewer.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MsDocParseToHtmlOptions, MsDocRenderResult, MsDocViewer, MsDocViewerConfig, ViewerInput } from './types.js';
|
|
2
|
+
export declare function mountMsDoc(container: HTMLElement, rendered: MsDocRenderResult): HTMLElement;
|
|
3
|
+
export declare function parseMsDocToHtml(input: ViewerInput, options?: MsDocParseToHtmlOptions): Promise<MsDocRenderResult>;
|
|
4
|
+
/**
|
|
5
|
+
* Small DOM-oriented helper that keeps browser integration trivial.
|
|
6
|
+
* Apps can either use it directly or consume the lower-level parse/render APIs.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createMsDocViewer(container: HTMLElement, config?: MsDocViewerConfig): MsDocViewer;
|
package/dist/viewer.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { parseMsDoc } from './msdoc/parser.js';
|
|
2
|
+
import { renderMsDoc } from './render/html.js';
|
|
3
|
+
async function normalizeInput(input) {
|
|
4
|
+
if (input instanceof ArrayBuffer)
|
|
5
|
+
return input;
|
|
6
|
+
if (ArrayBuffer.isView(input)) {
|
|
7
|
+
const bytes = new Uint8Array(input.byteLength);
|
|
8
|
+
bytes.set(new Uint8Array(input.buffer, input.byteOffset, input.byteLength));
|
|
9
|
+
return bytes.buffer;
|
|
10
|
+
}
|
|
11
|
+
if (typeof Blob !== 'undefined' && input instanceof Blob) {
|
|
12
|
+
return await input.arrayBuffer();
|
|
13
|
+
}
|
|
14
|
+
if (typeof input === 'string') {
|
|
15
|
+
const response = await fetch(input);
|
|
16
|
+
if (!response.ok)
|
|
17
|
+
throw new Error(`Failed to fetch document: ${response.status}`);
|
|
18
|
+
return await response.arrayBuffer();
|
|
19
|
+
}
|
|
20
|
+
throw new TypeError('Unsupported input type');
|
|
21
|
+
}
|
|
22
|
+
export function mountMsDoc(container, rendered) {
|
|
23
|
+
if (!container)
|
|
24
|
+
throw new Error('A container element is required');
|
|
25
|
+
container.innerHTML = `<style data-msdoc>${rendered.css}</style><div class="msdoc-root">${rendered.html}</div>`;
|
|
26
|
+
return container;
|
|
27
|
+
}
|
|
28
|
+
export async function parseMsDocToHtml(input, options = {}) {
|
|
29
|
+
const buffer = await normalizeInput(input);
|
|
30
|
+
if (options.workerClient) {
|
|
31
|
+
return options.workerClient.parseToHtml(buffer, {
|
|
32
|
+
parseOptions: options.parseOptions || {},
|
|
33
|
+
renderOptions: options.renderOptions || {},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const parsed = parseMsDoc(buffer, options.parseOptions || {});
|
|
37
|
+
return renderMsDoc(parsed, options.renderOptions || {});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Small DOM-oriented helper that keeps browser integration trivial.
|
|
41
|
+
* Apps can either use it directly or consume the lower-level parse/render APIs.
|
|
42
|
+
*/
|
|
43
|
+
export function createMsDocViewer(container, config = {}) {
|
|
44
|
+
let current = null;
|
|
45
|
+
return {
|
|
46
|
+
async load(input, options = {}) {
|
|
47
|
+
const rendered = await parseMsDocToHtml(input, {
|
|
48
|
+
workerClient: options.workerClient || config.workerClient,
|
|
49
|
+
parseOptions: { ...(config.parseOptions || {}), ...(options.parseOptions || {}) },
|
|
50
|
+
renderOptions: { ...(config.renderOptions || {}), ...(options.renderOptions || {}) },
|
|
51
|
+
});
|
|
52
|
+
mountMsDoc(container, rendered);
|
|
53
|
+
current = rendered;
|
|
54
|
+
return rendered;
|
|
55
|
+
},
|
|
56
|
+
mount(rendered) {
|
|
57
|
+
current = rendered;
|
|
58
|
+
return mountMsDoc(container, rendered);
|
|
59
|
+
},
|
|
60
|
+
clear() {
|
|
61
|
+
container.innerHTML = '';
|
|
62
|
+
current = null;
|
|
63
|
+
},
|
|
64
|
+
destroy() {
|
|
65
|
+
this.clear();
|
|
66
|
+
},
|
|
67
|
+
get value() {
|
|
68
|
+
return current;
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|