@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.
@@ -0,0 +1,405 @@
1
+ import { JC_MAP, UNDERLINE_MAP, VERTICAL_ALIGN_MAP } from './constants.js';
2
+ export function propertyArrayToMaps(properties) {
3
+ const out = { char: {}, para: {}, table: {} };
4
+ for (const prop of properties || []) {
5
+ if (prop.kind === 'unknown')
6
+ continue;
7
+ const bucket = out[prop.kind];
8
+ bucket[prop.name] = prop.value;
9
+ }
10
+ return out;
11
+ }
12
+ export function charPropsToState(properties) {
13
+ const state = {
14
+ bold: false,
15
+ italic: false,
16
+ strike: false,
17
+ underline: 0,
18
+ fontSizeHalfPoints: undefined,
19
+ fontFamilyId: undefined,
20
+ colorIndex: undefined,
21
+ highlight: undefined,
22
+ spacing: 0,
23
+ positionHalfPoints: 0,
24
+ scale: 100,
25
+ hidden: false,
26
+ smallCaps: false,
27
+ caps: false,
28
+ outline: false,
29
+ shadow: false,
30
+ emboss: false,
31
+ imprint: false,
32
+ rtl: false,
33
+ pictureOffset: undefined,
34
+ data: false,
35
+ ole2: false,
36
+ object: false,
37
+ special: false,
38
+ charStyleId: undefined,
39
+ };
40
+ for (const prop of properties || []) {
41
+ switch (prop.name) {
42
+ case 'plain':
43
+ if (prop.value) {
44
+ state.bold = false;
45
+ state.italic = false;
46
+ state.strike = false;
47
+ state.underline = 0;
48
+ state.smallCaps = false;
49
+ state.caps = false;
50
+ }
51
+ break;
52
+ case 'bold':
53
+ case 'italic':
54
+ case 'strike':
55
+ case 'hidden':
56
+ case 'smallCaps':
57
+ case 'caps':
58
+ case 'outline':
59
+ case 'shadow':
60
+ case 'emboss':
61
+ case 'imprint':
62
+ case 'rtl':
63
+ case 'data':
64
+ case 'ole2':
65
+ case 'object':
66
+ case 'special':
67
+ state[prop.name] = Boolean(prop.value);
68
+ break;
69
+ case 'underline':
70
+ state.underline = prop.value ?? 0;
71
+ break;
72
+ case 'fontSizeHalfPoints':
73
+ state.fontSizeHalfPoints = prop.value;
74
+ break;
75
+ case 'fontFamilyId':
76
+ state.fontFamilyId = prop.value;
77
+ break;
78
+ case 'colorIndex':
79
+ state.colorIndex = prop.value;
80
+ break;
81
+ case 'highlight':
82
+ state.highlight = prop.value;
83
+ break;
84
+ case 'spacing':
85
+ state.spacing = prop.value || 0;
86
+ break;
87
+ case 'positionHalfPoints':
88
+ state.positionHalfPoints = prop.value || 0;
89
+ break;
90
+ case 'scale':
91
+ state.scale = prop.value || 100;
92
+ break;
93
+ case 'pictureOffset':
94
+ state.pictureOffset = prop.value;
95
+ break;
96
+ case 'charStyleId':
97
+ state.charStyleId = prop.value;
98
+ break;
99
+ default:
100
+ state[prop.name] = prop.value;
101
+ break;
102
+ }
103
+ }
104
+ return state;
105
+ }
106
+ export function paraPropsToState(properties) {
107
+ const state = {
108
+ styleId: 0,
109
+ alignment: 0,
110
+ spacingBefore: 0,
111
+ spacingAfter: 0,
112
+ lineSpacing: 0,
113
+ leftIndent: 0,
114
+ rightIndent: 0,
115
+ firstLineIndent: 0,
116
+ keepLines: false,
117
+ keepNext: false,
118
+ pageBreakBefore: false,
119
+ widowControl: false,
120
+ inTable: false,
121
+ tableRowEnd: false,
122
+ innerTableCell: false,
123
+ innerTableRowEnd: false,
124
+ itap: 0,
125
+ dtap: 0,
126
+ listLevel: undefined,
127
+ listId: undefined,
128
+ rtlPara: false,
129
+ adjustRight: false,
130
+ frameLeft: undefined,
131
+ frameTop: undefined,
132
+ frameWidth: undefined,
133
+ frameHeight: undefined,
134
+ framePosition: undefined,
135
+ frameWrap: undefined,
136
+ borders: {},
137
+ shading: undefined,
138
+ };
139
+ for (const prop of properties || []) {
140
+ switch (prop.name) {
141
+ case 'styleId':
142
+ state.styleId = prop.value || 0;
143
+ break;
144
+ case 'alignment':
145
+ state.alignment = prop.value ?? 0;
146
+ break;
147
+ case 'spacingBefore':
148
+ state.spacingBefore = prop.value || 0;
149
+ break;
150
+ case 'spacingAfter':
151
+ state.spacingAfter = prop.value || 0;
152
+ break;
153
+ case 'lineSpacing':
154
+ state.lineSpacing = prop.value || 0;
155
+ break;
156
+ case 'leftIndent':
157
+ state.leftIndent = prop.value || 0;
158
+ break;
159
+ case 'rightIndent':
160
+ state.rightIndent = prop.value || 0;
161
+ break;
162
+ case 'firstLineIndent':
163
+ state.firstLineIndent = prop.value || 0;
164
+ break;
165
+ case 'keepLines':
166
+ case 'keepNext':
167
+ case 'pageBreakBefore':
168
+ case 'widowControl':
169
+ case 'inTable':
170
+ case 'tableRowEnd':
171
+ case 'innerTableCell':
172
+ case 'innerTableRowEnd':
173
+ case 'rtlPara':
174
+ case 'adjustRight':
175
+ state[prop.name] = Boolean(prop.value);
176
+ break;
177
+ case 'itap':
178
+ state.itap = prop.value || 0;
179
+ break;
180
+ case 'dtap':
181
+ state.dtap = prop.value || 0;
182
+ break;
183
+ case 'listLevel':
184
+ state.listLevel = prop.value;
185
+ break;
186
+ case 'listId':
187
+ state.listId = prop.value;
188
+ break;
189
+ case 'frameLeft':
190
+ state.frameLeft = prop.value;
191
+ break;
192
+ case 'frameTop':
193
+ state.frameTop = prop.value;
194
+ break;
195
+ case 'frameWidth':
196
+ state.frameWidth = prop.value;
197
+ break;
198
+ case 'frameHeight':
199
+ state.frameHeight = prop.value;
200
+ break;
201
+ case 'framePosition':
202
+ state.framePosition = prop.value;
203
+ break;
204
+ case 'frameWrap':
205
+ state.frameWrap = prop.value;
206
+ break;
207
+ case 'borderTop':
208
+ state.borders.top = prop.value;
209
+ break;
210
+ case 'borderLeft':
211
+ state.borders.left = prop.value;
212
+ break;
213
+ case 'borderBottom':
214
+ state.borders.bottom = prop.value;
215
+ break;
216
+ case 'borderRight':
217
+ state.borders.right = prop.value;
218
+ break;
219
+ case 'borderBetween':
220
+ state.borders.between = prop.value;
221
+ break;
222
+ case 'borderBar':
223
+ state.borders.bar = prop.value;
224
+ break;
225
+ case 'shading':
226
+ state.shading = prop.value;
227
+ break;
228
+ default:
229
+ state[prop.name] = prop.value;
230
+ break;
231
+ }
232
+ }
233
+ return state;
234
+ }
235
+ export function tablePropsToState(properties) {
236
+ const state = {
237
+ styleId: undefined,
238
+ alignment: 0,
239
+ leftIndent: 0,
240
+ gapHalf: 0,
241
+ cantSplit: false,
242
+ header: false,
243
+ rowHeight: 0,
244
+ rtl: false,
245
+ positionCode: undefined,
246
+ absLeft: undefined,
247
+ absTop: undefined,
248
+ distanceLeft: undefined,
249
+ distanceTop: undefined,
250
+ tableWidth: undefined,
251
+ autoFit: undefined,
252
+ widthBefore: undefined,
253
+ widthAfter: undefined,
254
+ defTable: undefined,
255
+ operations: [],
256
+ };
257
+ for (const prop of properties || []) {
258
+ switch (prop.name) {
259
+ case 'styleId':
260
+ state.styleId = prop.value;
261
+ break;
262
+ case 'alignment':
263
+ state.alignment = prop.value ?? 0;
264
+ break;
265
+ case 'leftIndent':
266
+ state.leftIndent = prop.value || 0;
267
+ break;
268
+ case 'gapHalf':
269
+ state.gapHalf = prop.value || 0;
270
+ break;
271
+ case 'cantSplit':
272
+ case 'header':
273
+ case 'rtl':
274
+ state[prop.name] = Boolean(prop.value);
275
+ break;
276
+ case 'rowHeight':
277
+ state.rowHeight = prop.value || 0;
278
+ break;
279
+ case 'positionCode':
280
+ state.positionCode = prop.value;
281
+ break;
282
+ case 'absLeft':
283
+ state.absLeft = prop.value;
284
+ break;
285
+ case 'absTop':
286
+ state.absTop = prop.value;
287
+ break;
288
+ case 'distanceLeft':
289
+ state.distanceLeft = prop.value;
290
+ break;
291
+ case 'distanceTop':
292
+ state.distanceTop = prop.value;
293
+ break;
294
+ case 'tableWidth':
295
+ state.tableWidth = prop.value;
296
+ break;
297
+ case 'autoFit':
298
+ state.autoFit = prop.value;
299
+ break;
300
+ case 'widthBefore':
301
+ state.widthBefore = prop.value;
302
+ break;
303
+ case 'widthAfter':
304
+ state.widthAfter = prop.value;
305
+ break;
306
+ case 'defTable':
307
+ state.defTable = prop.value;
308
+ break;
309
+ default:
310
+ state.operations.push(prop);
311
+ break;
312
+ }
313
+ }
314
+ return state;
315
+ }
316
+ export function getTableDepth(paraState) {
317
+ if (!paraState?.inTable)
318
+ return 0;
319
+ return Math.max(1, paraState.itap || 0 || (paraState.dtap ? paraState.dtap : 1));
320
+ }
321
+ export function cssTextAlign(value) {
322
+ return JC_MAP[value] || 'left';
323
+ }
324
+ export function cssUnderline(value) {
325
+ return UNDERLINE_MAP[value] || (value ? 'single' : 'none');
326
+ }
327
+ export function cssVerticalAlign(value) {
328
+ return VERTICAL_ALIGN_MAP[value] || 'top';
329
+ }
330
+ export function rangeApply(list, range, callback) {
331
+ if (!range)
332
+ return;
333
+ const first = Math.max(0, range.first || 0);
334
+ const lim = Math.max(first, range.lim || first);
335
+ for (let i = first; i < lim && i < list.length; i += 1)
336
+ callback(list[i], i);
337
+ }
338
+ export function applyTableStateToCells(tableState) {
339
+ const def = tableState?.defTable;
340
+ if (!def || !Array.isArray(def.cells))
341
+ return [];
342
+ const cells = def.cells.map((cell, index) => ({
343
+ index,
344
+ width: cell?.wWidth,
345
+ ftsWidth: cell?.tcgrf?.ftsWidth,
346
+ borders: (cell?.borders || {}),
347
+ merge: cell?.tcgrf?.horzMerge || 0,
348
+ vertMerge: cell?.tcgrf?.vertMerge || 0,
349
+ vertAlign: cell?.tcgrf?.vertAlign || 0,
350
+ fitText: Boolean(cell?.tcgrf?.fitText),
351
+ noWrap: Boolean(cell?.tcgrf?.noWrap),
352
+ hideMark: Boolean(cell?.tcgrf?.hideMark),
353
+ textFlow: cell?.tcgrf?.textFlow || 0,
354
+ rightBoundary: def.rgdxaCenter?.[index + 1],
355
+ leftBoundary: def.rgdxaCenter?.[index],
356
+ }));
357
+ for (const op of tableState.operations || []) {
358
+ switch (op.name) {
359
+ case 'merge':
360
+ rangeApply(cells, op.value, (cell, idx) => {
361
+ const range = op.value;
362
+ if (idx === range.first)
363
+ cell.merge = 2;
364
+ else
365
+ cell.merge = 1;
366
+ });
367
+ break;
368
+ case 'split':
369
+ rangeApply(cells, op.value, (cell) => { cell.merge = 0; });
370
+ break;
371
+ case 'cellWidth':
372
+ case 'columnWidth':
373
+ rangeApply(cells, op.value.range, (cell) => {
374
+ const value = op.value;
375
+ cell.width = value.width;
376
+ cell.ftsWidth = value.ftsWidth;
377
+ });
378
+ break;
379
+ case 'vertMerge':
380
+ rangeApply(cells, op.value.range, (cell) => { cell.vertMerge = op.value.value; });
381
+ break;
382
+ case 'vertAlign':
383
+ rangeApply(cells, op.value.range, (cell) => { cell.vertAlign = op.value.value; });
384
+ break;
385
+ case 'setBorder':
386
+ rangeApply(cells, op.value.range, (cell) => { cell.borders = { ...(cell.borders || {}), all: op.value.border }; });
387
+ break;
388
+ case 'setShading':
389
+ rangeApply(cells, op.value.range, (cell) => { cell.shading = op.value.value; });
390
+ break;
391
+ case 'fitText':
392
+ rangeApply(cells, op.value.range, (cell) => { cell.fitText = Boolean(op.value.value); });
393
+ break;
394
+ case 'cellNoWrap':
395
+ rangeApply(cells, op.value.range, (cell) => { cell.noWrap = Boolean(op.value.value); });
396
+ break;
397
+ case 'textFlow':
398
+ rangeApply(cells, op.value.range, (cell) => { cell.textFlow = op.value.value; });
399
+ break;
400
+ default:
401
+ break;
402
+ }
403
+ }
404
+ return cells;
405
+ }
@@ -0,0 +1,153 @@
1
+ import type { DecodedProperty } from '../types.js';
2
+ export declare const SprmCodes: {
3
+ readonly sprmCFRMarkDel: 2048;
4
+ readonly sprmCFRMark: 2049;
5
+ readonly sprmCFFldVanish: 2050;
6
+ readonly sprmCPicLocation: 27139;
7
+ readonly sprmCIbstRMark: 18436;
8
+ readonly sprmCDttmRMark: 26629;
9
+ readonly sprmCFData: 2054;
10
+ readonly sprmCFOle2: 2058;
11
+ readonly sprmCHighlight: 10764;
12
+ readonly sprmCIstd: 18992;
13
+ readonly sprmCPlain: 10803;
14
+ readonly sprmCFBold: 2101;
15
+ readonly sprmCFItalic: 2102;
16
+ readonly sprmCFStrike: 2103;
17
+ readonly sprmCFOutline: 2104;
18
+ readonly sprmCFShadow: 2105;
19
+ readonly sprmCFSmallCaps: 2106;
20
+ readonly sprmCFCaps: 2107;
21
+ readonly sprmCFVanish: 2108;
22
+ readonly sprmCKul: 10814;
23
+ readonly sprmCDxaSpace: 34880;
24
+ readonly sprmCIco: 10818;
25
+ readonly sprmCHps: 19011;
26
+ readonly sprmCHpsPos: 18501;
27
+ readonly sprmCSymbol: 27145;
28
+ readonly sprmCHpsKern: 18507;
29
+ readonly sprmCRgFtc0: 19023;
30
+ readonly sprmCRgFtc1: 19024;
31
+ readonly sprmCRgFtc2: 19025;
32
+ readonly sprmCCharScale: 18514;
33
+ readonly sprmCFDStrike: 10835;
34
+ readonly sprmCFImprint: 2132;
35
+ readonly sprmCFSpec: 2133;
36
+ readonly sprmCFObj: 2134;
37
+ readonly sprmCFEmboss: 2136;
38
+ readonly sprmCFBiDi: 2138;
39
+ readonly sprmCFBoldBi: 2140;
40
+ readonly sprmCFItalicBi: 2141;
41
+ readonly sprmCFtcBi: 19038;
42
+ readonly sprmCIcoBi: 19040;
43
+ readonly sprmCHpsBi: 19041;
44
+ readonly sprmPIstd: 17920;
45
+ readonly sprmPIstdPermute: 50689;
46
+ readonly sprmPIncLvl: 9730;
47
+ readonly sprmPJc80: 9219;
48
+ readonly sprmPFKeep: 9221;
49
+ readonly sprmPFKeepFollow: 9222;
50
+ readonly sprmPFPageBreakBefore: 9223;
51
+ readonly sprmPIlvl: 9738;
52
+ readonly sprmPIlfo: 17931;
53
+ readonly sprmPChgTabsPapx: 50701;
54
+ readonly sprmPDxaRight80: 33806;
55
+ readonly sprmPDxaLeft80: 33807;
56
+ readonly sprmPNest80: 17936;
57
+ readonly sprmPDxaLeft180: 33809;
58
+ readonly sprmPDyaLine: 25618;
59
+ readonly sprmPDyaBefore: 42003;
60
+ readonly sprmPDyaAfter: 42004;
61
+ readonly sprmPChgTabs: 50709;
62
+ readonly sprmPFInTable: 9238;
63
+ readonly sprmPFTtp: 9239;
64
+ readonly sprmPDxaAbs: 33816;
65
+ readonly sprmPDyaAbs: 33817;
66
+ readonly sprmPDxaWidth: 33818;
67
+ readonly sprmPPc: 9755;
68
+ readonly sprmPWr: 9251;
69
+ readonly sprmPBrcTop80: 25636;
70
+ readonly sprmPBrcLeft80: 25637;
71
+ readonly sprmPBrcBottom80: 25638;
72
+ readonly sprmPBrcRight80: 25639;
73
+ readonly sprmPBrcBetween80: 25640;
74
+ readonly sprmPBrcBar80: 26153;
75
+ readonly sprmPWHeightAbs: 17451;
76
+ readonly sprmPDcs: 17452;
77
+ readonly sprmPShd80: 17453;
78
+ readonly sprmPDyaFromText: 33838;
79
+ readonly sprmPDxaFromText: 33839;
80
+ readonly sprmPFLocked: 9264;
81
+ readonly sprmPFWidowControl: 9265;
82
+ readonly sprmPFBiDi: 9281;
83
+ readonly sprmPHugePapx: 26182;
84
+ readonly sprmPFAdjustRight: 9288;
85
+ readonly sprmPItap: 26185;
86
+ readonly sprmPDtap: 26186;
87
+ readonly sprmPFInnerTableCell: 9291;
88
+ readonly sprmPFInnerTtp: 9292;
89
+ readonly sprmPShd: 50765;
90
+ readonly sprmPBrcTop: 50766;
91
+ readonly sprmPBrcLeft: 50767;
92
+ readonly sprmPBrcBottom: 50768;
93
+ readonly sprmPBrcRight: 50769;
94
+ readonly sprmPBrcBetween: 50770;
95
+ readonly sprmPBrcBar: 50771;
96
+ readonly sprmPDxcRight: 17493;
97
+ readonly sprmPDxcLeft: 17494;
98
+ readonly sprmPDxcLeft1: 17495;
99
+ readonly sprmPDylBefore: 17496;
100
+ readonly sprmPDylAfter: 17497;
101
+ readonly sprmPFDyaBeforeAuto: 9307;
102
+ readonly sprmPFDyaAfterAuto: 9308;
103
+ readonly sprmPDxaRight: 33885;
104
+ readonly sprmPDxaLeft: 33886;
105
+ readonly sprmPNest: 18015;
106
+ readonly sprmPDxaLeft1: 33888;
107
+ readonly sprmPJc: 9313;
108
+ readonly sprmTJc90: 21504;
109
+ readonly sprmTDxaLeft: 38401;
110
+ readonly sprmTDxaGapHalf: 38402;
111
+ readonly sprmTFCantSplit90: 13315;
112
+ readonly sprmTTableHeader: 13316;
113
+ readonly sprmTTableBorders80: 54789;
114
+ readonly sprmTDyaRowHeight: 37895;
115
+ readonly sprmTDefTable: 54792;
116
+ readonly sprmTDefTableShd80: 54793;
117
+ readonly sprmTTlp: 29706;
118
+ readonly sprmTFBiDi: 22027;
119
+ readonly sprmTDefTableShd3rd: 54796;
120
+ readonly sprmTPc: 13837;
121
+ readonly sprmTDxaAbs: 37902;
122
+ readonly sprmTDyaAbs: 37903;
123
+ readonly sprmTDxaFromText: 37904;
124
+ readonly sprmTDyaFromText: 37905;
125
+ readonly sprmTDefTableShd: 54802;
126
+ readonly sprmTTableBorders: 54803;
127
+ readonly sprmTTableWidth: 62996;
128
+ readonly sprmTFAutofit: 13845;
129
+ readonly sprmTWidthBefore: 62999;
130
+ readonly sprmTWidthAfter: 63000;
131
+ readonly sprmTSetBrc80: 54816;
132
+ readonly sprmTInsert: 30241;
133
+ readonly sprmTDelete: 22050;
134
+ readonly sprmTDxaCol: 30243;
135
+ readonly sprmTMerge: 22052;
136
+ readonly sprmTSplit: 22053;
137
+ readonly sprmTTextFlow: 30249;
138
+ readonly sprmTVertMerge: 54827;
139
+ readonly sprmTVertAlign: 54828;
140
+ readonly sprmTSetShd: 54829;
141
+ readonly sprmTSetShdOdd: 54830;
142
+ readonly sprmTSetBrc: 54831;
143
+ readonly sprmTCellPadding: 54834;
144
+ readonly sprmTCellPaddingDefault: 54835;
145
+ readonly sprmTCellWidth: 54837;
146
+ readonly sprmTFitText: 63030;
147
+ readonly sprmTFCellNoWrap: 54841;
148
+ readonly sprmTIstd: 22074;
149
+ };
150
+ export declare function getSprmGroup(sprm: number): number;
151
+ export declare function getSprmOperandLength(buffer: Uint8Array, offset: number, sprm: number): number;
152
+ export declare function decodeSprm(sprm: number, operandBytes: Uint8Array): DecodedProperty;
153
+ export declare function decodeGrpprl(buffer: Uint8Array, startOffset: number, endOffset: number): DecodedProperty[];