hf-sheet 1.0.1

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.
Files changed (75) hide show
  1. package/README.md +156 -0
  2. package/dist/hf-sheet.css +2 -0
  3. package/dist/hf-sheet.js +243 -0
  4. package/dist/hf-sheet.umd.cjs +1 -0
  5. package/dist/index.d.ts +160 -0
  6. package/dist/luckysheet/assets/iconfont/Anton-Regular.ttf +0 -0
  7. package/dist/luckysheet/assets/iconfont/HanaleiFill-Regular.ttf +0 -0
  8. package/dist/luckysheet/assets/iconfont/Pacifico-Regular.ttf +0 -0
  9. package/dist/luckysheet/assets/iconfont/demo.css +539 -0
  10. package/dist/luckysheet/assets/iconfont/demo_index.html +2700 -0
  11. package/dist/luckysheet/assets/iconfont/iconfont.css +457 -0
  12. package/dist/luckysheet/assets/iconfont/iconfont.eot +0 -0
  13. package/dist/luckysheet/assets/iconfont/iconfont.js +1 -0
  14. package/dist/luckysheet/assets/iconfont/iconfont.json +779 -0
  15. package/dist/luckysheet/assets/iconfont/iconfont.svg +356 -0
  16. package/dist/luckysheet/assets/iconfont/iconfont.ttf +0 -0
  17. package/dist/luckysheet/assets/iconfont/iconfont.woff +0 -0
  18. package/dist/luckysheet/assets/iconfont/iconfont.woff2 +0 -0
  19. package/dist/luckysheet/css/EwaAntH.gif +0 -0
  20. package/dist/luckysheet/css/EwaAntV.gif +0 -0
  21. package/dist/luckysheet/css/arrow-down.png +0 -0
  22. package/dist/luckysheet/css/loading.gif +0 -0
  23. package/dist/luckysheet/css/luckysheet.css +7998 -0
  24. package/dist/luckysheet/css/menuSprite.svg +505 -0
  25. package/dist/luckysheet/css/paint_16px.ico +0 -0
  26. package/dist/luckysheet/css/paint_24px.ico +0 -0
  27. package/dist/luckysheet/css/paint_32px.ico +0 -0
  28. package/dist/luckysheet/css/sprite38.svg +528 -0
  29. package/dist/luckysheet/css/waffle_sprite.png +0 -0
  30. package/dist/luckysheet/demoData/chat.js +410 -0
  31. package/dist/luckysheet/demoData/demoFeature.js +42 -0
  32. package/dist/luckysheet/demoData/getTargetData.js +5496 -0
  33. package/dist/luckysheet/demoData/sheetCell.js +1578 -0
  34. package/dist/luckysheet/demoData/sheetChart.js +4918 -0
  35. package/dist/luckysheet/demoData/sheetComment.js +67 -0
  36. package/dist/luckysheet/demoData/sheetConditionFormat.js +6568 -0
  37. package/dist/luckysheet/demoData/sheetDataVerification.js +579 -0
  38. package/dist/luckysheet/demoData/sheetFormula.js +6600 -0
  39. package/dist/luckysheet/demoData/sheetPicture.js +159 -0
  40. package/dist/luckysheet/demoData/sheetPivotTable.js +189 -0
  41. package/dist/luckysheet/demoData/sheetPivotTableData.js +741 -0
  42. package/dist/luckysheet/demoData/sheetSparkline.js +7066 -0
  43. package/dist/luckysheet/demoData/sheetTable.js +1068 -0
  44. package/dist/luckysheet/expendPlugins/chart/chartmix.css +1 -0
  45. package/dist/luckysheet/expendPlugins/chart/chartmix.umd.min.js +12 -0
  46. package/dist/luckysheet/expendPlugins/chart/chartmix.umd.min.js.map +1 -0
  47. package/dist/luckysheet/expendPlugins/print/print.css +46 -0
  48. package/dist/luckysheet/expendPlugins/print/print.js +0 -0
  49. package/dist/luckysheet/fonts/FontAwesome.otf +0 -0
  50. package/dist/luckysheet/fonts/fontawesome-webfont.eot +0 -0
  51. package/dist/luckysheet/fonts/fontawesome-webfont.svg +2671 -0
  52. package/dist/luckysheet/fonts/fontawesome-webfont.ttf +0 -0
  53. package/dist/luckysheet/fonts/fontawesome-webfont.woff +0 -0
  54. package/dist/luckysheet/fonts/fontawesome-webfont.woff2 +0 -0
  55. package/dist/luckysheet/index.html +1965 -0
  56. package/dist/luckysheet/luckyexcel.cjs.js +4722 -0
  57. package/dist/luckysheet/luckyexcel.esm.js +4715 -0
  58. package/dist/luckysheet/luckyexcel.umd.js +7399 -0
  59. package/dist/luckysheet/luckysheet.umd.js +4511 -0
  60. package/dist/luckysheet/luckysheet.umd.js.map +7 -0
  61. package/dist/luckysheet/plugins/css/pluginsCss.css +1 -0
  62. package/dist/luckysheet/plugins/images/CFcolorGradation.png +0 -0
  63. package/dist/luckysheet/plugins/images/CFdataBar.png +0 -0
  64. package/dist/luckysheet/plugins/images/CFicons.png +0 -0
  65. package/dist/luckysheet/plugins/images/icon_dropCell.png +0 -0
  66. package/dist/luckysheet/plugins/images/js.png +0 -0
  67. package/dist/luckysheet/plugins/images/ui-icons_444444_256x240.png +0 -0
  68. package/dist/luckysheet/plugins/images/ui-icons_555555_256x240.png +0 -0
  69. package/dist/luckysheet/plugins/images/ui-icons_777620_256x240.png +0 -0
  70. package/dist/luckysheet/plugins/images/ui-icons_777777_256x240.png +0 -0
  71. package/dist/luckysheet/plugins/images/ui-icons_cc0000_256x240.png +0 -0
  72. package/dist/luckysheet/plugins/images/ui-icons_ffffff_256x240.png +0 -0
  73. package/dist/luckysheet/plugins/js/plugin.js +1 -0
  74. package/dist/luckysheet/plugins/plugins.css +10 -0
  75. package/package.json +53 -0
@@ -0,0 +1,4722 @@
1
+ 'use strict';
2
+
3
+ var dayjs = require('dayjs');
4
+ var JSZip = require('jszip');
5
+
6
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
+
8
+ var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
9
+ var JSZip__default = /*#__PURE__*/_interopDefaultLegacy(JSZip);
10
+
11
+ /*! *****************************************************************************
12
+ Copyright (c) Microsoft Corporation.
13
+
14
+ Permission to use, copy, modify, and/or distribute this software for any
15
+ purpose with or without fee is hereby granted.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
18
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
19
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
20
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
21
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
22
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23
+ PERFORMANCE OF THIS SOFTWARE.
24
+ ***************************************************************************** */
25
+ /* global Reflect, Promise */
26
+
27
+ var extendStatics = function(d, b) {
28
+ extendStatics = Object.setPrototypeOf ||
29
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
30
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
31
+ return extendStatics(d, b);
32
+ };
33
+
34
+ function __extends(d, b) {
35
+ extendStatics(d, b);
36
+ function __() { this.constructor = d; }
37
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
38
+ }
39
+
40
+ var columeHeader_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
41
+ var columeHeader_word_index = { 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24, 'Z': 25 };
42
+ var coreFile = "docProps/core.xml";
43
+ var appFile = "docProps/app.xml";
44
+ var workBookFile = "xl/workbook.xml";
45
+ var calcChainFile = "xl/calcChain.xml";
46
+ var stylesFile = "xl/styles.xml";
47
+ var sharedStringsFile = "xl/sharedStrings.xml";
48
+ var worksheetFilePath = "xl/worksheets/";
49
+ var theme1File = "xl/theme/theme1.xml";
50
+ var workbookRels = "xl/_rels/workbook.xml.rels";
51
+ //Excel Built-In cell type
52
+ var ST_CellType = {
53
+ "Boolean": "b",
54
+ "Date": "d",
55
+ "Error": "e",
56
+ "InlineString": "inlineStr",
57
+ "Number": "n",
58
+ "SharedString": "s",
59
+ "String": "str",
60
+ };
61
+ var numFmtDefault = {
62
+ "0": 'General',
63
+ "1": '0',
64
+ "2": '0.00',
65
+ "3": '#,##0',
66
+ "4": '#,##0.00',
67
+ "9": '0%',
68
+ "10": '0.00%',
69
+ "11": '0.00E+00',
70
+ "12": '# ?/?',
71
+ "13": '# ??/??',
72
+ "14": 'm/d/yy',
73
+ "15": 'd-mmm-yy',
74
+ "16": 'd-mmm',
75
+ "17": 'mmm-yy',
76
+ "18": 'h:mm AM/PM',
77
+ "19": 'h:mm:ss AM/PM',
78
+ "20": 'h:mm',
79
+ "21": 'h:mm:ss',
80
+ "22": 'm/d/yy h:mm',
81
+ "37": '#,##0 ;(#,##0)',
82
+ "38": '#,##0 ;[Red](#,##0)',
83
+ "39": '#,##0.00;(#,##0.00)',
84
+ "40": '#,##0.00;[Red](#,##0.00)',
85
+ "45": 'mm:ss',
86
+ "46": '[h]:mm:ss',
87
+ "47": 'mmss.0',
88
+ "48": '##0.0E+0',
89
+ "49": '@'
90
+ };
91
+ var indexedColors = {
92
+ "0": '00000000',
93
+ "1": '00FFFFFF',
94
+ "2": '00FF0000',
95
+ "3": '0000FF00',
96
+ "4": '000000FF',
97
+ "5": '00FFFF00',
98
+ "6": '00FF00FF',
99
+ "7": '0000FFFF',
100
+ "8": '00000000',
101
+ "9": '00FFFFFF',
102
+ "10": '00FF0000',
103
+ "11": '0000FF00',
104
+ "12": '000000FF',
105
+ "13": '00FFFF00',
106
+ "14": '00FF00FF',
107
+ "15": '0000FFFF',
108
+ "16": '00800000',
109
+ "17": '00008000',
110
+ "18": '00000080',
111
+ "19": '00808000',
112
+ "20": '00800080',
113
+ "21": '00008080',
114
+ "22": '00C0C0C0',
115
+ "23": '00808080',
116
+ "24": '009999FF',
117
+ "25": '00993366',
118
+ "26": '00FFFFCC',
119
+ "27": '00CCFFFF',
120
+ "28": '00660066',
121
+ "29": '00FF8080',
122
+ "30": '000066CC',
123
+ "31": '00CCCCFF',
124
+ "32": '00000080',
125
+ "33": '00FF00FF',
126
+ "34": '00FFFF00',
127
+ "35": '0000FFFF',
128
+ "36": '00800080',
129
+ "37": '00800000',
130
+ "38": '00008080',
131
+ "39": '000000FF',
132
+ "40": '0000CCFF',
133
+ "41": '00CCFFFF',
134
+ "42": '00CCFFCC',
135
+ "43": '00FFFF99',
136
+ "44": '0099CCFF',
137
+ "45": '00FF99CC',
138
+ "46": '00CC99FF',
139
+ "47": '00FFCC99',
140
+ "48": '003366FF',
141
+ "49": '0033CCCC',
142
+ "50": '0099CC00',
143
+ "51": '00FFCC00',
144
+ "52": '00FF9900',
145
+ "53": '00FF6600',
146
+ "54": '00666699',
147
+ "55": '00969696',
148
+ "56": '00003366',
149
+ "57": '00339966',
150
+ "58": '00003300',
151
+ "59": '00333300',
152
+ "60": '00993300',
153
+ "61": '00993366',
154
+ "62": '00333399',
155
+ "63": '00333333',
156
+ "64": null,
157
+ "65": null,
158
+ };
159
+ var borderTypes = {
160
+ "none": 0,
161
+ "thin": 1,
162
+ "hair": 2,
163
+ "dotted": 3,
164
+ "dashed": 4,
165
+ "dashDot": 5,
166
+ "dashDotDot": 6,
167
+ "double": 7,
168
+ "medium": 8,
169
+ "mediumDashed": 9,
170
+ "mediumDashDot": 10,
171
+ "mediumDashDotDot": 11,
172
+ "slantDashDot": 12,
173
+ "thick": 13
174
+ };
175
+ var numFmtDefaultMap = {
176
+ "yyyy/m/d;@": "yyyy/MM/dd",
177
+ "yyyy"年"m"月"d"日";@": "yyyy"年"MM"月"dd"日"",
178
+ "[$-409]yyyy/m/d\\ h:mm\\ AM/PM;@": "yyyy/MM/dd hh:mm AM/PM",
179
+ };
180
+ var fontFamilys = {
181
+ "0": "defualt",
182
+ "1": "Roman",
183
+ "2": "Swiss",
184
+ "3": "Modern",
185
+ "4": "Script",
186
+ "5": "Decorative"
187
+ };
188
+ var DATA_VERIFICATION_MAP = {
189
+ list: "dropdown",
190
+ whole: "number_integer",
191
+ decimal: "number_decimal",
192
+ custom: "text_content",
193
+ textLength: "text_length",
194
+ date: "date",
195
+ "unknown1": "number",
196
+ "unknown2": "checkbox",
197
+ "unknown3": "validity",
198
+ };
199
+ var COMMON_TYPE2 = [
200
+ "number",
201
+ "number_integer",
202
+ "number_decimal",
203
+ "text_length",
204
+ ];
205
+ var DATA_VERIFICATION_TYPE2_MAP = {
206
+ common: {
207
+ between: "bw",
208
+ notBetween: "nb",
209
+ equal: "eq",
210
+ notEqualTo: "ne",
211
+ moreThanThe: "gt",
212
+ lessThan: "lt",
213
+ greaterOrEqualTo: "gte",
214
+ lessThanOrEqualTo: "lte",
215
+ },
216
+ text_content: {
217
+ include: "include",
218
+ exclude: "exclude",
219
+ equal: "equal",
220
+ },
221
+ date: {
222
+ between: "bw",
223
+ notBetween: "nb",
224
+ equal: "eq",
225
+ notEqualTo: "ne",
226
+ earlierThan: "bf",
227
+ noEarlierThan: "nbf",
228
+ laterThan: "af",
229
+ noLaterThan: "naf",
230
+ },
231
+ validity: {
232
+ card: "card",
233
+ phone: "phone",
234
+ },
235
+ };
236
+
237
+ function getcellrange(txt, sheets, sheetId) {
238
+ if (sheets === void 0) { sheets = {}; }
239
+ if (sheetId === void 0) { sheetId = "1"; }
240
+ var val = txt.split("!");
241
+ var sheettxt = "", rangetxt = "", sheetIndex = -1;
242
+ if (val.length > 1) {
243
+ sheettxt = val[0];
244
+ rangetxt = val[1];
245
+ var si = sheets[sheettxt];
246
+ if (si == null) {
247
+ sheetIndex = parseInt(sheetId);
248
+ }
249
+ else {
250
+ sheetIndex = parseInt(si);
251
+ }
252
+ }
253
+ else {
254
+ sheetIndex = parseInt(sheetId);
255
+ rangetxt = val[0];
256
+ }
257
+ if (rangetxt.indexOf(":") == -1) {
258
+ var row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
259
+ var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
260
+ if (!isNaN(row) && !isNaN(col)) {
261
+ return {
262
+ "row": [row, row],
263
+ "column": [col, col],
264
+ "sheetIndex": sheetIndex
265
+ };
266
+ }
267
+ else {
268
+ return null;
269
+ }
270
+ }
271
+ else {
272
+ var rangetxtArray = rangetxt.split(":");
273
+ var row = [], col = [];
274
+ row[0] = parseInt(rangetxtArray[0].replace(/[^0-9]/g, "")) - 1;
275
+ row[1] = parseInt(rangetxtArray[1].replace(/[^0-9]/g, "")) - 1;
276
+ // if (isNaN(row[0])) {
277
+ // row[0] = 0;
278
+ // }
279
+ // if (isNaN(row[1])) {
280
+ // row[1] = sheetdata.length - 1;
281
+ // }
282
+ if (row[0] > row[1]) {
283
+ return null;
284
+ }
285
+ col[0] = ABCatNum(rangetxtArray[0].replace(/[^A-Za-z]/g, ""));
286
+ col[1] = ABCatNum(rangetxtArray[1].replace(/[^A-Za-z]/g, ""));
287
+ // if (isNaN(col[0])) {
288
+ // col[0] = 0;
289
+ // }
290
+ // if (isNaN(col[1])) {
291
+ // col[1] = sheetdata[0].length - 1;
292
+ // }
293
+ if (col[0] > col[1]) {
294
+ return null;
295
+ }
296
+ return {
297
+ "row": row,
298
+ "column": col,
299
+ "sheetIndex": sheetIndex
300
+ };
301
+ }
302
+ }
303
+ //列下标 字母转数字
304
+ function ABCatNum(abc) {
305
+ abc = abc.toUpperCase();
306
+ var abc_len = abc.length;
307
+ if (abc_len == 0) {
308
+ return NaN;
309
+ }
310
+ var abc_array = abc.split("");
311
+ var wordlen = columeHeader_word.length;
312
+ var ret = 0;
313
+ for (var i = abc_len - 1; i >= 0; i--) {
314
+ if (i == abc_len - 1) {
315
+ ret += columeHeader_word_index[abc_array[i]];
316
+ }
317
+ else {
318
+ ret += Math.pow(wordlen, abc_len - i - 1) * (columeHeader_word_index[abc_array[i]] + 1);
319
+ }
320
+ }
321
+ return ret;
322
+ }
323
+ //列下标 数字转字母
324
+ function chatatABC(index) {
325
+ var wordlen = columeHeader_word.length;
326
+ if (index < wordlen) {
327
+ return columeHeader_word[index];
328
+ }
329
+ else {
330
+ var last = 0, ret = "";
331
+ var i = 1, n = 0;
332
+ while (index >= (wordlen / (wordlen - 1)) * (Math.pow(wordlen, i++) - 1)) {
333
+ n = i;
334
+ }
335
+ var index_ab = index - (wordlen / (wordlen - 1)) * (Math.pow(wordlen, n - 1) - 1); //970
336
+ last = index_ab + 1;
337
+ for (var x = n; x > 0; x--) {
338
+ var last1 = last; //-702=268, 3
339
+ if (x == 1) {
340
+ last1 = last1 % wordlen;
341
+ if (last1 == 0) {
342
+ last1 = 26;
343
+ }
344
+ return ret + columeHeader_word[last1 - 1];
345
+ }
346
+ last1 = Math.ceil(last1 / Math.pow(wordlen, x - 1));
347
+ //last1 = last1 % wordlen;
348
+ ret += columeHeader_word[last1 - 1];
349
+ if (x > 1) {
350
+ last = last - (last1 - 1) * wordlen;
351
+ }
352
+ }
353
+ }
354
+ }
355
+ /**
356
+ * @return ratio, default 0.75 1in = 2.54cm = 25.4mm = 72pt = 6pc, pt = 1/72 In, px = 1/dpi In
357
+ */
358
+ function getptToPxRatioByDPI() {
359
+ return 72 / 96;
360
+ }
361
+ /**
362
+ * @emus EMUs, Excel drawing unit
363
+ * @return pixel
364
+ */
365
+ function getPxByEMUs(emus) {
366
+ if (emus == null) {
367
+ return 0;
368
+ }
369
+ var inch = emus / 914400;
370
+ var pt = inch * 72;
371
+ var px = pt / getptToPxRatioByDPI();
372
+ return px;
373
+ }
374
+ /**
375
+ * @dom xml attribute object
376
+ * @attr attribute name
377
+ * @d if attribute is null, return default value
378
+ * @return attribute value
379
+ */
380
+ function getXmlAttibute(dom, attr, d) {
381
+ var value = dom[attr];
382
+ value = value == null ? d : value;
383
+ return value;
384
+ }
385
+ /**
386
+ * @columnWidth Excel column width
387
+ * @return pixel column width
388
+ */
389
+ function getColumnWidthPixel(columnWidth) {
390
+ var pix = Math.round((columnWidth - 0.83) * 8 + 5);
391
+ return pix;
392
+ }
393
+ /**
394
+ * @rowHeight Excel row height
395
+ * @return pixel row height
396
+ */
397
+ function getRowHeightPixel(rowHeight) {
398
+ var pix = Math.round(rowHeight / getptToPxRatioByDPI());
399
+ return pix;
400
+ }
401
+ function LightenDarkenColor(sixColor, tint) {
402
+ var hex = sixColor.substring(sixColor.length - 6, sixColor.length);
403
+ var rgbArray = hexToRgbArray("#" + hex);
404
+ var hslArray = rgbToHsl(rgbArray[0], rgbArray[1], rgbArray[2]);
405
+ if (tint > 0) {
406
+ hslArray[2] = hslArray[2] * (1.0 - tint) + tint;
407
+ }
408
+ else if (tint < 0) {
409
+ hslArray[2] = hslArray[2] * (1.0 + tint);
410
+ }
411
+ else {
412
+ return "#" + hex;
413
+ }
414
+ var newRgbArray = hslToRgb(hslArray[0], hslArray[1], hslArray[2]);
415
+ return rgbToHex("RGB(" + newRgbArray.join(",") + ")");
416
+ }
417
+ function rgbToHex(rgb) {
418
+ //十六进制颜色值的正则表达式
419
+ var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
420
+ // 如果是rgb颜色表示
421
+ if (/^(rgb|RGB)/.test(rgb)) {
422
+ var aColor = rgb.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
423
+ var strHex = "#";
424
+ for (var i = 0; i < aColor.length; i++) {
425
+ var hex = Number(aColor[i]).toString(16);
426
+ if (hex.length < 2) {
427
+ hex = '0' + hex;
428
+ }
429
+ strHex += hex;
430
+ }
431
+ if (strHex.length !== 7) {
432
+ strHex = rgb;
433
+ }
434
+ return strHex;
435
+ }
436
+ else if (reg.test(rgb)) {
437
+ var aNum = rgb.replace(/#/, "").split("");
438
+ if (aNum.length === 6) {
439
+ return rgb;
440
+ }
441
+ else if (aNum.length === 3) {
442
+ var numHex = "#";
443
+ for (var i = 0; i < aNum.length; i += 1) {
444
+ numHex += (aNum[i] + aNum[i]);
445
+ }
446
+ return numHex;
447
+ }
448
+ }
449
+ return rgb;
450
+ }
451
+ function hexToRgbArray(hex) {
452
+ var sColor = hex.toLowerCase();
453
+ //十六进制颜色值的正则表达式
454
+ var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
455
+ // 如果是16进制颜色
456
+ if (sColor && reg.test(sColor)) {
457
+ if (sColor.length === 4) {
458
+ var sColorNew = "#";
459
+ for (var i = 1; i < 4; i += 1) {
460
+ sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
461
+ }
462
+ sColor = sColorNew;
463
+ }
464
+ //处理六位的颜色值
465
+ var sColorChange = [];
466
+ for (var i = 1; i < 7; i += 2) {
467
+ sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
468
+ }
469
+ return sColorChange;
470
+ }
471
+ return null;
472
+ }
473
+ /**
474
+ * HSL颜色值转换为RGB.
475
+ * 换算公式改编自 http://en.wikipedia.org/wiki/HSL_color_space.
476
+ * h, s, 和 l 设定在 [0, 1] 之间
477
+ * 返回的 r, g, 和 b 在 [0, 255]之间
478
+ *
479
+ * @param Number h 色相
480
+ * @param Number s 饱和度
481
+ * @param Number l 亮度
482
+ * @return Array RGB色值数值
483
+ */
484
+ function hslToRgb(h, s, l) {
485
+ var r, g, b;
486
+ if (s == 0) {
487
+ r = g = b = l; // achromatic
488
+ }
489
+ else {
490
+ var hue2rgb = function hue2rgb(p, q, t) {
491
+ if (t < 0)
492
+ t += 1;
493
+ if (t > 1)
494
+ t -= 1;
495
+ if (t < 1 / 6)
496
+ return p + (q - p) * 6 * t;
497
+ if (t < 1 / 2)
498
+ return q;
499
+ if (t < 2 / 3)
500
+ return p + (q - p) * (2 / 3 - t) * 6;
501
+ return p;
502
+ };
503
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
504
+ var p = 2 * l - q;
505
+ r = hue2rgb(p, q, h + 1 / 3);
506
+ g = hue2rgb(p, q, h);
507
+ b = hue2rgb(p, q, h - 1 / 3);
508
+ }
509
+ return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
510
+ }
511
+ /**
512
+ * RGB 颜色值转换为 HSL.
513
+ * 转换公式参考自 http://en.wikipedia.org/wiki/HSL_color_space.
514
+ * r, g, 和 b 需要在 [0, 255] 范围内
515
+ * 返回的 h, s, 和 l 在 [0, 1] 之间
516
+ *
517
+ * @param Number r 红色色值
518
+ * @param Number g 绿色色值
519
+ * @param Number b 蓝色色值
520
+ * @return Array HSL各值数组
521
+ */
522
+ function rgbToHsl(r, g, b) {
523
+ r /= 255, g /= 255, b /= 255;
524
+ var max = Math.max(r, g, b), min = Math.min(r, g, b);
525
+ var h, s, l = (max + min) / 2;
526
+ if (max == min) {
527
+ h = s = 0; // achromatic
528
+ }
529
+ else {
530
+ var d = max - min;
531
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
532
+ switch (max) {
533
+ case r:
534
+ h = (g - b) / d + (g < b ? 6 : 0);
535
+ break;
536
+ case g:
537
+ h = (b - r) / d + 2;
538
+ break;
539
+ case b:
540
+ h = (r - g) / d + 4;
541
+ break;
542
+ }
543
+ h /= 6;
544
+ }
545
+ return [h, s, l];
546
+ }
547
+ function generateRandomIndex(prefix) {
548
+ if (prefix == null) {
549
+ prefix = "Sheet";
550
+ }
551
+ var userAgent = window.navigator.userAgent.replace(/[^a-zA-Z0-9]/g, "").split("");
552
+ var mid = "";
553
+ for (var i = 0; i < 5; i++) {
554
+ mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))];
555
+ }
556
+ var time = new Date().getTime();
557
+ return prefix + "_" + mid + "_" + time;
558
+ }
559
+ function escapeCharacter(str) {
560
+ if (str == null || str.length == 0) {
561
+ return str;
562
+ }
563
+ return str.replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&nbsp;/g, ' ').replace(/&apos;/g, "'").replace(/&iexcl;/g, "¡").replace(/&cent;/g, "¢").replace(/&pound;/g, "£").replace(/&curren;/g, "¤").replace(/&yen;/g, "¥").replace(/&brvbar;/g, "¦").replace(/&sect;/g, "§").replace(/&uml;/g, "¨").replace(/&copy;/g, "©").replace(/&ordf;/g, "ª").replace(/&laquo;/g, "«").replace(/&not;/g, "¬").replace(/&shy;/g, "­").replace(/&reg;/g, "®").replace(/&macr;/g, "¯").replace(/&deg;/g, "°").replace(/&plusmn;/g, "±").replace(/&sup2;/g, "²").replace(/&sup3;/g, "³").replace(/&acute;/g, "´").replace(/&micro;/g, "µ").replace(/&para;/g, "¶").replace(/&middot;/g, "·").replace(/&cedil;/g, "¸").replace(/&sup1;/g, "¹").replace(/&ordm;/g, "º").replace(/&raquo;/g, "»").replace(/&frac14;/g, "¼").replace(/&frac12;/g, "½").replace(/&frac34;/g, "¾").replace(/&iquest;/g, "¿").replace(/&times;/g, "×").replace(/&divide;/g, "÷").replace(/&Agrave;/g, "À").replace(/&Aacute;/g, "Á").replace(/&Acirc;/g, "Â").replace(/&Atilde;/g, "Ã").replace(/&Auml;/g, "Ä").replace(/&Aring;/g, "Å").replace(/&AElig;/g, "Æ").replace(/&Ccedil;/g, "Ç").replace(/&Egrave;/g, "È").replace(/&Eacute;/g, "É").replace(/&Ecirc;/g, "Ê").replace(/&Euml;/g, "Ë").replace(/&Igrave;/g, "Ì").replace(/&Iacute;/g, "Í").replace(/&Icirc;/g, "Î").replace(/&Iuml;/g, "Ï").replace(/&ETH;/g, "Ð").replace(/&Ntilde;/g, "Ñ").replace(/&Ograve;/g, "Ò").replace(/&Oacute;/g, "Ó").replace(/&Ocirc;/g, "Ô").replace(/&Otilde;/g, "Õ").replace(/&Ouml;/g, "Ö").replace(/&Oslash;/g, "Ø").replace(/&Ugrave;/g, "Ù").replace(/&Uacute;/g, "Ú").replace(/&Ucirc;/g, "Û").replace(/&Uuml;/g, "Ü").replace(/&Yacute;/g, "Ý").replace(/&THORN;/g, "Þ").replace(/&szlig;/g, "ß").replace(/&agrave;/g, "à").replace(/&aacute;/g, "á").replace(/&acirc;/g, "â").replace(/&atilde;/g, "ã").replace(/&auml;/g, "ä").replace(/&aring;/g, "å").replace(/&aelig;/g, "æ").replace(/&ccedil;/g, "ç").replace(/&egrave;/g, "è").replace(/&eacute;/g, "é").replace(/&ecirc;/g, "ê").replace(/&euml;/g, "ë").replace(/&igrave;/g, "ì").replace(/&iacute;/g, "í").replace(/&icirc;/g, "î").replace(/&iuml;/g, "ï").replace(/&eth;/g, "ð").replace(/&ntilde;/g, "ñ").replace(/&ograve;/g, "ò").replace(/&oacute;/g, "ó").replace(/&ocirc;/g, "ô").replace(/&otilde;/g, "õ").replace(/&ouml;/g, "ö").replace(/&oslash;/g, "ø").replace(/&ugrave;/g, "ù").replace(/&uacute;/g, "ú").replace(/&ucirc;/g, "û").replace(/&uuml;/g, "ü").replace(/&yacute;/g, "ý").replace(/&thorn;/g, "þ").replace(/&yuml;/g, "ÿ");
564
+ }
565
+ var fromulaRef = /** @class */ (function () {
566
+ function fromulaRef() {
567
+ }
568
+ fromulaRef.trim = function (str) {
569
+ if (str == null) {
570
+ str = "";
571
+ }
572
+ return str.replace(/(^\s*)|(\s*$)/g, "");
573
+ };
574
+ fromulaRef.functionCopy = function (txt, mode, step) {
575
+ var _this = this;
576
+ if (_this.operatorjson == null) {
577
+ var arr = _this.operator.split("|"), op = {};
578
+ for (var i_1 = 0; i_1 < arr.length; i_1++) {
579
+ op[arr[i_1].toString()] = 1;
580
+ }
581
+ _this.operatorjson = op;
582
+ }
583
+ if (mode == null) {
584
+ mode = "down";
585
+ }
586
+ if (step == null) {
587
+ step = 1;
588
+ }
589
+ if (txt.substr(0, 1) == "=") {
590
+ txt = txt.substr(1);
591
+ }
592
+ var funcstack = txt.split("");
593
+ var i = 0, str = "", function_str = "";
594
+ var matchConfig = {
595
+ "bracket": 0,
596
+ "comma": 0,
597
+ "squote": 0,
598
+ "dquote": 0
599
+ };
600
+ while (i < funcstack.length) {
601
+ var s = funcstack[i];
602
+ if (s == "(" && matchConfig.dquote == 0) {
603
+ matchConfig.bracket += 1;
604
+ if (str.length > 0) {
605
+ function_str += str + "(";
606
+ }
607
+ else {
608
+ function_str += "(";
609
+ }
610
+ str = "";
611
+ }
612
+ else if (s == ")" && matchConfig.dquote == 0) {
613
+ matchConfig.bracket -= 1;
614
+ function_str += _this.functionCopy(str, mode, step) + ")";
615
+ str = "";
616
+ }
617
+ else if (s == '"' && matchConfig.squote == 0) {
618
+ if (matchConfig.dquote > 0) {
619
+ function_str += str + '"';
620
+ matchConfig.dquote -= 1;
621
+ str = "";
622
+ }
623
+ else {
624
+ matchConfig.dquote += 1;
625
+ str += '"';
626
+ }
627
+ }
628
+ else if (s == ',' && matchConfig.dquote == 0) {
629
+ function_str += _this.functionCopy(str, mode, step) + ',';
630
+ str = "";
631
+ }
632
+ else if (s == '&' && matchConfig.dquote == 0) {
633
+ if (str.length > 0) {
634
+ function_str += _this.functionCopy(str, mode, step) + "&";
635
+ str = "";
636
+ }
637
+ else {
638
+ function_str += "&";
639
+ }
640
+ }
641
+ else if (s in _this.operatorjson && matchConfig.dquote == 0) {
642
+ var s_next = "";
643
+ if ((i + 1) < funcstack.length) {
644
+ s_next = funcstack[i + 1];
645
+ }
646
+ var p = i - 1, s_pre = null;
647
+ if (p >= 0) {
648
+ do {
649
+ s_pre = funcstack[p--];
650
+ } while (p >= 0 && s_pre == " ");
651
+ }
652
+ if ((s + s_next) in _this.operatorjson) {
653
+ if (str.length > 0) {
654
+ function_str += _this.functionCopy(str, mode, step) + s + s_next;
655
+ str = "";
656
+ }
657
+ else {
658
+ function_str += s + s_next;
659
+ }
660
+ i++;
661
+ }
662
+ else if (!(/[^0-9]/.test(s_next)) && s == "-" && (s_pre == "(" || s_pre == null || s_pre == "," || s_pre == " " || s_pre in _this.operatorjson)) {
663
+ str += s;
664
+ }
665
+ else {
666
+ if (str.length > 0) {
667
+ function_str += _this.functionCopy(str, mode, step) + s;
668
+ str = "";
669
+ }
670
+ else {
671
+ function_str += s;
672
+ }
673
+ }
674
+ }
675
+ else {
676
+ str += s;
677
+ }
678
+ if (i == funcstack.length - 1) {
679
+ if (_this.iscelldata(_this.trim(str))) {
680
+ if (mode == "down") {
681
+ function_str += _this.downparam(_this.trim(str), step);
682
+ }
683
+ else if (mode == "up") {
684
+ function_str += _this.upparam(_this.trim(str), step);
685
+ }
686
+ else if (mode == "left") {
687
+ function_str += _this.leftparam(_this.trim(str), step);
688
+ }
689
+ else if (mode == "right") {
690
+ function_str += _this.rightparam(_this.trim(str), step);
691
+ }
692
+ }
693
+ else {
694
+ function_str += _this.trim(str);
695
+ }
696
+ }
697
+ i++;
698
+ }
699
+ return function_str;
700
+ };
701
+ fromulaRef.downparam = function (txt, step) {
702
+ return this.updateparam("d", txt, step);
703
+ };
704
+ fromulaRef.upparam = function (txt, step) {
705
+ return this.updateparam("u", txt, step);
706
+ };
707
+ fromulaRef.leftparam = function (txt, step) {
708
+ return this.updateparam("l", txt, step);
709
+ };
710
+ fromulaRef.rightparam = function (txt, step) {
711
+ return this.updateparam("r", txt, step);
712
+ };
713
+ fromulaRef.updateparam = function (orient, txt, step) {
714
+ var _this = this;
715
+ var val = txt.split("!"), rangetxt, prefix = "";
716
+ if (val.length > 1) {
717
+ rangetxt = val[1];
718
+ prefix = val[0] + "!";
719
+ }
720
+ else {
721
+ rangetxt = val[0];
722
+ }
723
+ if (rangetxt.indexOf(":") == -1) {
724
+ var row = parseInt(rangetxt.replace(/[^0-9]/g, ""));
725
+ var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
726
+ var freezonFuc = _this.isfreezonFuc(rangetxt);
727
+ var $row = freezonFuc[0] ? "$" : "", $col = freezonFuc[1] ? "$" : "";
728
+ if (orient == "u" && !freezonFuc[0]) {
729
+ row -= step;
730
+ }
731
+ else if (orient == "r" && !freezonFuc[1]) {
732
+ col += step;
733
+ }
734
+ else if (orient == "l" && !freezonFuc[1]) {
735
+ col -= step;
736
+ }
737
+ else if (!freezonFuc[0]) {
738
+ row += step;
739
+ }
740
+ if (row < 0 || col < 0) {
741
+ return _this.error.r;
742
+ }
743
+ if (!isNaN(row) && !isNaN(col)) {
744
+ return prefix + $col + chatatABC(col) + $row + (row);
745
+ }
746
+ else if (!isNaN(row)) {
747
+ return prefix + $row + (row);
748
+ }
749
+ else if (!isNaN(col)) {
750
+ return prefix + $col + chatatABC(col);
751
+ }
752
+ else {
753
+ return txt;
754
+ }
755
+ }
756
+ else {
757
+ rangetxt = rangetxt.split(":");
758
+ var row = [], col = [];
759
+ row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, ""));
760
+ row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, ""));
761
+ if (row[0] > row[1]) {
762
+ return txt;
763
+ }
764
+ col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
765
+ col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
766
+ if (col[0] > col[1]) {
767
+ return txt;
768
+ }
769
+ var freezonFuc0 = _this.isfreezonFuc(rangetxt[0]);
770
+ var freezonFuc1 = _this.isfreezonFuc(rangetxt[1]);
771
+ var $row0 = freezonFuc0[0] ? "$" : "", $col0 = freezonFuc0[1] ? "$" : "";
772
+ var $row1 = freezonFuc1[0] ? "$" : "", $col1 = freezonFuc1[1] ? "$" : "";
773
+ if (orient == "u") {
774
+ if (!freezonFuc0[0]) {
775
+ row[0] -= step;
776
+ }
777
+ if (!freezonFuc1[0]) {
778
+ row[1] -= step;
779
+ }
780
+ }
781
+ else if (orient == "r") {
782
+ if (!freezonFuc0[1]) {
783
+ col[0] += step;
784
+ }
785
+ if (!freezonFuc1[1]) {
786
+ col[1] += step;
787
+ }
788
+ }
789
+ else if (orient == "l") {
790
+ if (!freezonFuc0[1]) {
791
+ col[0] -= step;
792
+ }
793
+ if (!freezonFuc1[1]) {
794
+ col[1] -= step;
795
+ }
796
+ }
797
+ else {
798
+ if (!freezonFuc0[0]) {
799
+ row[0] += step;
800
+ }
801
+ if (!freezonFuc1[0]) {
802
+ row[1] += step;
803
+ }
804
+ }
805
+ if (row[0] < 0 || col[0] < 0) {
806
+ return _this.error.r;
807
+ }
808
+ if (isNaN(col[0]) && isNaN(col[1])) {
809
+ return prefix + $row0 + (row[0]) + ":" + $row1 + (row[1]);
810
+ }
811
+ else if (isNaN(row[0]) && isNaN(row[1])) {
812
+ return prefix + $col0 + chatatABC(col[0]) + ":" + $col1 + chatatABC(col[1]);
813
+ }
814
+ else {
815
+ return prefix + $col0 + chatatABC(col[0]) + $row0 + (row[0]) + ":" + $col1 + chatatABC(col[1]) + $row1 + (row[1]);
816
+ }
817
+ }
818
+ };
819
+ fromulaRef.iscelldata = function (txt) {
820
+ var val = txt.split("!"), rangetxt;
821
+ if (val.length > 1) {
822
+ rangetxt = val[1];
823
+ }
824
+ else {
825
+ rangetxt = val[0];
826
+ }
827
+ var reg_cell = /^(([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+))$/g; //增加正则判断单元格为字母+数字的格式:如 A1:B3
828
+ var reg_cellRange = /^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+))))$/g; //增加正则判断单元格为字母+数字或字母的格式:如 A1:B3,A:A
829
+ if (rangetxt.indexOf(":") == -1) {
830
+ var row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
831
+ var col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
832
+ if (!isNaN(row) && !isNaN(col) && rangetxt.toString().match(reg_cell)) {
833
+ return true;
834
+ }
835
+ else if (!isNaN(row)) {
836
+ return false;
837
+ }
838
+ else if (!isNaN(col)) {
839
+ return false;
840
+ }
841
+ else {
842
+ return false;
843
+ }
844
+ }
845
+ else {
846
+ reg_cellRange = /^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+)))|((([0-9]+)|([$][0-9]+s))))$/g;
847
+ rangetxt = rangetxt.split(":");
848
+ var row = [], col = [];
849
+ row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
850
+ row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
851
+ if (row[0] > row[1]) {
852
+ return false;
853
+ }
854
+ col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
855
+ col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
856
+ if (col[0] > col[1]) {
857
+ return false;
858
+ }
859
+ if (rangetxt[0].toString().match(reg_cellRange) && rangetxt[1].toString().match(reg_cellRange)) {
860
+ return true;
861
+ }
862
+ else {
863
+ return false;
864
+ }
865
+ }
866
+ };
867
+ fromulaRef.isfreezonFuc = function (txt) {
868
+ var row = txt.replace(/[^0-9]/g, "");
869
+ var col = txt.replace(/[^A-Za-z]/g, "");
870
+ var row$ = txt.substr(txt.indexOf(row) - 1, 1);
871
+ var col$ = txt.substr(txt.indexOf(col) - 1, 1);
872
+ var ret = [false, false];
873
+ if (row$ == "$") {
874
+ ret[0] = true;
875
+ }
876
+ if (col$ == "$") {
877
+ ret[1] = true;
878
+ }
879
+ return ret;
880
+ };
881
+ fromulaRef.operator = '==|!=|<>|<=|>=|=|+|-|>|<|/|*|%|&|^';
882
+ fromulaRef.error = {
883
+ v: "#VALUE!",
884
+ n: "#NAME?",
885
+ na: "#N/A",
886
+ r: "#REF!",
887
+ d: "#DIV/0!",
888
+ nm: "#NUM!",
889
+ nl: "#NULL!",
890
+ sp: "#SPILL!" //数组范围有其它值
891
+ };
892
+ fromulaRef.operatorjson = null;
893
+ return fromulaRef;
894
+ }());
895
+ function isChinese(temp) {
896
+ var re = /[^\u4e00-\u9fa5]/;
897
+ var reg = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/;
898
+ if (reg.test(temp))
899
+ return true;
900
+ if (re.test(temp))
901
+ return false;
902
+ return true;
903
+ }
904
+ function isJapanese(temp) {
905
+ var re = /[^\u0800-\u4e00]/;
906
+ if (re.test(temp))
907
+ return false;
908
+ return true;
909
+ }
910
+ function isKoera(chr) {
911
+ if (((chr > 0x3130 && chr < 0x318F) ||
912
+ (chr >= 0xAC00 && chr <= 0xD7A3))) {
913
+ return true;
914
+ }
915
+ return false;
916
+ }
917
+ function getBinaryContent(path, options) {
918
+ var promise, resolve, reject;
919
+ var callback;
920
+ if (!options) {
921
+ options = {};
922
+ }
923
+ // taken from jQuery
924
+ var createStandardXHR = function () {
925
+ try {
926
+ return new window.XMLHttpRequest();
927
+ }
928
+ catch (e) { }
929
+ };
930
+ var createActiveXHR = function () {
931
+ try {
932
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
933
+ }
934
+ catch (e) { }
935
+ };
936
+ // Create the request object
937
+ var createXHR = (typeof window !== "undefined" && window.ActiveXObject) ?
938
+ /* Microsoft failed to properly
939
+ * implement the XMLHttpRequest in IE7 (can't request local files),
940
+ * so we use the ActiveXObject when it is available
941
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
942
+ * we need a fallback.
943
+ */
944
+ function () {
945
+ return createStandardXHR() || createActiveXHR();
946
+ } :
947
+ // For all other browsers, use the standard XMLHttpRequest object
948
+ createStandardXHR;
949
+ // backward compatible callback
950
+ if (typeof options === "function") {
951
+ callback = options;
952
+ options = {};
953
+ }
954
+ else if (typeof options.callback === 'function') {
955
+ // callback inside options object
956
+ callback = options.callback;
957
+ }
958
+ resolve = function (data) { callback(null, data); };
959
+ reject = function (err) { callback(err, null); };
960
+ try {
961
+ var xhr = createXHR();
962
+ xhr.open('GET', path, true);
963
+ // recent browsers
964
+ if ("responseType" in xhr) {
965
+ xhr.responseType = "arraybuffer";
966
+ }
967
+ // older browser
968
+ if (xhr.overrideMimeType) {
969
+ xhr.overrideMimeType("text/plain; charset=x-user-defined");
970
+ }
971
+ xhr.onreadystatechange = function (event) {
972
+ // use `xhr` and not `this`... thanks IE
973
+ if (xhr.readyState === 4) {
974
+ if (xhr.status === 200 || xhr.status === 0) {
975
+ try {
976
+ resolve(function (xhr) {
977
+ // for xhr.responseText, the 0xFF mask is applied by JSZip
978
+ return xhr.response || xhr.responseText;
979
+ }(xhr));
980
+ }
981
+ catch (err) {
982
+ reject(new Error(err));
983
+ }
984
+ }
985
+ else {
986
+ reject(new Error("Ajax error for " + path + " : " + this.status + " " + this.statusText));
987
+ }
988
+ }
989
+ };
990
+ if (options.progress) {
991
+ xhr.onprogress = function (e) {
992
+ options.progress({
993
+ path: path,
994
+ originalEvent: e,
995
+ percent: e.loaded / e.total * 100,
996
+ loaded: e.loaded,
997
+ total: e.total
998
+ });
999
+ };
1000
+ }
1001
+ xhr.send();
1002
+ }
1003
+ catch (e) {
1004
+ reject(new Error(e), null);
1005
+ }
1006
+ // returns a promise or undefined depending on whether a callback was
1007
+ // provided
1008
+ return promise;
1009
+ }
1010
+ /**
1011
+ * multi sequence conversion
1012
+ * example:
1013
+ * 1、E14 -> 13_4
1014
+ * 2、E14 J14 O14 T14 Y14 AD14 AI14 AN14 AS14 AX14 ->
1015
+ * ['13_4', '13_9','13_14', '13_19', '13_24', '13_3', '13_8', '13_13', '13_18', '13_23']
1016
+ * 3、E46:E47 -> ['45_4', '46_4']
1017
+ *
1018
+ * @param {string} sqref - before sequence
1019
+ * @returns {string[]}
1020
+ */
1021
+ function getMultiSequenceToNum(sqref) {
1022
+ if (!sqref || (sqref === null || sqref === void 0 ? void 0 : sqref.length) <= 0)
1023
+ return [];
1024
+ sqref = sqref.toUpperCase();
1025
+ var sqrefRawArr = sqref.split(" ");
1026
+ var sqrefArr = sqrefRawArr.filter(function (e) { return e && e.trim(); });
1027
+ var sqrefLastArr = getSqrefRawArrFormat(sqrefArr);
1028
+ var resArr = [];
1029
+ for (var i = 0; i < sqrefLastArr.length; i++) {
1030
+ var _res = getSingleSequenceToNum(sqrefLastArr[i]);
1031
+ if (_res)
1032
+ resArr.push(_res);
1033
+ }
1034
+ return resArr;
1035
+ }
1036
+ /**
1037
+ * get region sequence
1038
+ * example:
1039
+ * 1、[A1:C2'] -> ['A1', 'A2', 'B1', 'B2', 'C1', 'C2']
1040
+ *
1041
+ * @param {string[]} arr - formats arr
1042
+ * @returns {string[]} - after arr
1043
+ */
1044
+ function getRegionSequence(arr) {
1045
+ var _a, _b;
1046
+ var formatArr = [];
1047
+ var regEn = new RegExp(/[A-Z]+|[0-9]+/g);
1048
+ var startArr = (_a = arr[0]) === null || _a === void 0 ? void 0 : _a.match(regEn);
1049
+ var lastArr = (_b = arr[1]) === null || _b === void 0 ? void 0 : _b.match(regEn);
1050
+ var columnMax = Math.max.apply(Math, [ABCatNum(startArr[0]), ABCatNum(lastArr[0])]);
1051
+ var columnMin = Math.min.apply(Math, [ABCatNum(startArr[0]), ABCatNum(lastArr[0])]);
1052
+ var rowMax = Math.max.apply(Math, [parseInt(startArr[1]), parseInt(lastArr[1])]);
1053
+ var rowMin = Math.min.apply(Math, [parseInt(startArr[1]), parseInt(lastArr[1])]);
1054
+ for (var i = columnMin; i <= columnMax; i++) {
1055
+ for (var j = rowMin; j <= rowMax; j++) {
1056
+ formatArr.push("" + chatatABC(i) + j);
1057
+ }
1058
+ }
1059
+ return formatArr;
1060
+ }
1061
+ /**
1062
+ * unified processing of conversion formats
1063
+ * example:
1064
+ * 1、['E38', 'A1:C2'] -> ['E38', 'A1', 'A2', 'B1', 'B2', 'C1', 'C2']
1065
+ *
1066
+ * @param {string[]} arr - formats arr
1067
+ * @returns {string[]} - after arr
1068
+ */
1069
+ function getSqrefRawArrFormat(arr) {
1070
+ arr === null || arr === void 0 ? void 0 : arr.map(function (el) {
1071
+ if (el.includes(":")) {
1072
+ var tempArr = el.split(":");
1073
+ if ((tempArr === null || tempArr === void 0 ? void 0 : tempArr.length) === 2) {
1074
+ arr = arr.concat(getRegionSequence(tempArr));
1075
+ arr.splice(arr.indexOf(el), 1);
1076
+ }
1077
+ }
1078
+ });
1079
+ var resultArr = arr.filter(function (value, index, array) { return array.indexOf(value) === index; });
1080
+ return resultArr;
1081
+ }
1082
+ /**
1083
+ * single sequence to number
1084
+ * example:
1085
+ * 1、A1 -> 0_0
1086
+ * 2、ES14 -> 13_4
1087
+ *
1088
+ * @param {string} sqref - before sequence
1089
+ * @returns {string} - after sequence
1090
+ */
1091
+ function getSingleSequenceToNum(sqref) {
1092
+ var sqrefArray = sqref.match(/[A-Z]+|[0-9]+/g);
1093
+ var sqrefLen = sqrefArray.length;
1094
+ var regEn = new RegExp("^[A-Z]+$");
1095
+ var ret = "";
1096
+ for (var i = sqrefLen - 1; i >= 0; i--) {
1097
+ var cur = sqrefArray[i];
1098
+ if (regEn.test(cur)) {
1099
+ ret += ABCatNum(cur) + "_";
1100
+ }
1101
+ else {
1102
+ ret += parseInt(cur) - 1 + "_";
1103
+ }
1104
+ }
1105
+ return ret.substring(0, ret.length - 1);
1106
+ }
1107
+ /**
1108
+ * R1C1 to Sequence
1109
+ * example: sheet2!R1C1 => sheet!A1
1110
+ *
1111
+ * @param {string} value - R1C1 value
1112
+ * @returns
1113
+ */
1114
+ function getTransR1C1ToSequence(value) {
1115
+ if (!value && (value === null || value === void 0 ? void 0 : value.length) <= 0)
1116
+ return "";
1117
+ var len = value.length;
1118
+ var index = value.lastIndexOf("!");
1119
+ var valueArr = [value.slice(0, index), value.slice(index + 1, len)];
1120
+ var repStr = valueArr[1] || "";
1121
+ var indexR = repStr.indexOf("R");
1122
+ var indexC = repStr.indexOf("C");
1123
+ var row = Number(repStr.slice(indexR + 1, indexC));
1124
+ var column = chatatABC(Number(repStr.slice(indexC + 1, repStr === null || repStr === void 0 ? void 0 : repStr.length)) - 1);
1125
+ return valueArr[0] + "!" + column + row;
1126
+ }
1127
+ /**
1128
+ * strip x14 format data
1129
+ *
1130
+ * @param {string} value
1131
+ * @returns {Object} - { formula, sqref }
1132
+ */
1133
+ function getPeelOffX14(value) {
1134
+ var _a;
1135
+ if (!value || (value === null || value === void 0 ? void 0 : value.length) <= 0)
1136
+ return {};
1137
+ // formula
1138
+ var formulaReg = new RegExp("</x14:formula[^]>", "g");
1139
+ var lastIndex = (_a = value.match(formulaReg)) === null || _a === void 0 ? void 0 : _a.length;
1140
+ var lastValue = "</x14:formula" + lastIndex + ">";
1141
+ var lastValueEnd = value.indexOf(lastValue);
1142
+ var formulaValue = value.substring(0, lastValueEnd + lastValue.length);
1143
+ formulaValue = formulaValue
1144
+ .replace(/<xm:f>/g, "")
1145
+ .replace(/<\/xm:f>/g, "")
1146
+ .replace(/x14:/g, "")
1147
+ .replace(/\/x14:/g, "");
1148
+ var formula = formulaValue;
1149
+ // sqref
1150
+ var xmSqrefLen = "<xm:sqref>".length;
1151
+ var sqrefStart = value.indexOf("<xm:sqref>");
1152
+ var sqrefEnd = value.indexOf("</xm:sqref>");
1153
+ var sqref = value.substring(sqrefStart + xmSqrefLen, sqrefEnd);
1154
+ return {
1155
+ formula: formula,
1156
+ sqref: sqref,
1157
+ };
1158
+ }
1159
+ /**
1160
+ * get the value in the formula
1161
+ *
1162
+ * @param {string} value - extracted value
1163
+ * @returns {string[]}
1164
+ */
1165
+ function getMultiFormulaValue(value) {
1166
+ var _a, _b;
1167
+ if (!value || (value === null || value === void 0 ? void 0 : value.length) <= 0)
1168
+ return [];
1169
+ var lenReg = new RegExp("formula", "g");
1170
+ var len = (((_a = value.match(lenReg)) === null || _a === void 0 ? void 0 : _a.length) || 0) / 2;
1171
+ if (len === 0)
1172
+ return [];
1173
+ var retArr = [];
1174
+ for (var i = 1; i <= len; i++) {
1175
+ var startLen = (_b = "<formula" + i + ">") === null || _b === void 0 ? void 0 : _b.length;
1176
+ var start = value.indexOf("<formula" + i + ">");
1177
+ var end = value.indexOf("</formula" + i + ">");
1178
+ var _value = value.substring(start + startLen, end);
1179
+ retArr.push(escapeCharacter(_value.replace(/&quot;|^\"|\"$/g, "")));
1180
+ }
1181
+ return retArr;
1182
+ }
1183
+
1184
+ var xmloperation = /** @class */ (function () {
1185
+ function xmloperation() {
1186
+ }
1187
+ /**
1188
+ * @param tag Search xml tag name , div,title etc.
1189
+ * @param file Xml string
1190
+ * @return Xml element string
1191
+ */
1192
+ xmloperation.prototype.getElementsByOneTag = function (tag, file) {
1193
+ //<a:[^/>: ]+?>.*?</a:[^/>: ]+?>
1194
+ var readTagReg;
1195
+ if (tag.indexOf("|") > -1) {
1196
+ var tags = tag.split("|"), tagsRegTxt = "";
1197
+ for (var i = 0; i < tags.length; i++) {
1198
+ var t = tags[i];
1199
+ tagsRegTxt += "|<" + t + " [^>]+?[^/]>[\\s\\S]*?</" + t + ">|<" + t + " [^>]+?/>|<" + t + ">[\\s\\S]*?</" + t + ">|<" + t + "/>";
1200
+ }
1201
+ tagsRegTxt = tagsRegTxt.substr(1, tagsRegTxt.length);
1202
+ readTagReg = new RegExp(tagsRegTxt, "g");
1203
+ }
1204
+ else {
1205
+ readTagReg = new RegExp("<" + tag + " [^>]+?[^/]>[\\s\\S]*?</" + tag + ">|<" + tag + " [^>]+?/>|<" + tag + ">[\\s\\S]*?</" + tag + ">|<" + tag + "/>", "g");
1206
+ }
1207
+ var ret = file.match(readTagReg);
1208
+ if (ret == null) {
1209
+ return [];
1210
+ }
1211
+ else {
1212
+ return ret;
1213
+ }
1214
+ };
1215
+ return xmloperation;
1216
+ }());
1217
+ var ReadXml = /** @class */ (function (_super) {
1218
+ __extends(ReadXml, _super);
1219
+ function ReadXml(files) {
1220
+ var _this = _super.call(this) || this;
1221
+ _this.originFile = files;
1222
+ return _this;
1223
+ }
1224
+ /**
1225
+ * @param path Search xml tag group , div,title etc.
1226
+ * @param fileName One of uploadfileList, uploadfileList is file group, {key:value}
1227
+ * @return Xml element calss
1228
+ */
1229
+ ReadXml.prototype.getElementsByTagName = function (path, fileName) {
1230
+ var file = this.getFileByName(fileName);
1231
+ var pathArr = path.split("/"), ret;
1232
+ for (var key in pathArr) {
1233
+ var path_1 = pathArr[key];
1234
+ if (ret == undefined) {
1235
+ ret = this.getElementsByOneTag(path_1, file);
1236
+ }
1237
+ else {
1238
+ if (ret instanceof Array) {
1239
+ var items = [];
1240
+ for (var key_1 in ret) {
1241
+ var item = ret[key_1];
1242
+ items = items.concat(this.getElementsByOneTag(path_1, item));
1243
+ }
1244
+ ret = items;
1245
+ }
1246
+ else {
1247
+ ret = this.getElementsByOneTag(path_1, ret);
1248
+ }
1249
+ }
1250
+ }
1251
+ var elements = [];
1252
+ for (var i = 0; i < ret.length; i++) {
1253
+ var ele = new Element(ret[i]);
1254
+ elements.push(ele);
1255
+ }
1256
+ return elements;
1257
+ };
1258
+ /**
1259
+ * @param name One of uploadfileList's name, search for file by this parameter
1260
+ * @retrun Select a file from uploadfileList
1261
+ */
1262
+ ReadXml.prototype.getFileByName = function (name) {
1263
+ for (var fileKey in this.originFile) {
1264
+ if (fileKey.indexOf(name) > -1) {
1265
+ return this.originFile[fileKey];
1266
+ }
1267
+ }
1268
+ return "";
1269
+ };
1270
+ return ReadXml;
1271
+ }(xmloperation));
1272
+ var Element = /** @class */ (function (_super) {
1273
+ __extends(Element, _super);
1274
+ function Element(str) {
1275
+ var _this = _super.call(this) || this;
1276
+ _this.elementString = str;
1277
+ _this.setValue();
1278
+ var readAttrReg = new RegExp('[a-zA-Z0-9_:]*?=".*?"', "g");
1279
+ var attrList = _this.container.match(readAttrReg);
1280
+ _this.attributeList = {};
1281
+ if (attrList != null) {
1282
+ for (var key in attrList) {
1283
+ var attrFull = attrList[key];
1284
+ // let al= attrFull.split("=");
1285
+ if (attrFull.length == 0) {
1286
+ continue;
1287
+ }
1288
+ var attrKey = attrFull.substr(0, attrFull.indexOf('='));
1289
+ var attrValue = attrFull.substr(attrFull.indexOf('=') + 1);
1290
+ if (attrKey == null || attrValue == null || attrKey.length == 0 || attrValue.length == 0) {
1291
+ continue;
1292
+ }
1293
+ _this.attributeList[attrKey] = attrValue.substr(1, attrValue.length - 2);
1294
+ }
1295
+ }
1296
+ return _this;
1297
+ }
1298
+ /**
1299
+ * @param name Get attribute by key in element
1300
+ * @return Single attribute
1301
+ */
1302
+ Element.prototype.get = function (name) {
1303
+ return this.attributeList[name];
1304
+ };
1305
+ /**
1306
+ * @param tag Get elements by tag in elementString
1307
+ * @return Element group
1308
+ */
1309
+ Element.prototype.getInnerElements = function (tag) {
1310
+ var ret = this.getElementsByOneTag(tag, this.elementString);
1311
+ var elements = [];
1312
+ for (var i = 0; i < ret.length; i++) {
1313
+ var ele = new Element(ret[i]);
1314
+ elements.push(ele);
1315
+ }
1316
+ if (elements.length == 0) {
1317
+ return null;
1318
+ }
1319
+ return elements;
1320
+ };
1321
+ /**
1322
+ * @desc get xml dom value and container, <container>value</container>
1323
+ */
1324
+ Element.prototype.setValue = function () {
1325
+ var str = this.elementString;
1326
+ if (str.substr(str.length - 2, 2) == "/>") {
1327
+ this.value = "";
1328
+ this.container = str;
1329
+ }
1330
+ else {
1331
+ var firstTag = this.getFirstTag();
1332
+ var firstTagReg = new RegExp("(<" + firstTag + " [^>]+?[^/]>)([\\s\\S]*?)</" + firstTag + ">|(<" + firstTag + ">)([\\s\\S]*?)</" + firstTag + ">", "g");
1333
+ var result = firstTagReg.exec(str);
1334
+ if (result != null) {
1335
+ if (result[1] != null) {
1336
+ this.container = result[1];
1337
+ this.value = result[2];
1338
+ }
1339
+ else {
1340
+ this.container = result[3];
1341
+ this.value = result[4];
1342
+ }
1343
+ }
1344
+ }
1345
+ };
1346
+ /**
1347
+ * @desc get xml dom first tag, <a><b></b></a>, get a
1348
+ */
1349
+ Element.prototype.getFirstTag = function () {
1350
+ var str = this.elementString;
1351
+ var firstTag = str.substr(0, str.indexOf(' '));
1352
+ if (firstTag == "" || firstTag.indexOf(">") > -1) {
1353
+ firstTag = str.substr(0, str.indexOf('>'));
1354
+ }
1355
+ firstTag = firstTag.substr(1, firstTag.length);
1356
+ return firstTag;
1357
+ };
1358
+ return Element;
1359
+ }(xmloperation));
1360
+ function combineIndexedColor(indexedColorsInner, indexedColors) {
1361
+ var ret = {};
1362
+ if (indexedColorsInner == null || indexedColorsInner.length == 0) {
1363
+ return indexedColors;
1364
+ }
1365
+ for (var key in indexedColors) {
1366
+ var value = indexedColors[key], kn = parseInt(key);
1367
+ var inner = indexedColorsInner[kn];
1368
+ if (inner == null) {
1369
+ ret[key] = value;
1370
+ }
1371
+ else {
1372
+ var rgb = inner.attributeList.rgb;
1373
+ ret[key] = rgb;
1374
+ }
1375
+ }
1376
+ return ret;
1377
+ }
1378
+ //clrScheme:Element[]
1379
+ function getColor(color, styles, type) {
1380
+ var attrList = color.attributeList;
1381
+ var clrScheme = styles["clrScheme"];
1382
+ var indexedColorsInner = styles["indexedColors"];
1383
+ styles["mruColors"];
1384
+ var indexedColorsList = combineIndexedColor(indexedColorsInner, indexedColors);
1385
+ var indexed = attrList.indexed, rgb = attrList.rgb, theme = attrList.theme, tint = attrList.tint;
1386
+ var bg;
1387
+ if (indexed != null) {
1388
+ var indexedNum = parseInt(indexed);
1389
+ bg = indexedColorsList[indexedNum];
1390
+ if (bg != null) {
1391
+ bg = bg.substring(bg.length - 6, bg.length);
1392
+ bg = "#" + bg;
1393
+ }
1394
+ }
1395
+ else if (rgb != null) {
1396
+ rgb = rgb.substring(rgb.length - 6, rgb.length);
1397
+ bg = "#" + rgb;
1398
+ }
1399
+ else if (theme != null) {
1400
+ var themeNum = parseInt(theme);
1401
+ if (themeNum == 0) {
1402
+ themeNum = 1;
1403
+ }
1404
+ else if (themeNum == 1) {
1405
+ themeNum = 0;
1406
+ }
1407
+ else if (themeNum == 2) {
1408
+ themeNum = 3;
1409
+ }
1410
+ else if (themeNum == 3) {
1411
+ themeNum = 2;
1412
+ }
1413
+ var clrSchemeElement = clrScheme[themeNum];
1414
+ if (clrSchemeElement != null) {
1415
+ var clrs = clrSchemeElement.getInnerElements("a:sysClr|a:srgbClr");
1416
+ if (clrs != null) {
1417
+ var clr = clrs[0];
1418
+ var clrAttrList = clr.attributeList;
1419
+ // console.log(clr.container, );
1420
+ if (clr.container.indexOf("sysClr") > -1) {
1421
+ // if(type=="g" && clrAttrList.val=="windowText"){
1422
+ // bg = null;
1423
+ // }
1424
+ // else if((type=="t" || type=="b") && clrAttrList.val=="window"){
1425
+ // bg = null;
1426
+ // }
1427
+ // else
1428
+ if (clrAttrList.lastClr != null) {
1429
+ bg = "#" + clrAttrList.lastClr;
1430
+ }
1431
+ else if (clrAttrList.val != null) {
1432
+ bg = "#" + clrAttrList.val;
1433
+ }
1434
+ }
1435
+ else if (clr.container.indexOf("srgbClr") > -1) {
1436
+ // console.log(clrAttrList.val);
1437
+ bg = "#" + clrAttrList.val;
1438
+ }
1439
+ }
1440
+ }
1441
+ }
1442
+ if (tint != null) {
1443
+ var tintNum = parseFloat(tint);
1444
+ if (bg != null) {
1445
+ bg = LightenDarkenColor(bg, tintNum);
1446
+ }
1447
+ }
1448
+ return bg;
1449
+ }
1450
+ /**
1451
+ * @dom xml attribute object
1452
+ * @attr attribute name
1453
+ * @d if attribute is null, return default value
1454
+ * @return attribute value
1455
+ */
1456
+ function getlineStringAttr(frpr, attr) {
1457
+ var attrEle = frpr.getInnerElements(attr), value;
1458
+ if (attrEle != null && attrEle.length > 0) {
1459
+ if (attr == "b" || attr == "i" || attr == "strike") {
1460
+ value = "1";
1461
+ }
1462
+ else if (attr == "u") {
1463
+ var v = attrEle[0].attributeList.val;
1464
+ if (v == "double") {
1465
+ value = "2";
1466
+ }
1467
+ else if (v == "singleAccounting") {
1468
+ value = "3";
1469
+ }
1470
+ else if (v == "doubleAccounting") {
1471
+ value = "4";
1472
+ }
1473
+ else {
1474
+ value = "1";
1475
+ }
1476
+ }
1477
+ else if (attr == "vertAlign") {
1478
+ var v = attrEle[0].attributeList.val;
1479
+ if (v == "subscript") {
1480
+ value = "1";
1481
+ }
1482
+ else if (v == "superscript") {
1483
+ value = "2";
1484
+ }
1485
+ }
1486
+ else {
1487
+ value = attrEle[0].attributeList.val;
1488
+ }
1489
+ }
1490
+ return value;
1491
+ }
1492
+
1493
+ var LuckyFileBase = /** @class */ (function () {
1494
+ function LuckyFileBase() {
1495
+ }
1496
+ return LuckyFileBase;
1497
+ }());
1498
+ var LuckySheetBase = /** @class */ (function () {
1499
+ function LuckySheetBase() {
1500
+ }
1501
+ return LuckySheetBase;
1502
+ }());
1503
+ var LuckyFileInfo = /** @class */ (function () {
1504
+ function LuckyFileInfo() {
1505
+ }
1506
+ return LuckyFileInfo;
1507
+ }());
1508
+ var LuckySheetCelldataBase = /** @class */ (function () {
1509
+ function LuckySheetCelldataBase() {
1510
+ }
1511
+ return LuckySheetCelldataBase;
1512
+ }());
1513
+ var LuckySheetCelldataValue = /** @class */ (function () {
1514
+ function LuckySheetCelldataValue() {
1515
+ }
1516
+ return LuckySheetCelldataValue;
1517
+ }());
1518
+ var LuckySheetCellFormat = /** @class */ (function () {
1519
+ function LuckySheetCellFormat() {
1520
+ }
1521
+ return LuckySheetCellFormat;
1522
+ }());
1523
+ var LuckyInlineString = /** @class */ (function () {
1524
+ function LuckyInlineString() {
1525
+ }
1526
+ return LuckyInlineString;
1527
+ }());
1528
+ var LuckyConfig = /** @class */ (function () {
1529
+ function LuckyConfig() {
1530
+ }
1531
+ return LuckyConfig;
1532
+ }());
1533
+ var LuckySheetborderInfoCellForImp = /** @class */ (function () {
1534
+ function LuckySheetborderInfoCellForImp() {
1535
+ }
1536
+ return LuckySheetborderInfoCellForImp;
1537
+ }());
1538
+ var LuckySheetborderInfoCellValue = /** @class */ (function () {
1539
+ function LuckySheetborderInfoCellValue() {
1540
+ }
1541
+ return LuckySheetborderInfoCellValue;
1542
+ }());
1543
+ var LuckySheetborderInfoCellValueStyle = /** @class */ (function () {
1544
+ function LuckySheetborderInfoCellValueStyle() {
1545
+ }
1546
+ return LuckySheetborderInfoCellValueStyle;
1547
+ }());
1548
+ var LuckySheetConfigMerge = /** @class */ (function () {
1549
+ function LuckySheetConfigMerge() {
1550
+ }
1551
+ return LuckySheetConfigMerge;
1552
+ }());
1553
+ var LuckysheetCalcChain = /** @class */ (function () {
1554
+ function LuckysheetCalcChain() {
1555
+ }
1556
+ return LuckysheetCalcChain;
1557
+ }());
1558
+ var LuckyImageBase = /** @class */ (function () {
1559
+ function LuckyImageBase() {
1560
+ }
1561
+ return LuckyImageBase;
1562
+ }());
1563
+
1564
+ var LuckySheetCelldata = /** @class */ (function (_super) {
1565
+ __extends(LuckySheetCelldata, _super);
1566
+ function LuckySheetCelldata(cell, styles, sharedStrings, mergeCells, sheetFile, ReadXml) {
1567
+ var _this =
1568
+ //Private
1569
+ _super.call(this) || this;
1570
+ _this.cell = cell;
1571
+ _this.sheetFile = sheetFile;
1572
+ _this.styles = styles;
1573
+ _this.sharedStrings = sharedStrings;
1574
+ _this.readXml = ReadXml;
1575
+ _this.mergeCells = mergeCells;
1576
+ var attrList = cell.attributeList;
1577
+ var r = attrList.r, s = attrList.s, t = attrList.t;
1578
+ var range = getcellrange(r);
1579
+ _this.r = range.row[0];
1580
+ _this.c = range.column[0];
1581
+ _this.v = _this.generateValue(s, t);
1582
+ return _this;
1583
+ }
1584
+ /**
1585
+ * @param s Style index ,start 1
1586
+ * @param t Cell type, Optional value is ST_CellType, it's found at constat.ts
1587
+ */
1588
+ LuckySheetCelldata.prototype.generateValue = function (s, t) {
1589
+ var _this = this;
1590
+ var v = this.cell.getInnerElements("v");
1591
+ var f = this.cell.getInnerElements("f");
1592
+ if (v == null) {
1593
+ v = this.cell.getInnerElements("t");
1594
+ }
1595
+ var cellXfs = this.styles["cellXfs"];
1596
+ var cellStyleXfs = this.styles["cellStyleXfs"];
1597
+ this.styles["cellStyles"];
1598
+ var fonts = this.styles["fonts"];
1599
+ var fills = this.styles["fills"];
1600
+ var borders = this.styles["borders"];
1601
+ var numfmts = this.styles["numfmts"];
1602
+ var clrScheme = this.styles["clrScheme"];
1603
+ var sharedStrings = this.sharedStrings;
1604
+ var cellValue = new LuckySheetCelldataValue();
1605
+ if (f != null) {
1606
+ var formula = f[0], attrList = formula.attributeList;
1607
+ var t_1 = attrList.t, ref = attrList.ref, si = attrList.si;
1608
+ var formulaValue = f[0].value;
1609
+ if (t_1 == "shared") {
1610
+ this._fomulaRef = ref;
1611
+ this._formulaType = t_1;
1612
+ this._formulaSi = si;
1613
+ }
1614
+ // console.log(ref, t, si);
1615
+ if (ref != null || (formulaValue != null && formulaValue.length > 0)) {
1616
+ formulaValue = escapeCharacter(formulaValue);
1617
+ cellValue.f = "=" + formulaValue;
1618
+ }
1619
+ }
1620
+ var familyFont = null;
1621
+ var quotePrefix;
1622
+ if (s != null) {
1623
+ var sNum = parseInt(s);
1624
+ var cellXf = cellXfs[sNum];
1625
+ var xfId = cellXf.attributeList.xfId;
1626
+ var numFmtId = void 0, fontId = void 0, fillId = void 0, borderId = void 0;
1627
+ var horizontal = void 0, vertical = void 0, wrapText = void 0, textRotation = void 0;
1628
+ if (xfId != null) {
1629
+ var cellStyleXf = cellStyleXfs[parseInt(xfId)];
1630
+ var attrList = cellStyleXf.attributeList;
1631
+ var applyNumberFormat_1 = attrList.applyNumberFormat;
1632
+ var applyFont_1 = attrList.applyFont;
1633
+ var applyFill_1 = attrList.applyFill;
1634
+ var applyBorder_1 = attrList.applyBorder;
1635
+ var applyAlignment_1 = attrList.applyAlignment;
1636
+ // let applyProtection = attrList.applyProtection;
1637
+ attrList.applyProtection;
1638
+ quotePrefix = attrList.quotePrefix;
1639
+ if (applyNumberFormat_1 != "0" && attrList.numFmtId != null) {
1640
+ // if(attrList.numFmtId!="0"){
1641
+ numFmtId = attrList.numFmtId;
1642
+ // }
1643
+ }
1644
+ if (applyFont_1 != "0" && attrList.fontId != null) {
1645
+ fontId = attrList.fontId;
1646
+ }
1647
+ if (applyFill_1 != "0" && attrList.fillId != null) {
1648
+ fillId = attrList.fillId;
1649
+ }
1650
+ if (applyBorder_1 != "0" && attrList.borderId != null) {
1651
+ borderId = attrList.borderId;
1652
+ }
1653
+ if (applyAlignment_1 != null && applyAlignment_1 != "0") {
1654
+ var alignment = cellStyleXf.getInnerElements("alignment");
1655
+ if (alignment != null) {
1656
+ var attrList_1 = alignment[0].attributeList;
1657
+ if (attrList_1.horizontal != null) {
1658
+ horizontal = attrList_1.horizontal;
1659
+ }
1660
+ if (attrList_1.vertical != null) {
1661
+ vertical = attrList_1.vertical;
1662
+ }
1663
+ if (attrList_1.wrapText != null) {
1664
+ wrapText = attrList_1.wrapText;
1665
+ }
1666
+ if (attrList_1.textRotation != null) {
1667
+ textRotation = attrList_1.textRotation;
1668
+ }
1669
+ if (attrList_1.shrinkToFit != null) {
1670
+ attrList_1.shrinkToFit;
1671
+ }
1672
+ if (attrList_1.indent != null) {
1673
+ attrList_1.indent;
1674
+ }
1675
+ }
1676
+ }
1677
+ }
1678
+ var applyNumberFormat = cellXf.attributeList.applyNumberFormat;
1679
+ var applyFont = cellXf.attributeList.applyFont;
1680
+ var applyFill = cellXf.attributeList.applyFill;
1681
+ var applyBorder = cellXf.attributeList.applyBorder;
1682
+ var applyAlignment = cellXf.attributeList.applyAlignment;
1683
+ if (cellXf.attributeList.applyProtection != null) {
1684
+ cellXf.attributeList.applyProtection;
1685
+ }
1686
+ if (cellXf.attributeList.quotePrefix != null) {
1687
+ quotePrefix = cellXf.attributeList.quotePrefix;
1688
+ }
1689
+ if (applyNumberFormat != "0" && cellXf.attributeList.numFmtId != null) {
1690
+ numFmtId = cellXf.attributeList.numFmtId;
1691
+ }
1692
+ if (applyFont != "0") {
1693
+ fontId = cellXf.attributeList.fontId;
1694
+ }
1695
+ if (applyFill != "0") {
1696
+ fillId = cellXf.attributeList.fillId;
1697
+ }
1698
+ if (applyBorder != "0") {
1699
+ borderId = cellXf.attributeList.borderId;
1700
+ }
1701
+ if (applyAlignment != "0") {
1702
+ var alignment = cellXf.getInnerElements("alignment");
1703
+ if (alignment != null && alignment.length > 0) {
1704
+ var attrList = alignment[0].attributeList;
1705
+ if (attrList.horizontal != null) {
1706
+ horizontal = attrList.horizontal;
1707
+ }
1708
+ if (attrList.vertical != null) {
1709
+ vertical = attrList.vertical;
1710
+ }
1711
+ if (attrList.wrapText != null) {
1712
+ wrapText = attrList.wrapText;
1713
+ }
1714
+ if (attrList.textRotation != null) {
1715
+ textRotation = attrList.textRotation;
1716
+ }
1717
+ if (attrList.shrinkToFit != null) {
1718
+ attrList.shrinkToFit;
1719
+ }
1720
+ if (attrList.indent != null) {
1721
+ attrList.indent;
1722
+ }
1723
+ }
1724
+ }
1725
+ if (numFmtId != undefined) {
1726
+ var numf = numfmts[parseInt(numFmtId)];
1727
+ var cellFormat = new LuckySheetCellFormat();
1728
+ cellFormat.fa = escapeCharacter(numf);
1729
+ // console.log(numf, numFmtId, this.v);
1730
+ cellFormat.t = t || 'd';
1731
+ cellValue.ct = cellFormat;
1732
+ }
1733
+ if (fillId != undefined) {
1734
+ var fillIdNum = parseInt(fillId);
1735
+ var fill = fills[fillIdNum];
1736
+ // console.log(cellValue.v);
1737
+ var bg = this.getBackgroundByFill(fill, clrScheme);
1738
+ if (bg != null) {
1739
+ cellValue.bg = bg;
1740
+ }
1741
+ }
1742
+ if (fontId != undefined) {
1743
+ var fontIdNum = parseInt(fontId);
1744
+ var font = fonts[fontIdNum];
1745
+ if (font != null) {
1746
+ var sz = font.getInnerElements("sz"); //font size
1747
+ var colors = font.getInnerElements("color"); //font color
1748
+ var family = font.getInnerElements("name"); //font family
1749
+ var familyOverrides = font.getInnerElements("family"); //font family will be overrided by name
1750
+ font.getInnerElements("charset"); //font charset
1751
+ var bolds = font.getInnerElements("b"); //font bold
1752
+ var italics = font.getInnerElements("i"); //font italic
1753
+ var strikes = font.getInnerElements("strike"); //font italic
1754
+ var underlines = font.getInnerElements("u"); //font italic
1755
+ if (sz != null && sz.length > 0) {
1756
+ var fs = sz[0].attributeList.val;
1757
+ if (fs != null) {
1758
+ cellValue.fs = parseInt(fs);
1759
+ }
1760
+ }
1761
+ if (colors != null && colors.length > 0) {
1762
+ var color = colors[0];
1763
+ var fc = getColor(color, this.styles);
1764
+ if (fc != null) {
1765
+ cellValue.fc = fc;
1766
+ }
1767
+ }
1768
+ if (familyOverrides != null && familyOverrides.length > 0) {
1769
+ var val = familyOverrides[0].attributeList.val;
1770
+ if (val != null) {
1771
+ familyFont = fontFamilys[val];
1772
+ }
1773
+ }
1774
+ if (family != null && family.length > 0) {
1775
+ var val = family[0].attributeList.val;
1776
+ if (val != null) {
1777
+ cellValue.ff = val;
1778
+ }
1779
+ }
1780
+ if (bolds != null && bolds.length > 0) {
1781
+ var bold = bolds[0].attributeList.val;
1782
+ if (bold == "0") {
1783
+ cellValue.bl = 0;
1784
+ }
1785
+ else {
1786
+ cellValue.bl = 1;
1787
+ }
1788
+ }
1789
+ if (italics != null && italics.length > 0) {
1790
+ var italic = italics[0].attributeList.val;
1791
+ if (italic == "0") {
1792
+ cellValue.it = 0;
1793
+ }
1794
+ else {
1795
+ cellValue.it = 1;
1796
+ }
1797
+ }
1798
+ if (strikes != null && strikes.length > 0) {
1799
+ var strike = strikes[0].attributeList.val;
1800
+ if (strike == "0") {
1801
+ cellValue.cl = 0;
1802
+ }
1803
+ else {
1804
+ cellValue.cl = 1;
1805
+ }
1806
+ }
1807
+ if (underlines != null && underlines.length > 0) {
1808
+ var underline = underlines[0].attributeList.val;
1809
+ if (underline == "single") {
1810
+ cellValue.un = 1;
1811
+ }
1812
+ else if (underline == "double") {
1813
+ cellValue.un = 2;
1814
+ }
1815
+ else if (underline == "singleAccounting") {
1816
+ cellValue.un = 3;
1817
+ }
1818
+ else if (underline == "doubleAccounting") {
1819
+ cellValue.un = 4;
1820
+ }
1821
+ else {
1822
+ cellValue.un = 0;
1823
+ }
1824
+ }
1825
+ }
1826
+ }
1827
+ // vt: number | undefined//Vertical alignment, 0 middle, 1 up, 2 down, alignment
1828
+ // ht: number | undefined//Horizontal alignment,0 center, 1 left, 2 right, alignment
1829
+ // tr: number | undefined //Text rotation,0: 0、1: 45 、2: -45、3 Vertical text、4: 90 、5: -90, alignment
1830
+ // tb: number | undefined //Text wrap,0 truncation, 1 overflow, 2 word wrap, alignment
1831
+ if (horizontal != undefined) { //Horizontal alignment
1832
+ if (horizontal == "center") {
1833
+ cellValue.ht = 0;
1834
+ }
1835
+ else if (horizontal == "centerContinuous") {
1836
+ cellValue.ht = 0; //luckysheet unsupport
1837
+ }
1838
+ else if (horizontal == "left") {
1839
+ cellValue.ht = 1;
1840
+ }
1841
+ else if (horizontal == "right") {
1842
+ cellValue.ht = 2;
1843
+ }
1844
+ else if (horizontal == "distributed") {
1845
+ cellValue.ht = 0; //luckysheet unsupport
1846
+ }
1847
+ else if (horizontal == "fill") {
1848
+ cellValue.ht = 1; //luckysheet unsupport
1849
+ }
1850
+ else if (horizontal == "general") {
1851
+ cellValue.ht = 1; //luckysheet unsupport
1852
+ }
1853
+ else if (horizontal == "justify") {
1854
+ cellValue.ht = 0; //luckysheet unsupport
1855
+ }
1856
+ else {
1857
+ cellValue.ht = 1;
1858
+ }
1859
+ }
1860
+ if (vertical != undefined) { //Vertical alignment
1861
+ if (vertical == "bottom") {
1862
+ cellValue.vt = 2;
1863
+ }
1864
+ else if (vertical == "center") {
1865
+ cellValue.vt = 0;
1866
+ }
1867
+ else if (vertical == "distributed") {
1868
+ cellValue.vt = 0; //luckysheet unsupport
1869
+ }
1870
+ else if (vertical == "justify") {
1871
+ cellValue.vt = 0; //luckysheet unsupport
1872
+ }
1873
+ else if (vertical == "top") {
1874
+ cellValue.vt = 1;
1875
+ }
1876
+ else {
1877
+ cellValue.vt = 1;
1878
+ }
1879
+ }
1880
+ else {
1881
+ //sometimes bottom style is lost after setting it in excel
1882
+ //when vertical is undefined set it to 2.
1883
+ cellValue.vt = 2;
1884
+ }
1885
+ if (wrapText != undefined) {
1886
+ if (wrapText == "1") {
1887
+ cellValue.tb = 2;
1888
+ }
1889
+ else {
1890
+ cellValue.tb = 1;
1891
+ }
1892
+ }
1893
+ else {
1894
+ cellValue.tb = 1;
1895
+ }
1896
+ if (textRotation != undefined) {
1897
+ // tr: number | undefined //Text rotation,0: 0、1: 45 、2: -45、3 Vertical text、4: 90 、5: -90, alignment
1898
+ if (textRotation == "255") {
1899
+ cellValue.tr = 3;
1900
+ }
1901
+ // else if(textRotation=="45"){
1902
+ // cellValue.tr = 1;
1903
+ // }
1904
+ // else if(textRotation=="90"){
1905
+ // cellValue.tr = 4;
1906
+ // }
1907
+ // else if(textRotation=="135"){
1908
+ // cellValue.tr = 2;
1909
+ // }
1910
+ // else if(textRotation=="180"){
1911
+ // cellValue.tr = 5;
1912
+ // }
1913
+ else {
1914
+ cellValue.tr = 0;
1915
+ cellValue.rt = parseInt(textRotation);
1916
+ }
1917
+ }
1918
+ if (borderId != undefined) {
1919
+ var borderIdNum = parseInt(borderId);
1920
+ var border = borders[borderIdNum];
1921
+ // this._borderId = borderIdNum;
1922
+ var borderObject = new LuckySheetborderInfoCellForImp();
1923
+ borderObject.rangeType = "cell";
1924
+ // borderObject.cells = [];
1925
+ var borderCellValue = new LuckySheetborderInfoCellValue();
1926
+ borderCellValue.row_index = this.r;
1927
+ borderCellValue.col_index = this.c;
1928
+ var lefts = border.getInnerElements("left");
1929
+ var rights = border.getInnerElements("right");
1930
+ var tops = border.getInnerElements("top");
1931
+ var bottoms = border.getInnerElements("bottom");
1932
+ var diagonals = border.getInnerElements("diagonal");
1933
+ var starts = border.getInnerElements("start");
1934
+ var ends = border.getInnerElements("end");
1935
+ var left = this.getBorderInfo(lefts);
1936
+ var right = this.getBorderInfo(rights);
1937
+ var top_1 = this.getBorderInfo(tops);
1938
+ var bottom = this.getBorderInfo(bottoms);
1939
+ this.getBorderInfo(diagonals);
1940
+ var start = this.getBorderInfo(starts);
1941
+ var end = this.getBorderInfo(ends);
1942
+ var isAdd = false;
1943
+ if (start != null && start.color != null) {
1944
+ borderCellValue.l = start;
1945
+ isAdd = true;
1946
+ }
1947
+ if (end != null && end.color != null) {
1948
+ borderCellValue.r = end;
1949
+ isAdd = true;
1950
+ }
1951
+ if (left != null && left.color != null) {
1952
+ borderCellValue.l = left;
1953
+ isAdd = true;
1954
+ }
1955
+ if (right != null && right.color != null) {
1956
+ borderCellValue.r = right;
1957
+ isAdd = true;
1958
+ }
1959
+ if (top_1 != null && top_1.color != null) {
1960
+ borderCellValue.t = top_1;
1961
+ isAdd = true;
1962
+ }
1963
+ if (bottom != null && bottom.color != null) {
1964
+ borderCellValue.b = bottom;
1965
+ isAdd = true;
1966
+ }
1967
+ if (isAdd) {
1968
+ borderObject.value = borderCellValue;
1969
+ // this.config._borderInfo[borderId] = borderObject;
1970
+ this._borderObject = borderObject;
1971
+ }
1972
+ }
1973
+ }
1974
+ else {
1975
+ cellValue.tb = 1;
1976
+ }
1977
+ if (v != null) {
1978
+ var value = v[0].value;
1979
+ if (/&#\d+;/.test(value)) {
1980
+ value = this.htmlDecode(value);
1981
+ }
1982
+ if (t == ST_CellType["SharedString"]) {
1983
+ var siIndex = parseInt(v[0].value);
1984
+ var sharedSI = sharedStrings[siIndex];
1985
+ var rFlag = sharedSI.getInnerElements("r");
1986
+ if (rFlag == null) {
1987
+ var tFlag = sharedSI.getInnerElements("t");
1988
+ if (tFlag != null) {
1989
+ var text_1 = "";
1990
+ tFlag.forEach(function (t) {
1991
+ text_1 += t.value;
1992
+ });
1993
+ text_1 = escapeCharacter(text_1);
1994
+ //isContainMultiType(text) &&
1995
+ if (familyFont == "Roman" && text_1.length > 0) {
1996
+ var textArray = text_1.split("");
1997
+ var preWordType = null, wordText = "", preWholef = null;
1998
+ var wholef = "Times New Roman";
1999
+ if (cellValue.ff != null) {
2000
+ wholef = cellValue.ff;
2001
+ }
2002
+ var cellFormat = cellValue.ct;
2003
+ if (cellFormat == null) {
2004
+ cellFormat = new LuckySheetCellFormat();
2005
+ }
2006
+ if (cellFormat.s == null) {
2007
+ cellFormat.s = [];
2008
+ }
2009
+ for (var i = 0; i < textArray.length; i++) {
2010
+ var w = textArray[i];
2011
+ var type = null, ff = wholef;
2012
+ if (isChinese(w)) {
2013
+ type = "c";
2014
+ ff = "宋体";
2015
+ }
2016
+ else if (isJapanese(w)) {
2017
+ type = "j";
2018
+ ff = "Yu Gothic";
2019
+ }
2020
+ else if (isKoera(w)) {
2021
+ type = "k";
2022
+ ff = "Malgun Gothic";
2023
+ }
2024
+ else {
2025
+ type = "e";
2026
+ }
2027
+ if ((type != preWordType && preWordType != null) || i == textArray.length - 1) {
2028
+ var InlineString = new LuckyInlineString();
2029
+ InlineString.ff = preWholef;
2030
+ if (cellValue.fc != null) {
2031
+ InlineString.fc = cellValue.fc;
2032
+ }
2033
+ if (cellValue.fs != null) {
2034
+ InlineString.fs = cellValue.fs;
2035
+ }
2036
+ if (cellValue.cl != null) {
2037
+ InlineString.cl = cellValue.cl;
2038
+ }
2039
+ if (cellValue.un != null) {
2040
+ InlineString.un = cellValue.un;
2041
+ }
2042
+ if (cellValue.bl != null) {
2043
+ InlineString.bl = cellValue.bl;
2044
+ }
2045
+ if (cellValue.it != null) {
2046
+ InlineString.it = cellValue.it;
2047
+ }
2048
+ if (i == textArray.length - 1) {
2049
+ if (type == preWordType) {
2050
+ InlineString.ff = ff;
2051
+ InlineString.v = wordText + w;
2052
+ }
2053
+ else {
2054
+ InlineString.ff = preWholef;
2055
+ InlineString.v = wordText;
2056
+ cellFormat.s.push(InlineString);
2057
+ var InlineStringLast = new LuckyInlineString();
2058
+ InlineStringLast.ff = ff;
2059
+ InlineStringLast.v = w;
2060
+ if (cellValue.fc != null) {
2061
+ InlineStringLast.fc = cellValue.fc;
2062
+ }
2063
+ if (cellValue.fs != null) {
2064
+ InlineStringLast.fs = cellValue.fs;
2065
+ }
2066
+ if (cellValue.cl != null) {
2067
+ InlineStringLast.cl = cellValue.cl;
2068
+ }
2069
+ if (cellValue.un != null) {
2070
+ InlineStringLast.un = cellValue.un;
2071
+ }
2072
+ if (cellValue.bl != null) {
2073
+ InlineStringLast.bl = cellValue.bl;
2074
+ }
2075
+ if (cellValue.it != null) {
2076
+ InlineStringLast.it = cellValue.it;
2077
+ }
2078
+ cellFormat.s.push(InlineStringLast);
2079
+ break;
2080
+ }
2081
+ }
2082
+ else {
2083
+ InlineString.v = wordText;
2084
+ }
2085
+ cellFormat.s.push(InlineString);
2086
+ wordText = w;
2087
+ }
2088
+ else {
2089
+ wordText += w;
2090
+ }
2091
+ preWordType = type;
2092
+ preWholef = ff;
2093
+ }
2094
+ cellFormat.t = "inlineStr";
2095
+ // cellFormat.s = [InlineString];
2096
+ cellValue.ct = cellFormat;
2097
+ // console.log(cellValue);
2098
+ }
2099
+ else {
2100
+ text_1 = this.replaceSpecialWrap(text_1);
2101
+ if (text_1.indexOf("\r\n") > -1 || text_1.indexOf("\n") > -1) {
2102
+ var InlineString = new LuckyInlineString();
2103
+ InlineString.v = text_1;
2104
+ var cellFormat = cellValue.ct;
2105
+ if (cellFormat == null) {
2106
+ cellFormat = new LuckySheetCellFormat();
2107
+ }
2108
+ if (cellValue.ff != null) {
2109
+ InlineString.ff = cellValue.ff;
2110
+ }
2111
+ if (cellValue.fc != null) {
2112
+ InlineString.fc = cellValue.fc;
2113
+ }
2114
+ if (cellValue.fs != null) {
2115
+ InlineString.fs = cellValue.fs;
2116
+ }
2117
+ if (cellValue.cl != null) {
2118
+ InlineString.cl = cellValue.cl;
2119
+ }
2120
+ if (cellValue.un != null) {
2121
+ InlineString.un = cellValue.un;
2122
+ }
2123
+ if (cellValue.bl != null) {
2124
+ InlineString.bl = cellValue.bl;
2125
+ }
2126
+ if (cellValue.it != null) {
2127
+ InlineString.it = cellValue.it;
2128
+ }
2129
+ cellFormat.t = "inlineStr";
2130
+ cellFormat.s = [InlineString];
2131
+ cellValue.ct = cellFormat;
2132
+ }
2133
+ else {
2134
+ cellValue.v = text_1;
2135
+ quotePrefix = "1";
2136
+ }
2137
+ }
2138
+ }
2139
+ }
2140
+ else {
2141
+ var styles_1 = [];
2142
+ rFlag.forEach(function (r) {
2143
+ var tFlag = r.getInnerElements("t");
2144
+ var rPr = r.getInnerElements("rPr");
2145
+ var InlineString = new LuckyInlineString();
2146
+ if (tFlag != null && tFlag.length > 0) {
2147
+ var text = tFlag[0].value;
2148
+ text = _this.replaceSpecialWrap(text);
2149
+ text = escapeCharacter(text);
2150
+ InlineString.v = text;
2151
+ }
2152
+ if (rPr != null && rPr.length > 0) {
2153
+ var frpr = rPr[0];
2154
+ var sz = getlineStringAttr(frpr, "sz"), rFont = getlineStringAttr(frpr, "rFont"); getlineStringAttr(frpr, "family"); getlineStringAttr(frpr, "charset"); getlineStringAttr(frpr, "scheme"); var b = getlineStringAttr(frpr, "b"), i = getlineStringAttr(frpr, "i"), u = getlineStringAttr(frpr, "u"), strike = getlineStringAttr(frpr, "strike"), vertAlign = getlineStringAttr(frpr, "vertAlign"), color = void 0;
2155
+ var cEle = frpr.getInnerElements("color");
2156
+ if (cEle != null && cEle.length > 0) {
2157
+ color = getColor(cEle[0], _this.styles);
2158
+ }
2159
+ var ff = void 0;
2160
+ // if(family!=null){
2161
+ // ff = fontFamilys[family];
2162
+ // }
2163
+ if (rFont != null) {
2164
+ ff = rFont;
2165
+ }
2166
+ if (ff != null) {
2167
+ InlineString.ff = ff;
2168
+ }
2169
+ else if (cellValue.ff != null) {
2170
+ InlineString.ff = cellValue.ff;
2171
+ }
2172
+ if (color != null) {
2173
+ InlineString.fc = color;
2174
+ }
2175
+ else if (cellValue.fc != null) {
2176
+ InlineString.fc = cellValue.fc;
2177
+ }
2178
+ if (sz != null) {
2179
+ InlineString.fs = parseInt(sz);
2180
+ }
2181
+ else if (cellValue.fs != null) {
2182
+ InlineString.fs = cellValue.fs;
2183
+ }
2184
+ if (strike != null) {
2185
+ InlineString.cl = parseInt(strike);
2186
+ }
2187
+ else if (cellValue.cl != null) {
2188
+ InlineString.cl = cellValue.cl;
2189
+ }
2190
+ if (u != null) {
2191
+ InlineString.un = parseInt(u);
2192
+ }
2193
+ else if (cellValue.un != null) {
2194
+ InlineString.un = cellValue.un;
2195
+ }
2196
+ if (b != null) {
2197
+ InlineString.bl = parseInt(b);
2198
+ }
2199
+ else if (cellValue.bl != null) {
2200
+ InlineString.bl = cellValue.bl;
2201
+ }
2202
+ if (i != null) {
2203
+ InlineString.it = parseInt(i);
2204
+ }
2205
+ else if (cellValue.it != null) {
2206
+ InlineString.it = cellValue.it;
2207
+ }
2208
+ if (vertAlign != null) {
2209
+ InlineString.va = parseInt(vertAlign);
2210
+ }
2211
+ // ff:string | undefined //font family
2212
+ // fc:string | undefined//font color
2213
+ // fs:number | undefined//font size
2214
+ // cl:number | undefined//strike
2215
+ // un:number | undefined//underline
2216
+ // bl:number | undefined//blod
2217
+ // it:number | undefined//italic
2218
+ // v:string | undefined
2219
+ }
2220
+ else {
2221
+ if (InlineString.ff == null && cellValue.ff != null) {
2222
+ InlineString.ff = cellValue.ff;
2223
+ }
2224
+ if (InlineString.fc == null && cellValue.fc != null) {
2225
+ InlineString.fc = cellValue.fc;
2226
+ }
2227
+ if (InlineString.fs == null && cellValue.fs != null) {
2228
+ InlineString.fs = cellValue.fs;
2229
+ }
2230
+ if (InlineString.cl == null && cellValue.cl != null) {
2231
+ InlineString.cl = cellValue.cl;
2232
+ }
2233
+ if (InlineString.un == null && cellValue.un != null) {
2234
+ InlineString.un = cellValue.un;
2235
+ }
2236
+ if (InlineString.bl == null && cellValue.bl != null) {
2237
+ InlineString.bl = cellValue.bl;
2238
+ }
2239
+ if (InlineString.it == null && cellValue.it != null) {
2240
+ InlineString.it = cellValue.it;
2241
+ }
2242
+ }
2243
+ styles_1.push(InlineString);
2244
+ });
2245
+ var cellFormat = cellValue.ct;
2246
+ if (cellFormat == null) {
2247
+ cellFormat = new LuckySheetCellFormat();
2248
+ }
2249
+ cellFormat.t = "inlineStr";
2250
+ cellFormat.s = styles_1;
2251
+ cellValue.ct = cellFormat;
2252
+ }
2253
+ }
2254
+ // to be confirmed
2255
+ else if (t == ST_CellType["InlineString"] && v != null) {
2256
+ cellValue.v = "'" + value;
2257
+ }
2258
+ else {
2259
+ value = escapeCharacter(value);
2260
+ cellValue.v = value;
2261
+ }
2262
+ }
2263
+ if (quotePrefix != null) {
2264
+ cellValue.qp = parseInt(quotePrefix);
2265
+ }
2266
+ return cellValue;
2267
+ };
2268
+ LuckySheetCelldata.prototype.replaceSpecialWrap = function (text) {
2269
+ text = text.replace(/_x000D_/g, "").replace(/&#13;&#10;/g, "\r\n").replace(/&#13;/g, "\r").replace(/&#10;/g, "\n");
2270
+ return text;
2271
+ };
2272
+ LuckySheetCelldata.prototype.getBackgroundByFill = function (fill, clrScheme) {
2273
+ var patternFills = fill.getInnerElements("patternFill");
2274
+ if (patternFills != null) {
2275
+ var patternFill = patternFills[0];
2276
+ var fgColors = patternFill.getInnerElements("fgColor");
2277
+ var bgColors = patternFill.getInnerElements("bgColor");
2278
+ var fg = void 0, bg = void 0;
2279
+ if (fgColors != null) {
2280
+ var fgColor = fgColors[0];
2281
+ fg = getColor(fgColor, this.styles);
2282
+ }
2283
+ if (bgColors != null) {
2284
+ var bgColor = bgColors[0];
2285
+ bg = getColor(bgColor, this.styles);
2286
+ }
2287
+ // console.log(fgColors,bgColors,clrScheme);
2288
+ if (fg != null) {
2289
+ return fg;
2290
+ }
2291
+ else if (bg != null) {
2292
+ return bg;
2293
+ }
2294
+ }
2295
+ else {
2296
+ var gradientfills = fill.getInnerElements("gradientFill");
2297
+ if (gradientfills != null) {
2298
+ //graient color fill handler
2299
+ return null;
2300
+ }
2301
+ }
2302
+ };
2303
+ LuckySheetCelldata.prototype.getBorderInfo = function (borders) {
2304
+ if (borders == null) {
2305
+ return null;
2306
+ }
2307
+ var border = borders[0], attrList = border.attributeList;
2308
+ this.styles["clrScheme"];
2309
+ var style = attrList.style;
2310
+ if (style == null || style == "none") {
2311
+ return null;
2312
+ }
2313
+ var colors = border.getInnerElements("color");
2314
+ var colorRet = "#000000";
2315
+ if (colors != null) {
2316
+ var color = colors[0];
2317
+ colorRet = getColor(color, this.styles);
2318
+ if (colorRet == null) {
2319
+ colorRet = "#000000";
2320
+ }
2321
+ }
2322
+ var ret = new LuckySheetborderInfoCellValueStyle();
2323
+ ret.style = borderTypes[style];
2324
+ ret.color = colorRet;
2325
+ return ret;
2326
+ };
2327
+ LuckySheetCelldata.prototype.htmlDecode = function (str) {
2328
+ return str.replace(/&#(x)?([^&]{1,5});/g, function ($, $1, $2) {
2329
+ return String.fromCharCode(parseInt($2, $1 ? 16 : 10));
2330
+ });
2331
+ };
2332
+ return LuckySheetCelldata;
2333
+ }(LuckySheetCelldataBase));
2334
+
2335
+ var LuckySheet = /** @class */ (function (_super) {
2336
+ __extends(LuckySheet, _super);
2337
+ function LuckySheet(sheetName, sheetId, sheetOrder, isInitialCell, allFileOption) {
2338
+ if (isInitialCell === void 0) { isInitialCell = false; }
2339
+ var _this =
2340
+ //Private
2341
+ _super.call(this) || this;
2342
+ _this.isInitialCell = isInitialCell;
2343
+ _this.readXml = allFileOption.readXml;
2344
+ _this.sheetFile = allFileOption.sheetFile;
2345
+ _this.styles = allFileOption.styles;
2346
+ _this.sharedStrings = allFileOption.sharedStrings;
2347
+ _this.calcChainEles = allFileOption.calcChain;
2348
+ _this.sheetList = allFileOption.sheetList;
2349
+ _this.imageList = allFileOption.imageList;
2350
+ _this.hide = allFileOption.hide;
2351
+ //Output
2352
+ _this.name = sheetName;
2353
+ _this.index = sheetId;
2354
+ _this.order = sheetOrder.toString();
2355
+ _this.config = new LuckyConfig();
2356
+ _this.celldata = [];
2357
+ _this.mergeCells = _this.readXml.getElementsByTagName("mergeCells/mergeCell", _this.sheetFile);
2358
+ _this.styles["clrScheme"];
2359
+ var sheetView = _this.readXml.getElementsByTagName("sheetViews/sheetView", _this.sheetFile);
2360
+ var showGridLines = "1", tabSelected = "0", zoomScale = "100", activeCell = "A1";
2361
+ if (sheetView.length > 0) {
2362
+ var attrList = sheetView[0].attributeList;
2363
+ showGridLines = getXmlAttibute(attrList, "showGridLines", "1");
2364
+ tabSelected = getXmlAttibute(attrList, "tabSelected", "0");
2365
+ zoomScale = getXmlAttibute(attrList, "zoomScale", "100");
2366
+ // let colorId = getXmlAttibute(attrList, "colorId", "0");
2367
+ var selections = sheetView[0].getInnerElements("selection");
2368
+ if (selections != null && selections.length > 0) {
2369
+ activeCell = getXmlAttibute(selections[0].attributeList, "activeCell", "A1");
2370
+ var range = getcellrange(activeCell, _this.sheetList, sheetId);
2371
+ _this.luckysheet_select_save = [];
2372
+ _this.luckysheet_select_save.push(range);
2373
+ }
2374
+ }
2375
+ _this.showGridLines = showGridLines;
2376
+ _this.status = tabSelected;
2377
+ _this.zoomRatio = parseInt(zoomScale) / 100;
2378
+ var tabColors = _this.readXml.getElementsByTagName("sheetPr/tabColor", _this.sheetFile);
2379
+ if (tabColors != null && tabColors.length > 0) {
2380
+ var tabColor = tabColors[0], attrList = tabColor.attributeList;
2381
+ // if(attrList.rgb!=null){
2382
+ var tc = getColor(tabColor, _this.styles);
2383
+ _this.color = tc;
2384
+ // }
2385
+ }
2386
+ var sheetFormatPr = _this.readXml.getElementsByTagName("sheetFormatPr", _this.sheetFile);
2387
+ var defaultColWidth, defaultRowHeight;
2388
+ if (sheetFormatPr.length > 0) {
2389
+ var attrList = sheetFormatPr[0].attributeList;
2390
+ defaultColWidth = getXmlAttibute(attrList, "defaultColWidth", "9.21");
2391
+ defaultRowHeight = getXmlAttibute(attrList, "defaultRowHeight", "19");
2392
+ }
2393
+ _this.defaultColWidth = getColumnWidthPixel(parseFloat(defaultColWidth));
2394
+ _this.defaultRowHeight = getRowHeightPixel(parseFloat(defaultRowHeight));
2395
+ _this.generateConfigColumnLenAndHidden();
2396
+ var cellOtherInfo = _this.generateConfigRowLenAndHiddenAddCell();
2397
+ if (_this.calcChain == null) {
2398
+ _this.calcChain = [];
2399
+ }
2400
+ var formulaListExist = {};
2401
+ for (var c = 0; c < _this.calcChainEles.length; c++) {
2402
+ var calcChainEle = _this.calcChainEles[c], attrList = calcChainEle.attributeList;
2403
+ if (attrList.i != sheetId) {
2404
+ continue;
2405
+ }
2406
+ var r = attrList.r, i = attrList.i; attrList.l; attrList.s; attrList.a; attrList.t;
2407
+ var range = getcellrange(r);
2408
+ var chain = new LuckysheetCalcChain();
2409
+ chain.r = range.row[0];
2410
+ chain.c = range.column[0];
2411
+ chain.index = _this.index;
2412
+ _this.calcChain.push(chain);
2413
+ formulaListExist["r" + r + "c" + c] = null;
2414
+ }
2415
+ if (_this.formulaRefList != null) {
2416
+ for (var key in _this.formulaRefList) {
2417
+ var funclist = _this.formulaRefList[key];
2418
+ var mainFunc = funclist["mainRef"], mainCellValue = mainFunc.cellValue;
2419
+ var formulaTxt = mainFunc.fv;
2420
+ var mainR = mainCellValue.r, mainC = mainCellValue.c;
2421
+ // let refRange = getcellrange(ref);
2422
+ for (var name_1 in funclist) {
2423
+ if (name_1 == "mainRef") {
2424
+ continue;
2425
+ }
2426
+ var funcValue = funclist[name_1], cellValue = funcValue.cellValue;
2427
+ if (cellValue == null) {
2428
+ continue;
2429
+ }
2430
+ var r = cellValue.r, c = cellValue.c;
2431
+ var func = formulaTxt;
2432
+ var offsetRow = r - mainR, offsetCol = c - mainC;
2433
+ if (offsetRow > 0) {
2434
+ func = "=" + fromulaRef.functionCopy(func, "down", offsetRow);
2435
+ }
2436
+ else if (offsetRow < 0) {
2437
+ func = "=" + fromulaRef.functionCopy(func, "up", Math.abs(offsetRow));
2438
+ }
2439
+ if (offsetCol > 0) {
2440
+ func = "=" + fromulaRef.functionCopy(func, "right", offsetCol);
2441
+ }
2442
+ else if (offsetCol < 0) {
2443
+ func = "=" + fromulaRef.functionCopy(func, "left", Math.abs(offsetCol));
2444
+ }
2445
+ // console.log(offsetRow, offsetCol, func);
2446
+ cellValue.v.f = func;
2447
+ //添加共享公式链
2448
+ var chain = new LuckysheetCalcChain();
2449
+ chain.r = cellValue.r;
2450
+ chain.c = cellValue.c;
2451
+ chain.index = _this.index;
2452
+ _this.calcChain.push(chain);
2453
+ }
2454
+ }
2455
+ }
2456
+ //There may be formulas that do not appear in calcChain
2457
+ for (var key in cellOtherInfo.formulaList) {
2458
+ if (!(key in formulaListExist)) {
2459
+ var formulaListItem = cellOtherInfo.formulaList[key];
2460
+ var chain = new LuckysheetCalcChain();
2461
+ chain.r = formulaListItem.r;
2462
+ chain.c = formulaListItem.c;
2463
+ chain.index = _this.index;
2464
+ _this.calcChain.push(chain);
2465
+ }
2466
+ }
2467
+ // dataVerification config
2468
+ _this.dataVerification = _this.generateConfigDataValidations();
2469
+ // hyperlink config
2470
+ _this.hyperlink = _this.generateConfigHyperlinks();
2471
+ // sheet hide
2472
+ _this.hide = _this.hide;
2473
+ if (_this.mergeCells != null) {
2474
+ for (var i = 0; i < _this.mergeCells.length; i++) {
2475
+ var merge = _this.mergeCells[i], attrList = merge.attributeList;
2476
+ var ref = attrList.ref;
2477
+ if (ref == null) {
2478
+ continue;
2479
+ }
2480
+ var range = getcellrange(ref, _this.sheetList, sheetId);
2481
+ var mergeValue = new LuckySheetConfigMerge();
2482
+ mergeValue.r = range.row[0];
2483
+ mergeValue.c = range.column[0];
2484
+ mergeValue.rs = range.row[1] - range.row[0] + 1;
2485
+ mergeValue.cs = range.column[1] - range.column[0] + 1;
2486
+ if (_this.config.merge == null) {
2487
+ _this.config.merge = {};
2488
+ }
2489
+ _this.config.merge[range.row[0] + "_" + range.column[0]] = mergeValue;
2490
+ }
2491
+ }
2492
+ var drawingFile = allFileOption.drawingFile, drawingRelsFile = allFileOption.drawingRelsFile;
2493
+ if (drawingFile != null && drawingRelsFile != null) {
2494
+ var twoCellAnchors = _this.readXml.getElementsByTagName("xdr:twoCellAnchor", drawingFile);
2495
+ if (twoCellAnchors != null && twoCellAnchors.length > 0) {
2496
+ for (var i = 0; i < twoCellAnchors.length; i++) {
2497
+ var twoCellAnchor = twoCellAnchors[i];
2498
+ var editAs = getXmlAttibute(twoCellAnchor.attributeList, "editAs", "twoCell");
2499
+ var xdrFroms = twoCellAnchor.getInnerElements("xdr:from"), xdrTos = twoCellAnchor.getInnerElements("xdr:to");
2500
+ var xdr_blipfills = twoCellAnchor.getInnerElements("a:blip");
2501
+ if (xdrFroms != null && xdr_blipfills != null && xdrFroms.length > 0 && xdr_blipfills.length > 0) {
2502
+ var xdrFrom = xdrFroms[0], xdrTo = xdrTos[0], xdr_blipfill = xdr_blipfills[0];
2503
+ var rembed = getXmlAttibute(xdr_blipfill.attributeList, "r:embed", null);
2504
+ var imageObject = _this.getBase64ByRid(rembed, drawingRelsFile);
2505
+ // let aoff = xdr_xfrm.getInnerElements("a:off"), aext = xdr_xfrm.getInnerElements("a:ext");
2506
+ // if(aoff!=null && aext!=null && aoff.length>0 && aext.length>0){
2507
+ // let aoffAttribute = aoff[0].attributeList, aextAttribute = aext[0].attributeList;
2508
+ // let x = getXmlAttibute(aoffAttribute, "x", null);
2509
+ // let y = getXmlAttibute(aoffAttribute, "y", null);
2510
+ // let cx = getXmlAttibute(aextAttribute, "cx", null);
2511
+ // let cy = getXmlAttibute(aextAttribute, "cy", null);
2512
+ // if(x!=null && y!=null && cx!=null && cy!=null && imageObject !=null){
2513
+ // let x_n = getPxByEMUs(parseInt(x), "c"),y_n = getPxByEMUs(parseInt(y));
2514
+ // let cx_n = getPxByEMUs(parseInt(cx), "c"),cy_n = getPxByEMUs(parseInt(cy));
2515
+ var x_n = 0, y_n = 0;
2516
+ var cx_n = 0, cy_n = 0;
2517
+ imageObject.fromCol = _this.getXdrValue(xdrFrom.getInnerElements("xdr:col"));
2518
+ imageObject.fromColOff = getPxByEMUs(_this.getXdrValue(xdrFrom.getInnerElements("xdr:colOff")));
2519
+ imageObject.fromRow = _this.getXdrValue(xdrFrom.getInnerElements("xdr:row"));
2520
+ imageObject.fromRowOff = getPxByEMUs(_this.getXdrValue(xdrFrom.getInnerElements("xdr:rowOff")));
2521
+ imageObject.toCol = _this.getXdrValue(xdrTo.getInnerElements("xdr:col"));
2522
+ imageObject.toColOff = getPxByEMUs(_this.getXdrValue(xdrTo.getInnerElements("xdr:colOff")));
2523
+ imageObject.toRow = _this.getXdrValue(xdrTo.getInnerElements("xdr:row"));
2524
+ imageObject.toRowOff = getPxByEMUs(_this.getXdrValue(xdrTo.getInnerElements("xdr:rowOff")));
2525
+ imageObject.originWidth = cx_n;
2526
+ imageObject.originHeight = cy_n;
2527
+ if (editAs == "absolute") {
2528
+ imageObject.type = "3";
2529
+ }
2530
+ else if (editAs == "oneCell") {
2531
+ imageObject.type = "2";
2532
+ }
2533
+ else {
2534
+ imageObject.type = "1";
2535
+ }
2536
+ imageObject.isFixedPos = false;
2537
+ imageObject.fixedLeft = 0;
2538
+ imageObject.fixedTop = 0;
2539
+ var imageBorder = {
2540
+ color: "#000",
2541
+ radius: 0,
2542
+ style: "solid",
2543
+ width: 0
2544
+ };
2545
+ imageObject.border = imageBorder;
2546
+ var imageCrop = {
2547
+ height: cy_n,
2548
+ offsetLeft: 0,
2549
+ offsetTop: 0,
2550
+ width: cx_n
2551
+ };
2552
+ imageObject.crop = imageCrop;
2553
+ var imageDefault = {
2554
+ height: cy_n,
2555
+ left: x_n,
2556
+ top: y_n,
2557
+ width: cx_n
2558
+ };
2559
+ imageObject.default = imageDefault;
2560
+ if (_this.images == null) {
2561
+ _this.images = {};
2562
+ }
2563
+ _this.images[generateRandomIndex("image")] = imageObject;
2564
+ // }
2565
+ // }
2566
+ }
2567
+ }
2568
+ }
2569
+ }
2570
+ return _this;
2571
+ }
2572
+ LuckySheet.prototype.getXdrValue = function (ele) {
2573
+ if (ele == null || ele.length == 0) {
2574
+ return null;
2575
+ }
2576
+ return parseInt(ele[0].value);
2577
+ };
2578
+ LuckySheet.prototype.getBase64ByRid = function (rid, drawingRelsFile) {
2579
+ var Relationships = this.readXml.getElementsByTagName("Relationships/Relationship", drawingRelsFile);
2580
+ if (Relationships != null && Relationships.length > 0) {
2581
+ for (var i = 0; i < Relationships.length; i++) {
2582
+ var Relationship = Relationships[i];
2583
+ var attrList = Relationship.attributeList;
2584
+ var Id = getXmlAttibute(attrList, "Id", null);
2585
+ var src = getXmlAttibute(attrList, "Target", null);
2586
+ if (Id == rid) {
2587
+ src = src.replace(/\.\.\//g, "");
2588
+ src = "xl/" + src;
2589
+ var imgage = this.imageList.getImageByName(src);
2590
+ return imgage;
2591
+ }
2592
+ }
2593
+ }
2594
+ return null;
2595
+ };
2596
+ /**
2597
+ * @desc This will convert cols/col to luckysheet config of column'width
2598
+ */
2599
+ LuckySheet.prototype.generateConfigColumnLenAndHidden = function () {
2600
+ var cols = this.readXml.getElementsByTagName("cols/col", this.sheetFile);
2601
+ for (var i = 0; i < cols.length; i++) {
2602
+ var col = cols[i], attrList = col.attributeList;
2603
+ var min = getXmlAttibute(attrList, "min", null);
2604
+ var max = getXmlAttibute(attrList, "max", null);
2605
+ var width = getXmlAttibute(attrList, "width", null);
2606
+ var hidden = getXmlAttibute(attrList, "hidden", null);
2607
+ var customWidth = getXmlAttibute(attrList, "customWidth", null);
2608
+ if (min == null || max == null) {
2609
+ continue;
2610
+ }
2611
+ var minNum = parseInt(min) - 1, maxNum = parseInt(max) - 1, widthNum = parseFloat(width);
2612
+ for (var m = minNum; m <= maxNum; m++) {
2613
+ if (width != null) {
2614
+ if (this.config.columnlen == null) {
2615
+ this.config.columnlen = {};
2616
+ }
2617
+ this.config.columnlen[m] = getColumnWidthPixel(widthNum);
2618
+ }
2619
+ if (hidden == "1") {
2620
+ if (this.config.colhidden == null) {
2621
+ this.config.colhidden = {};
2622
+ }
2623
+ this.config.colhidden[m] = 0;
2624
+ if (this.config.columnlen) {
2625
+ delete this.config.columnlen[m];
2626
+ }
2627
+ }
2628
+ if (customWidth != null) {
2629
+ if (this.config.customWidth == null) {
2630
+ this.config.customWidth = {};
2631
+ }
2632
+ this.config.customWidth[m] = 1;
2633
+ }
2634
+ }
2635
+ }
2636
+ };
2637
+ /**
2638
+ * @desc This will convert cols/col to luckysheet config of column'width
2639
+ */
2640
+ LuckySheet.prototype.generateConfigRowLenAndHiddenAddCell = function () {
2641
+ var rows = this.readXml.getElementsByTagName("sheetData/row", this.sheetFile);
2642
+ var cellOtherInfo = {};
2643
+ var formulaList = {};
2644
+ cellOtherInfo.formulaList = formulaList;
2645
+ for (var i = 0; i < rows.length; i++) {
2646
+ var row = rows[i], attrList = row.attributeList;
2647
+ var rowNo = getXmlAttibute(attrList, "r", null);
2648
+ var height = getXmlAttibute(attrList, "ht", null);
2649
+ var hidden = getXmlAttibute(attrList, "hidden", null);
2650
+ var customHeight = getXmlAttibute(attrList, "customHeight", null);
2651
+ if (rowNo == null) {
2652
+ continue;
2653
+ }
2654
+ var rowNoNum = parseInt(rowNo) - 1;
2655
+ if (height != null) {
2656
+ var heightNum = parseFloat(height);
2657
+ if (this.config.rowlen == null) {
2658
+ this.config.rowlen = {};
2659
+ }
2660
+ this.config.rowlen[rowNoNum] = getRowHeightPixel(heightNum);
2661
+ }
2662
+ if (hidden == "1") {
2663
+ if (this.config.rowhidden == null) {
2664
+ this.config.rowhidden = {};
2665
+ }
2666
+ this.config.rowhidden[rowNoNum] = 0;
2667
+ if (this.config.rowlen) {
2668
+ delete this.config.rowlen[rowNoNum];
2669
+ }
2670
+ }
2671
+ if (customHeight != null) {
2672
+ if (this.config.customHeight == null) {
2673
+ this.config.customHeight = {};
2674
+ }
2675
+ this.config.customHeight[rowNoNum] = 1;
2676
+ }
2677
+ if (this.isInitialCell) {
2678
+ var cells = row.getInnerElements("c");
2679
+ for (var key in cells) {
2680
+ var cell = cells[key];
2681
+ var cellValue = new LuckySheetCelldata(cell, this.styles, this.sharedStrings, this.mergeCells, this.sheetFile, this.readXml);
2682
+ if (cellValue._borderObject != null) {
2683
+ if (this.config.borderInfo == null) {
2684
+ this.config.borderInfo = [];
2685
+ }
2686
+ this.config.borderInfo.push(cellValue._borderObject);
2687
+ delete cellValue._borderObject;
2688
+ }
2689
+ // let borderId = cellValue._borderId;
2690
+ // if(borderId!=null){
2691
+ // let borders = this.styles["borders"] as Element[];
2692
+ // if(this.config._borderInfo==null){
2693
+ // this.config._borderInfo = {};
2694
+ // }
2695
+ // if( borderId in this.config._borderInfo){
2696
+ // this.config._borderInfo[borderId].cells.push(cellValue.r + "_" + cellValue.c);
2697
+ // }
2698
+ // else{
2699
+ // let border = borders[borderId];
2700
+ // let borderObject = new LuckySheetborderInfoCellForImp();
2701
+ // borderObject.rangeType = "cellGroup";
2702
+ // borderObject.cells = [];
2703
+ // let borderCellValue = new LuckySheetborderInfoCellValue();
2704
+ // let lefts = border.getInnerElements("left");
2705
+ // let rights = border.getInnerElements("right");
2706
+ // let tops = border.getInnerElements("top");
2707
+ // let bottoms = border.getInnerElements("bottom");
2708
+ // let diagonals = border.getInnerElements("diagonal");
2709
+ // let left = this.getBorderInfo(lefts);
2710
+ // let right = this.getBorderInfo(rights);
2711
+ // let top = this.getBorderInfo(tops);
2712
+ // let bottom = this.getBorderInfo(bottoms);
2713
+ // let diagonal = this.getBorderInfo(diagonals);
2714
+ // let isAdd = false;
2715
+ // if(left!=null && left.color!=null){
2716
+ // borderCellValue.l = left;
2717
+ // isAdd = true;
2718
+ // }
2719
+ // if(right!=null && right.color!=null){
2720
+ // borderCellValue.r = right;
2721
+ // isAdd = true;
2722
+ // }
2723
+ // if(top!=null && top.color!=null){
2724
+ // borderCellValue.t = top;
2725
+ // isAdd = true;
2726
+ // }
2727
+ // if(bottom!=null && bottom.color!=null){
2728
+ // borderCellValue.b = bottom;
2729
+ // isAdd = true;
2730
+ // }
2731
+ // if(isAdd){
2732
+ // borderObject.value = borderCellValue;
2733
+ // this.config._borderInfo[borderId] = borderObject;
2734
+ // }
2735
+ // }
2736
+ // }
2737
+ if (cellValue._formulaType == "shared") {
2738
+ if (this.formulaRefList == null) {
2739
+ this.formulaRefList = {};
2740
+ }
2741
+ if (this.formulaRefList[cellValue._formulaSi] == null) {
2742
+ this.formulaRefList[cellValue._formulaSi] = {};
2743
+ }
2744
+ var fv = void 0;
2745
+ if (cellValue.v != null) {
2746
+ fv = cellValue.v.f;
2747
+ }
2748
+ var refValue = {
2749
+ t: cellValue._formulaType,
2750
+ ref: cellValue._fomulaRef,
2751
+ si: cellValue._formulaSi,
2752
+ fv: fv,
2753
+ cellValue: cellValue
2754
+ };
2755
+ if (cellValue._fomulaRef != null) {
2756
+ this.formulaRefList[cellValue._formulaSi]["mainRef"] = refValue;
2757
+ }
2758
+ else {
2759
+ this.formulaRefList[cellValue._formulaSi][cellValue.r + "_" + cellValue.c] = refValue;
2760
+ }
2761
+ // console.log(refValue, this.formulaRefList);
2762
+ }
2763
+ //There may be formulas that do not appear in calcChain
2764
+ if (cellValue.v != null && cellValue.v.f != null) {
2765
+ var formulaCell = {
2766
+ r: cellValue.r,
2767
+ c: cellValue.c
2768
+ };
2769
+ cellOtherInfo.formulaList["r" + cellValue.r + "c" + cellValue.c] = formulaCell;
2770
+ }
2771
+ this.celldata.push(cellValue);
2772
+ }
2773
+ }
2774
+ }
2775
+ return cellOtherInfo;
2776
+ };
2777
+ /**
2778
+ * luckysheet config of dataValidations
2779
+ *
2780
+ * @returns {IluckysheetDataVerification} - dataValidations config
2781
+ */
2782
+ LuckySheet.prototype.generateConfigDataValidations = function () {
2783
+ var rows = this.readXml.getElementsByTagName("dataValidations/dataValidation", this.sheetFile);
2784
+ var extLst = this.readXml.getElementsByTagName("extLst/ext/x14:dataValidations/x14:dataValidation", this.sheetFile) || [];
2785
+ rows = rows.concat(extLst);
2786
+ var dataVerification = {};
2787
+ for (var i = 0; i < rows.length; i++) {
2788
+ var row = rows[i];
2789
+ var attrList = row.attributeList;
2790
+ var formulaValue = row.value;
2791
+ var type = getXmlAttibute(attrList, "type", null);
2792
+ if (!type) {
2793
+ continue;
2794
+ }
2795
+ var operator = "", sqref = "", sqrefIndexArr = [], valueArr = [];
2796
+ var _prohibitInput = getXmlAttibute(attrList, "allowBlank", null) !== "1" ? false : true;
2797
+ // x14 processing
2798
+ var formulaReg = new RegExp(/<x14:formula1>|<xm:sqref>/g);
2799
+ if (formulaReg.test(formulaValue) && (extLst === null || extLst === void 0 ? void 0 : extLst.length) >= 0) {
2800
+ operator = getXmlAttibute(attrList, "operator", null);
2801
+ var peelOffData = getPeelOffX14(formulaValue);
2802
+ sqref = peelOffData === null || peelOffData === void 0 ? void 0 : peelOffData.sqref;
2803
+ sqrefIndexArr = getMultiSequenceToNum(sqref);
2804
+ valueArr = getMultiFormulaValue(peelOffData === null || peelOffData === void 0 ? void 0 : peelOffData.formula);
2805
+ }
2806
+ else {
2807
+ operator = getXmlAttibute(attrList, "operator", null);
2808
+ sqref = getXmlAttibute(attrList, "sqref", null);
2809
+ sqrefIndexArr = getMultiSequenceToNum(sqref);
2810
+ valueArr = getMultiFormulaValue(formulaValue);
2811
+ }
2812
+ var _type = DATA_VERIFICATION_MAP[type];
2813
+ var _type2 = null;
2814
+ var _value1 = (valueArr === null || valueArr === void 0 ? void 0 : valueArr.length) >= 1 ? valueArr[0] : "";
2815
+ var _value2 = (valueArr === null || valueArr === void 0 ? void 0 : valueArr.length) === 2 ? valueArr[1] : "";
2816
+ var _hint = getXmlAttibute(attrList, "prompt", null);
2817
+ var _hintShow = _hint ? true : false;
2818
+ var matchType = COMMON_TYPE2.includes(_type) ? "common" : _type;
2819
+ _type2 = operator
2820
+ ? DATA_VERIFICATION_TYPE2_MAP[matchType][operator]
2821
+ : "bw";
2822
+ // mobile phone number processing
2823
+ if (_type === "text_content" &&
2824
+ ((_value1 === null || _value1 === void 0 ? void 0 : _value1.includes("LEN")) || (_value1 === null || _value1 === void 0 ? void 0 : _value1.includes("len"))) && (_value1 === null || _value1 === void 0 ? void 0 : _value1.includes("=11"))) {
2825
+ _type = "validity";
2826
+ _type2 = "phone";
2827
+ }
2828
+ // date processing
2829
+ if (_type === "date") {
2830
+ var D1900 = new Date(1899, 11, 30, 0, 0, 0);
2831
+ _value1 = dayjs__default["default"](D1900)
2832
+ .clone()
2833
+ .add(Number(_value1), "day")
2834
+ .format("YYYY-MM-DD");
2835
+ _value2 = dayjs__default["default"](D1900)
2836
+ .clone()
2837
+ .add(Number(_value2), "day")
2838
+ .format("YYYY-MM-DD");
2839
+ }
2840
+ // checkbox and dropdown processing
2841
+ if (_type === "checkbox" || _type === "dropdown") {
2842
+ _type2 = null;
2843
+ }
2844
+ // dynamically add dataVerifications
2845
+ for (var _i = 0, sqrefIndexArr_1 = sqrefIndexArr; _i < sqrefIndexArr_1.length; _i++) {
2846
+ var ref = sqrefIndexArr_1[_i];
2847
+ dataVerification[ref] = {
2848
+ type: _type,
2849
+ type2: _type2,
2850
+ value1: _value1,
2851
+ value2: _value2,
2852
+ checked: false,
2853
+ remote: false,
2854
+ prohibitInput: _prohibitInput,
2855
+ hintShow: _hintShow,
2856
+ hintText: _hint
2857
+ };
2858
+ }
2859
+ }
2860
+ return dataVerification;
2861
+ };
2862
+ /**
2863
+ * luckysheet config of hyperlink
2864
+ *
2865
+ * @returns {IluckysheetHyperlink} - hyperlink config
2866
+ */
2867
+ LuckySheet.prototype.generateConfigHyperlinks = function () {
2868
+ var _a;
2869
+ var rows = this.readXml.getElementsByTagName("hyperlinks/hyperlink", this.sheetFile);
2870
+ var hyperlink = {};
2871
+ var _loop_1 = function (i) {
2872
+ var row = rows[i];
2873
+ var attrList = row.attributeList;
2874
+ var ref = getXmlAttibute(attrList, "ref", null), refArr = getMultiSequenceToNum(ref), _display = getXmlAttibute(attrList, "display", null), _address = getXmlAttibute(attrList, "location", null), _tooltip = getXmlAttibute(attrList, "tooltip", null);
2875
+ var _type = _address ? "internal" : "external";
2876
+ // external hyperlink
2877
+ if (!_address) {
2878
+ var rid_1 = attrList["r:id"];
2879
+ var sheetFile = this_1.sheetFile;
2880
+ var relationshipList = this_1.readXml.getElementsByTagName("Relationships/Relationship", "xl/worksheets/_rels/" + sheetFile.replace(worksheetFilePath, "") + ".rels");
2881
+ var findRid = relationshipList === null || relationshipList === void 0 ? void 0 : relationshipList.find(function (e) { return e.attributeList["Id"] === rid_1; });
2882
+ if (findRid) {
2883
+ _address = findRid.attributeList["Target"];
2884
+ _type = (_a = findRid.attributeList["TargetMode"]) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase();
2885
+ }
2886
+ }
2887
+ // match R1C1
2888
+ var addressReg = new RegExp(/^.*!R([\d$])+C([\d$])*$/g);
2889
+ if (addressReg.test(_address)) {
2890
+ _address = getTransR1C1ToSequence(_address);
2891
+ }
2892
+ // dynamically add hyperlinks
2893
+ for (var _i = 0, refArr_1 = refArr; _i < refArr_1.length; _i++) {
2894
+ var ref_1 = refArr_1[_i];
2895
+ hyperlink[ref_1] = {
2896
+ linkAddress: _address,
2897
+ linkTooltip: _tooltip || "",
2898
+ linkType: _type,
2899
+ display: _display || "",
2900
+ };
2901
+ }
2902
+ };
2903
+ var this_1 = this;
2904
+ for (var i = 0; i < rows.length; i++) {
2905
+ _loop_1(i);
2906
+ }
2907
+ return hyperlink;
2908
+ };
2909
+ return LuckySheet;
2910
+ }(LuckySheetBase));
2911
+
2912
+ var UDOC = {};
2913
+ UDOC.G = {
2914
+ concat: function (p, r) {
2915
+ for (var i = 0; i < r.cmds.length; i++)
2916
+ p.cmds.push(r.cmds[i]);
2917
+ for (var i = 0; i < r.crds.length; i++)
2918
+ p.crds.push(r.crds[i]);
2919
+ },
2920
+ getBB: function (ps) {
2921
+ var x0 = 1e99, y0 = 1e99, x1 = -x0, y1 = -y0;
2922
+ for (var i = 0; i < ps.length; i += 2) {
2923
+ var x = ps[i], y = ps[i + 1];
2924
+ if (x < x0)
2925
+ x0 = x;
2926
+ else if (x > x1)
2927
+ x1 = x;
2928
+ if (y < y0)
2929
+ y0 = y;
2930
+ else if (y > y1)
2931
+ y1 = y;
2932
+ }
2933
+ return [x0, y0, x1, y1];
2934
+ },
2935
+ rectToPath: function (r) { return { cmds: ["M", "L", "L", "L", "Z"], crds: [r[0], r[1], r[2], r[1], r[2], r[3], r[0], r[3]] }; },
2936
+ // a inside b
2937
+ insideBox: function (a, b) { return b[0] <= a[0] && b[1] <= a[1] && a[2] <= b[2] && a[3] <= b[3]; },
2938
+ isBox: function (p, bb) {
2939
+ var sameCrd8 = function (pcrd, crds) {
2940
+ for (var o = 0; o < 8; o += 2) {
2941
+ var eq = true;
2942
+ for (var j = 0; j < 8; j++)
2943
+ if (Math.abs(crds[j] - pcrd[(j + o) & 7]) >= 2) {
2944
+ eq = false;
2945
+ break;
2946
+ }
2947
+ if (eq)
2948
+ return true;
2949
+ }
2950
+ return false;
2951
+ };
2952
+ if (p.cmds.length > 10)
2953
+ return false;
2954
+ var cmds = p.cmds.join(""), crds = p.crds;
2955
+ var sameRect = false;
2956
+ if ((cmds == "MLLLZ" && crds.length == 8)
2957
+ || (cmds == "MLLLLZ" && crds.length == 10)) {
2958
+ if (crds.length == 10)
2959
+ crds = crds.slice(0, 8);
2960
+ var x0 = bb[0], y0 = bb[1], x1 = bb[2], y1 = bb[3];
2961
+ if (!sameRect)
2962
+ sameRect = sameCrd8(crds, [x0, y0, x1, y0, x1, y1, x0, y1]);
2963
+ if (!sameRect)
2964
+ sameRect = sameCrd8(crds, [x0, y1, x1, y1, x1, y0, x0, y0]);
2965
+ }
2966
+ return sameRect;
2967
+ },
2968
+ boxArea: function (a) { var w = a[2] - a[0], h = a[3] - a[1]; return w * h; },
2969
+ newPath: function (gst) { gst.pth = { cmds: [], crds: [] }; },
2970
+ moveTo: function (gst, x, y) {
2971
+ var p = UDOC.M.multPoint(gst.ctm, [x, y]); //if(gst.cpos[0]==p[0] && gst.cpos[1]==p[1]) return;
2972
+ gst.pth.cmds.push("M");
2973
+ gst.pth.crds.push(p[0], p[1]);
2974
+ gst.cpos = p;
2975
+ },
2976
+ lineTo: function (gst, x, y) {
2977
+ var p = UDOC.M.multPoint(gst.ctm, [x, y]);
2978
+ if (gst.cpos[0] == p[0] && gst.cpos[1] == p[1])
2979
+ return;
2980
+ gst.pth.cmds.push("L");
2981
+ gst.pth.crds.push(p[0], p[1]);
2982
+ gst.cpos = p;
2983
+ },
2984
+ curveTo: function (gst, x1, y1, x2, y2, x3, y3) {
2985
+ var p;
2986
+ p = UDOC.M.multPoint(gst.ctm, [x1, y1]);
2987
+ x1 = p[0];
2988
+ y1 = p[1];
2989
+ p = UDOC.M.multPoint(gst.ctm, [x2, y2]);
2990
+ x2 = p[0];
2991
+ y2 = p[1];
2992
+ p = UDOC.M.multPoint(gst.ctm, [x3, y3]);
2993
+ x3 = p[0];
2994
+ y3 = p[1];
2995
+ gst.cpos = p;
2996
+ gst.pth.cmds.push("C");
2997
+ gst.pth.crds.push(x1, y1, x2, y2, x3, y3);
2998
+ },
2999
+ closePath: function (gst) { gst.pth.cmds.push("Z"); },
3000
+ arc: function (gst, x, y, r, a0, a1, neg) {
3001
+ // circle from a0 counter-clock-wise to a1
3002
+ if (neg)
3003
+ while (a1 > a0)
3004
+ a1 -= 2 * Math.PI;
3005
+ else
3006
+ while (a1 < a0)
3007
+ a1 += 2 * Math.PI;
3008
+ var th = (a1 - a0) / 4;
3009
+ var x0 = Math.cos(th / 2), y0 = -Math.sin(th / 2);
3010
+ var x1 = (4 - x0) / 3, y1 = y0 == 0 ? y0 : (1 - x0) * (3 - x0) / (3 * y0);
3011
+ var x2 = x1, y2 = -y1;
3012
+ var x3 = x0, y3 = -y0;
3013
+ var p1 = [x1, y1], p2 = [x2, y2], p3 = [x3, y3];
3014
+ var pth = { cmds: [(gst.pth.cmds.length == 0) ? "M" : "L", "C", "C", "C", "C"], crds: [x0, y0, x1, y1, x2, y2, x3, y3] };
3015
+ var rot = [1, 0, 0, 1, 0, 0];
3016
+ UDOC.M.rotate(rot, -th);
3017
+ for (var i = 0; i < 3; i++) {
3018
+ p1 = UDOC.M.multPoint(rot, p1);
3019
+ p2 = UDOC.M.multPoint(rot, p2);
3020
+ p3 = UDOC.M.multPoint(rot, p3);
3021
+ pth.crds.push(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
3022
+ }
3023
+ var sc = [r, 0, 0, r, x, y];
3024
+ UDOC.M.rotate(rot, -a0 + th / 2);
3025
+ UDOC.M.concat(rot, sc);
3026
+ UDOC.M.multArray(rot, pth.crds);
3027
+ UDOC.M.multArray(gst.ctm, pth.crds);
3028
+ UDOC.G.concat(gst.pth, pth);
3029
+ var y = pth.crds.pop();
3030
+ x = pth.crds.pop();
3031
+ gst.cpos = [x, y];
3032
+ },
3033
+ toPoly: function (p) {
3034
+ if (p.cmds[0] != "M" || p.cmds[p.cmds.length - 1] != "Z")
3035
+ return null;
3036
+ for (var i = 1; i < p.cmds.length - 1; i++)
3037
+ if (p.cmds[i] != "L")
3038
+ return null;
3039
+ var out = [], cl = p.crds.length;
3040
+ if (p.crds[0] == p.crds[cl - 2] && p.crds[1] == p.crds[cl - 1])
3041
+ cl -= 2;
3042
+ for (var i = 0; i < cl; i += 2)
3043
+ out.push([p.crds[i], p.crds[i + 1]]);
3044
+ if (UDOC.G.polyArea(p.crds) < 0)
3045
+ out.reverse();
3046
+ return out;
3047
+ },
3048
+ fromPoly: function (p) {
3049
+ var o = { cmds: [], crds: [] };
3050
+ for (var i = 0; i < p.length; i++) {
3051
+ o.crds.push(p[i][0], p[i][1]);
3052
+ o.cmds.push(i == 0 ? "M" : "L");
3053
+ }
3054
+ o.cmds.push("Z");
3055
+ return o;
3056
+ },
3057
+ polyArea: function (p) {
3058
+ if (p.length < 6)
3059
+ return 0;
3060
+ var l = p.length - 2;
3061
+ var sum = (p[0] - p[l]) * (p[l + 1] + p[1]);
3062
+ for (var i = 0; i < l; i += 2)
3063
+ sum += (p[i + 2] - p[i]) * (p[i + 1] + p[i + 3]);
3064
+ return -sum * 0.5;
3065
+ },
3066
+ polyClip: function (p0, p1) {
3067
+ var cp1, cp2, s, e;
3068
+ var inside = function (p) {
3069
+ return (cp2[0] - cp1[0]) * (p[1] - cp1[1]) > (cp2[1] - cp1[1]) * (p[0] - cp1[0]);
3070
+ };
3071
+ var isc = function () {
3072
+ var dc = [cp1[0] - cp2[0], cp1[1] - cp2[1]], dp = [s[0] - e[0], s[1] - e[1]], n1 = cp1[0] * cp2[1] - cp1[1] * cp2[0], n2 = s[0] * e[1] - s[1] * e[0], n3 = 1.0 / (dc[0] * dp[1] - dc[1] * dp[0]);
3073
+ return [(n1 * dp[0] - n2 * dc[0]) * n3, (n1 * dp[1] - n2 * dc[1]) * n3];
3074
+ };
3075
+ var out = p0;
3076
+ cp1 = p1[p1.length - 1];
3077
+ for (var j in p1) {
3078
+ var cp2 = p1[j];
3079
+ var inp = out;
3080
+ out = [];
3081
+ s = inp[inp.length - 1]; //last on the input list
3082
+ for (var i in inp) {
3083
+ var e = inp[i];
3084
+ if (inside(e)) {
3085
+ if (!inside(s)) {
3086
+ out.push(isc());
3087
+ }
3088
+ out.push(e);
3089
+ }
3090
+ else if (inside(s)) {
3091
+ out.push(isc());
3092
+ }
3093
+ s = e;
3094
+ }
3095
+ cp1 = cp2;
3096
+ }
3097
+ return out;
3098
+ }
3099
+ };
3100
+ UDOC.M = {
3101
+ getScale: function (m) { return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2])); },
3102
+ translate: function (m, x, y) { UDOC.M.concat(m, [1, 0, 0, 1, x, y]); },
3103
+ rotate: function (m, a) { UDOC.M.concat(m, [Math.cos(a), -Math.sin(a), Math.sin(a), Math.cos(a), 0, 0]); },
3104
+ scale: function (m, x, y) { UDOC.M.concat(m, [x, 0, 0, y, 0, 0]); },
3105
+ concat: function (m, w) {
3106
+ var a = m[0], b = m[1], c = m[2], d = m[3], tx = m[4], ty = m[5];
3107
+ m[0] = (a * w[0]) + (b * w[2]);
3108
+ m[1] = (a * w[1]) + (b * w[3]);
3109
+ m[2] = (c * w[0]) + (d * w[2]);
3110
+ m[3] = (c * w[1]) + (d * w[3]);
3111
+ m[4] = (tx * w[0]) + (ty * w[2]) + w[4];
3112
+ m[5] = (tx * w[1]) + (ty * w[3]) + w[5];
3113
+ },
3114
+ invert: function (m) {
3115
+ var a = m[0], b = m[1], c = m[2], d = m[3], tx = m[4], ty = m[5], adbc = a * d - b * c;
3116
+ m[0] = d / adbc;
3117
+ m[1] = -b / adbc;
3118
+ m[2] = -c / adbc;
3119
+ m[3] = a / adbc;
3120
+ m[4] = (c * ty - d * tx) / adbc;
3121
+ m[5] = (b * tx - a * ty) / adbc;
3122
+ },
3123
+ multPoint: function (m, p) { var x = p[0], y = p[1]; return [x * m[0] + y * m[2] + m[4], x * m[1] + y * m[3] + m[5]]; },
3124
+ multArray: function (m, a) { for (var i = 0; i < a.length; i += 2) {
3125
+ var x = a[i], y = a[i + 1];
3126
+ a[i] = x * m[0] + y * m[2] + m[4];
3127
+ a[i + 1] = x * m[1] + y * m[3] + m[5];
3128
+ } }
3129
+ };
3130
+ UDOC.C = {
3131
+ srgbGamma: function (x) { return x < 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1.0 / 2.4) - 0.055; },
3132
+ cmykToRgb: function (clr) {
3133
+ var c = clr[0], m = clr[1], y = clr[2], k = clr[3];
3134
+ // return [1-Math.min(1,c+k), 1-Math.min(1, m+k), 1-Math.min(1,y+k)];
3135
+ var r = 255
3136
+ + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004)
3137
+ + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366)
3138
+ + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813)
3139
+ + k * (-21.86122147463605 * k - 189.48180835922747);
3140
+ var g = 255
3141
+ + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548)
3142
+ + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951)
3143
+ + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878)
3144
+ + k * (-20.737325471181034 * k - 187.80453709719578);
3145
+ var b = 255
3146
+ + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286)
3147
+ + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248)
3148
+ + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505)
3149
+ + k * (-22.33816807309886 * k - 180.12613974708367);
3150
+ return [Math.max(0, Math.min(1, r / 255)), Math.max(0, Math.min(1, g / 255)), Math.max(0, Math.min(1, b / 255))];
3151
+ //var iK = 1-c[3];
3152
+ //return [(1-c[0])*iK, (1-c[1])*iK, (1-c[2])*iK];
3153
+ },
3154
+ labToRgb: function (lab) {
3155
+ var k = 903.3, e = 0.008856, L = lab[0], a = lab[1], b = lab[2];
3156
+ var fy = (L + 16) / 116, fy3 = fy * fy * fy;
3157
+ var fz = fy - b / 200, fz3 = fz * fz * fz;
3158
+ var fx = a / 500 + fy, fx3 = fx * fx * fx;
3159
+ var zr = fz3 > e ? fz3 : (116 * fz - 16) / k;
3160
+ var yr = fy3 > e ? fy3 : (116 * fy - 16) / k;
3161
+ var xr = fx3 > e ? fx3 : (116 * fx - 16) / k;
3162
+ var X = xr * 96.72, Y = yr * 100, Z = zr * 81.427, xyz = [X / 100, Y / 100, Z / 100];
3163
+ var x2s = [3.1338561, -1.6168667, -0.4906146, -0.9787684, 1.9161415, 0.0334540, 0.0719453, -0.2289914, 1.4052427];
3164
+ var rgb = [x2s[0] * xyz[0] + x2s[1] * xyz[1] + x2s[2] * xyz[2],
3165
+ x2s[3] * xyz[0] + x2s[4] * xyz[1] + x2s[5] * xyz[2],
3166
+ x2s[6] * xyz[0] + x2s[7] * xyz[1] + x2s[8] * xyz[2]];
3167
+ for (var i = 0; i < 3; i++)
3168
+ rgb[i] = Math.max(0, Math.min(1, UDOC.C.srgbGamma(rgb[i])));
3169
+ return rgb;
3170
+ }
3171
+ };
3172
+ UDOC.getState = function (crds) {
3173
+ return {
3174
+ font: UDOC.getFont(),
3175
+ dd: { flat: 1 },
3176
+ space: "/DeviceGray",
3177
+ // fill
3178
+ ca: 1,
3179
+ colr: [0, 0, 0],
3180
+ sspace: "/DeviceGray",
3181
+ // stroke
3182
+ CA: 1,
3183
+ COLR: [0, 0, 0],
3184
+ bmode: "/Normal",
3185
+ SA: false, OPM: 0, AIS: false, OP: false, op: false, SMask: "/None",
3186
+ lwidth: 1,
3187
+ lcap: 0,
3188
+ ljoin: 0,
3189
+ mlimit: 10,
3190
+ SM: 0.1,
3191
+ doff: 0,
3192
+ dash: [],
3193
+ ctm: [1, 0, 0, 1, 0, 0],
3194
+ cpos: [0, 0],
3195
+ pth: { cmds: [], crds: [] },
3196
+ cpth: crds ? UDOC.G.rectToPath(crds) : null // clipping path
3197
+ };
3198
+ };
3199
+ UDOC.getFont = function () {
3200
+ return {
3201
+ Tc: 0,
3202
+ Tw: 0,
3203
+ Th: 100,
3204
+ Tl: 0,
3205
+ Tf: "Helvetica-Bold",
3206
+ Tfs: 1,
3207
+ Tmode: 0,
3208
+ Trise: 0,
3209
+ Tk: 0,
3210
+ Tal: 0,
3211
+ Tun: 0,
3212
+ Tm: [1, 0, 0, 1, 0, 0],
3213
+ Tlm: [1, 0, 0, 1, 0, 0],
3214
+ Trm: [1, 0, 0, 1, 0, 0]
3215
+ };
3216
+ };
3217
+ var FromEMF = function () {
3218
+ };
3219
+ FromEMF.Parse = function (buff, genv) {
3220
+ buff = new Uint8Array(buff);
3221
+ var off = 0;
3222
+ //console.log(buff.slice(0,32));
3223
+ var prms = { fill: false, strk: false, bb: [0, 0, 1, 1], wbb: [0, 0, 1, 1], fnt: { nam: "Arial", hgh: 25, und: false, orn: 0 }, tclr: [0, 0, 0], talg: 0 }, gst, tab = [], sts = [];
3224
+ var rI = FromEMF.B.readShort, rU = FromEMF.B.readUshort, rI32 = FromEMF.B.readInt, rU32 = FromEMF.B.readUint, rF32 = FromEMF.B.readFloat;
3225
+ while (true) {
3226
+ var fnc = rU32(buff, off);
3227
+ off += 4;
3228
+ var fnm = FromEMF.K[fnc];
3229
+ var siz = rU32(buff, off);
3230
+ off += 4;
3231
+ //if(gst && isNaN(gst.ctm[0])) throw "e";
3232
+ //console.log(fnc,fnm,siz);
3233
+ var loff = off;
3234
+ //if(opn++==253) break;
3235
+ var obj = null, oid = 0;
3236
+ //console.log(fnm, siz);
3237
+ if (fnm == "EOF") {
3238
+ break;
3239
+ }
3240
+ else if (fnm == "HEADER") {
3241
+ prms.bb = FromEMF._readBox(buff, loff);
3242
+ loff += 16; //console.log(fnm, prms.bb);
3243
+ genv.StartPage(prms.bb[0], prms.bb[1], prms.bb[2], prms.bb[3]);
3244
+ gst = UDOC.getState(prms.bb);
3245
+ }
3246
+ else if (fnm == "SAVEDC")
3247
+ sts.push(JSON.stringify(gst), JSON.stringify(prms));
3248
+ else if (fnm == "RESTOREDC") {
3249
+ var dif = rI32(buff, loff);
3250
+ loff += 4;
3251
+ while (dif < -1) {
3252
+ sts.pop();
3253
+ sts.pop();
3254
+ }
3255
+ prms = JSON.parse(sts.pop());
3256
+ gst = JSON.parse(sts.pop());
3257
+ }
3258
+ else if (fnm == "SELECTCLIPPATH") {
3259
+ gst.cpth = JSON.parse(JSON.stringify(gst.pth));
3260
+ }
3261
+ else if (["SETMAPMODE", "SETPOLYFILLMODE", "SETBKMODE" /*,"SETVIEWPORTEXTEX"*/, "SETICMMODE", "SETROP2", "EXTSELECTCLIPRGN"].indexOf(fnm) != -1) ;
3262
+ //else if(fnm=="INTERSECTCLIPRECT") { var r=prms.crct=FromEMF._readBox(buff, loff); /*var y0=r[1],y1=r[3]; if(y0>y1){r[1]=y1; r[3]=y0;}*/ console.log(prms.crct); }
3263
+ else if (fnm == "SETMITERLIMIT")
3264
+ gst.mlimit = rU32(buff, loff);
3265
+ else if (fnm == "SETTEXTCOLOR")
3266
+ prms.tclr = [buff[loff] / 255, buff[loff + 1] / 255, buff[loff + 2] / 255];
3267
+ else if (fnm == "SETTEXTALIGN")
3268
+ prms.talg = rU32(buff, loff);
3269
+ else if (fnm == "SETVIEWPORTEXTEX" || fnm == "SETVIEWPORTORGEX") {
3270
+ if (prms.vbb == null)
3271
+ prms.vbb = [];
3272
+ var coff = fnm == "SETVIEWPORTORGEX" ? 0 : 2;
3273
+ prms.vbb[coff] = rI32(buff, loff);
3274
+ loff += 4;
3275
+ prms.vbb[coff + 1] = rI32(buff, loff);
3276
+ loff += 4;
3277
+ //console.log(prms.vbb);
3278
+ if (fnm == "SETVIEWPORTEXTEX")
3279
+ FromEMF._updateCtm(prms, gst);
3280
+ }
3281
+ else if (fnm == "SETWINDOWEXTEX" || fnm == "SETWINDOWORGEX") {
3282
+ var coff = fnm == "SETWINDOWORGEX" ? 0 : 2;
3283
+ prms.wbb[coff] = rI32(buff, loff);
3284
+ loff += 4;
3285
+ prms.wbb[coff + 1] = rI32(buff, loff);
3286
+ loff += 4;
3287
+ if (fnm == "SETWINDOWEXTEX")
3288
+ FromEMF._updateCtm(prms, gst);
3289
+ }
3290
+ //else if(fnm=="SETMETARGN") {}
3291
+ else if (fnm == "COMMENT") {
3292
+ rU32(buff, loff);
3293
+ loff += 4;
3294
+ }
3295
+ else if (fnm == "SELECTOBJECT") {
3296
+ var ind = rU32(buff, loff);
3297
+ loff += 4;
3298
+ //console.log(ind.toString(16), tab, tab[ind]);
3299
+ if (ind == 0x80000000) {
3300
+ prms.fill = true;
3301
+ gst.colr = [1, 1, 1];
3302
+ } // white brush
3303
+ else if (ind == 0x80000005) {
3304
+ prms.fill = false;
3305
+ } // null brush
3306
+ else if (ind == 0x80000007) {
3307
+ prms.strk = true;
3308
+ prms.lwidth = 1;
3309
+ gst.COLR = [0, 0, 0];
3310
+ } // black pen
3311
+ else if (ind == 0x80000008) {
3312
+ prms.strk = false;
3313
+ } // null pen
3314
+ else if (ind == 0x8000000d) ; // system font
3315
+ else if (ind == 0x8000000e) ; // device default font
3316
+ else {
3317
+ var co = tab[ind]; //console.log(ind, co);
3318
+ if (co.t == "b") {
3319
+ prms.fill = co.stl != 1;
3320
+ if (co.stl == 0) ;
3321
+ else if (co.stl == 1) ;
3322
+ else
3323
+ throw co.stl + " e";
3324
+ gst.colr = co.clr;
3325
+ }
3326
+ else if (co.t == "p") {
3327
+ prms.strk = co.stl != 5;
3328
+ gst.lwidth = co.wid;
3329
+ gst.COLR = co.clr;
3330
+ }
3331
+ else if (co.t == "f") {
3332
+ prms.fnt = co;
3333
+ gst.font.Tf = co.nam;
3334
+ gst.font.Tfs = Math.abs(co.hgh);
3335
+ gst.font.Tun = co.und;
3336
+ }
3337
+ else
3338
+ throw "e";
3339
+ }
3340
+ }
3341
+ else if (fnm == "DELETEOBJECT") {
3342
+ var ind = rU32(buff, loff);
3343
+ loff += 4;
3344
+ if (tab[ind] != null)
3345
+ tab[ind] = null;
3346
+ else
3347
+ throw "e";
3348
+ }
3349
+ else if (fnm == "CREATEBRUSHINDIRECT") {
3350
+ oid = rU32(buff, loff);
3351
+ loff += 4;
3352
+ obj = { t: "b" };
3353
+ obj.stl = rU32(buff, loff);
3354
+ loff += 4;
3355
+ obj.clr = [buff[loff] / 255, buff[loff + 1] / 255, buff[loff + 2] / 255];
3356
+ loff += 4;
3357
+ obj.htc = rU32(buff, loff);
3358
+ loff += 4;
3359
+ //console.log(oid, obj);
3360
+ }
3361
+ else if (fnm == "CREATEPEN" || fnm == "EXTCREATEPEN") {
3362
+ oid = rU32(buff, loff);
3363
+ loff += 4;
3364
+ obj = { t: "p" };
3365
+ if (fnm == "EXTCREATEPEN") {
3366
+ loff += 16;
3367
+ obj.stl = rU32(buff, loff);
3368
+ loff += 4;
3369
+ obj.wid = rU32(buff, loff);
3370
+ loff += 4;
3371
+ //obj.stl = rU32(buff, loff);
3372
+ loff += 4;
3373
+ }
3374
+ else {
3375
+ obj.stl = rU32(buff, loff);
3376
+ loff += 4;
3377
+ obj.wid = rU32(buff, loff);
3378
+ loff += 4;
3379
+ loff += 4;
3380
+ }
3381
+ obj.clr = [buff[loff] / 255, buff[loff + 1] / 255, buff[loff + 2] / 255];
3382
+ loff += 4;
3383
+ }
3384
+ else if (fnm == "EXTCREATEFONTINDIRECTW") {
3385
+ oid = rU32(buff, loff);
3386
+ loff += 4;
3387
+ obj = { t: "f", nam: "" };
3388
+ obj.hgh = rI32(buff, loff);
3389
+ loff += 4;
3390
+ loff += 4 * 2;
3391
+ obj.orn = rI32(buff, loff) / 10;
3392
+ loff += 4;
3393
+ var wgh = rU32(buff, loff);
3394
+ loff += 4; //console.log(fnm, obj.orn, wgh);
3395
+ //console.log(rU32(buff,loff), rU32(buff,loff+4), buff.slice(loff,loff+8));
3396
+ obj.und = buff[loff + 1];
3397
+ obj.stk = buff[loff + 2];
3398
+ loff += 4 * 2;
3399
+ while (rU(buff, loff) != 0) {
3400
+ obj.nam += String.fromCharCode(rU(buff, loff));
3401
+ loff += 2;
3402
+ }
3403
+ if (wgh > 500)
3404
+ obj.nam += "-Bold";
3405
+ //console.log(wgh, obj.nam);
3406
+ }
3407
+ else if (fnm == "EXTTEXTOUTW") {
3408
+ //console.log(buff.slice(loff-8, loff-8+siz));
3409
+ loff += 16;
3410
+ var mod = rU32(buff, loff);
3411
+ loff += 4; //console.log(mod);
3412
+ rF32(buff, loff);
3413
+ loff += 4;
3414
+ rF32(buff, loff);
3415
+ loff += 4;
3416
+ var rfx = rI32(buff, loff);
3417
+ loff += 4;
3418
+ var rfy = rI32(buff, loff);
3419
+ loff += 4;
3420
+ //console.log(mod, scx, scy,rfx,rfy);
3421
+ gst.font.Tm = [1, 0, 0, -1, 0, 0];
3422
+ UDOC.M.rotate(gst.font.Tm, prms.fnt.orn * Math.PI / 180);
3423
+ UDOC.M.translate(gst.font.Tm, rfx, rfy);
3424
+ var alg = prms.talg; //console.log(alg.toString(2));
3425
+ if ((alg & 6) == 6)
3426
+ gst.font.Tal = 2;
3427
+ else if ((alg & 7) == 0)
3428
+ gst.font.Tal = 0;
3429
+ else
3430
+ throw alg + " e";
3431
+ if ((alg & 24) == 24) ; // baseline
3432
+ else if ((alg & 24) == 0)
3433
+ UDOC.M.translate(gst.font.Tm, 0, gst.font.Tfs);
3434
+ else
3435
+ throw "e";
3436
+ var crs = rU32(buff, loff);
3437
+ loff += 4;
3438
+ var ofs = rU32(buff, loff);
3439
+ loff += 4;
3440
+ rU32(buff, loff);
3441
+ loff += 4; //if(ops!=0) throw "e";
3442
+ //console.log(ofs,ops,crs);
3443
+ loff += 16;
3444
+ rU32(buff, loff);
3445
+ loff += 4; //console.log(ops, ofD, loff, ofs+off-8);
3446
+ ofs += off - 8; //console.log(crs, ops);
3447
+ var str = "";
3448
+ for (var i = 0; i < crs; i++) {
3449
+ var cc = rU(buff, ofs + i * 2);
3450
+ str += String.fromCharCode(cc);
3451
+ }
3452
+ var oclr = gst.colr;
3453
+ gst.colr = prms.tclr;
3454
+ //console.log(str, gst.colr, gst.font.Tm);
3455
+ //var otfs = gst.font.Tfs; gst.font.Tfs *= 1/gst.ctm[0];
3456
+ genv.PutText(gst, str, str.length * gst.font.Tfs * 0.5);
3457
+ gst.colr = oclr;
3458
+ //gst.font.Tfs = otfs;
3459
+ //console.log(rfx, rfy, scx, ops, rcX, rcY, rcW, rcH, offDx, str);
3460
+ }
3461
+ else if (fnm == "BEGINPATH") {
3462
+ UDOC.G.newPath(gst);
3463
+ }
3464
+ else if (fnm == "ENDPATH") ;
3465
+ else if (fnm == "CLOSEFIGURE")
3466
+ UDOC.G.closePath(gst);
3467
+ else if (fnm == "MOVETOEX") {
3468
+ UDOC.G.moveTo(gst, rI32(buff, loff), rI32(buff, loff + 4));
3469
+ }
3470
+ else if (fnm == "LINETO") {
3471
+ if (gst.pth.cmds.length == 0) {
3472
+ var im = gst.ctm.slice(0);
3473
+ UDOC.M.invert(im);
3474
+ var p = UDOC.M.multPoint(im, gst.cpos);
3475
+ UDOC.G.moveTo(gst, p[0], p[1]);
3476
+ }
3477
+ UDOC.G.lineTo(gst, rI32(buff, loff), rI32(buff, loff + 4));
3478
+ }
3479
+ else if (fnm == "POLYGON" || fnm == "POLYGON16" || fnm == "POLYLINE" || fnm == "POLYLINE16" || fnm == "POLYLINETO" || fnm == "POLYLINETO16") {
3480
+ loff += 16;
3481
+ var ndf = fnm.startsWith("POLYGON"), isTo = fnm.indexOf("TO") != -1;
3482
+ var cnt = rU32(buff, loff);
3483
+ loff += 4;
3484
+ if (!isTo)
3485
+ UDOC.G.newPath(gst);
3486
+ loff = FromEMF._drawPoly(buff, loff, cnt, gst, fnm.endsWith("16") ? 2 : 4, ndf, isTo);
3487
+ if (!isTo)
3488
+ FromEMF._draw(genv, gst, prms, ndf);
3489
+ //console.log(prms, gst.lwidth);
3490
+ //console.log(JSON.parse(JSON.stringify(gst.pth)));
3491
+ }
3492
+ else if (fnm == "POLYPOLYGON16") {
3493
+ loff += 16;
3494
+ var ndf = fnm.startsWith("POLYPOLYGON"), isTo = fnm.indexOf("TO") != -1;
3495
+ var nop = rU32(buff, loff);
3496
+ loff += 4;
3497
+ loff += 4;
3498
+ var pi = loff;
3499
+ loff += nop * 4;
3500
+ if (!isTo)
3501
+ UDOC.G.newPath(gst);
3502
+ for (var i = 0; i < nop; i++) {
3503
+ var ppp = rU(buff, pi + i * 4);
3504
+ loff = FromEMF._drawPoly(buff, loff, ppp, gst, fnm.endsWith("16") ? 2 : 4, ndf, isTo);
3505
+ }
3506
+ if (!isTo)
3507
+ FromEMF._draw(genv, gst, prms, ndf);
3508
+ }
3509
+ else if (fnm == "POLYBEZIER" || fnm == "POLYBEZIER16" || fnm == "POLYBEZIERTO" || fnm == "POLYBEZIERTO16") {
3510
+ loff += 16;
3511
+ var is16 = fnm.endsWith("16"), rC = is16 ? rI : rI32, nl = is16 ? 2 : 4;
3512
+ var cnt = rU32(buff, loff);
3513
+ loff += 4;
3514
+ if (fnm.indexOf("TO") == -1) {
3515
+ UDOC.G.moveTo(gst, rC(buff, loff), rC(buff, loff + nl));
3516
+ loff += 2 * nl;
3517
+ cnt--;
3518
+ }
3519
+ while (cnt > 0) {
3520
+ UDOC.G.curveTo(gst, rC(buff, loff), rC(buff, loff + nl), rC(buff, loff + 2 * nl), rC(buff, loff + 3 * nl), rC(buff, loff + 4 * nl), rC(buff, loff + 5 * nl));
3521
+ loff += 6 * nl;
3522
+ cnt -= 3;
3523
+ }
3524
+ //console.log(JSON.parse(JSON.stringify(gst.pth)));
3525
+ }
3526
+ else if (fnm == "RECTANGLE" || fnm == "ELLIPSE") {
3527
+ UDOC.G.newPath(gst);
3528
+ var bx = FromEMF._readBox(buff, loff);
3529
+ if (fnm == "RECTANGLE") {
3530
+ UDOC.G.moveTo(gst, bx[0], bx[1]);
3531
+ UDOC.G.lineTo(gst, bx[2], bx[1]);
3532
+ UDOC.G.lineTo(gst, bx[2], bx[3]);
3533
+ UDOC.G.lineTo(gst, bx[0], bx[3]);
3534
+ }
3535
+ else {
3536
+ var x = (bx[0] + bx[2]) / 2, y = (bx[1] + bx[3]) / 2;
3537
+ UDOC.G.arc(gst, x, y, (bx[2] - bx[0]) / 2, 0, 2 * Math.PI, false);
3538
+ }
3539
+ UDOC.G.closePath(gst);
3540
+ FromEMF._draw(genv, gst, prms, true);
3541
+ //console.log(prms, gst.lwidth);
3542
+ }
3543
+ else if (fnm == "FILLPATH")
3544
+ genv.Fill(gst, false);
3545
+ else if (fnm == "STROKEPATH")
3546
+ genv.Stroke(gst);
3547
+ else if (fnm == "STROKEANDFILLPATH") {
3548
+ genv.Fill(gst, false);
3549
+ genv.Stroke(gst);
3550
+ }
3551
+ else if (fnm == "SETWORLDTRANSFORM" || fnm == "MODIFYWORLDTRANSFORM") {
3552
+ var mat = [];
3553
+ for (var i = 0; i < 6; i++)
3554
+ mat.push(rF32(buff, loff + i * 4));
3555
+ loff += 24;
3556
+ //console.log(fnm, gst.ctm.slice(0), mat);
3557
+ if (fnm == "SETWORLDTRANSFORM")
3558
+ gst.ctm = mat;
3559
+ else {
3560
+ var mod = rU32(buff, loff);
3561
+ loff += 4;
3562
+ if (mod == 2) {
3563
+ var om = gst.ctm;
3564
+ gst.ctm = mat;
3565
+ UDOC.M.concat(gst.ctm, om);
3566
+ }
3567
+ else
3568
+ throw "e";
3569
+ }
3570
+ }
3571
+ else if (fnm == "SETSTRETCHBLTMODE") {
3572
+ rU32(buff, loff);
3573
+ loff += 4;
3574
+ }
3575
+ else if (fnm == "STRETCHDIBITS") {
3576
+ var bx = FromEMF._readBox(buff, loff);
3577
+ loff += 16;
3578
+ var xD = rI32(buff, loff);
3579
+ loff += 4;
3580
+ var yD = rI32(buff, loff);
3581
+ loff += 4;
3582
+ rI32(buff, loff);
3583
+ loff += 4;
3584
+ rI32(buff, loff);
3585
+ loff += 4;
3586
+ var wS = rI32(buff, loff);
3587
+ loff += 4;
3588
+ var hS = rI32(buff, loff);
3589
+ loff += 4;
3590
+ var ofH = rU32(buff, loff) + off - 8;
3591
+ loff += 4;
3592
+ rU32(buff, loff);
3593
+ loff += 4;
3594
+ var ofB = rU32(buff, loff) + off - 8;
3595
+ loff += 4;
3596
+ rU32(buff, loff);
3597
+ loff += 4;
3598
+ var usg = rU32(buff, loff);
3599
+ loff += 4;
3600
+ if (usg != 0)
3601
+ throw "e";
3602
+ rU32(buff, loff);
3603
+ loff += 4;
3604
+ var wD = rI32(buff, loff);
3605
+ loff += 4;
3606
+ var hD = rI32(buff, loff);
3607
+ loff += 4; //console.log(bop, wD, hD);
3608
+ //console.log(ofH, szH, ofB, szB, ofH+40);
3609
+ //console.log(bx, xD,yD,wD,hD);
3610
+ //console.log(xS,yS,wS,hS);
3611
+ //console.log(ofH,szH,ofB,szB,usg,bop);
3612
+ rU32(buff, ofH);
3613
+ ofH += 4;
3614
+ var w = rU32(buff, ofH);
3615
+ ofH += 4;
3616
+ var h = rU32(buff, ofH);
3617
+ ofH += 4;
3618
+ if (w != wS || h != hS)
3619
+ throw "e";
3620
+ var ps = rU(buff, ofH);
3621
+ ofH += 2;
3622
+ var bc = rU(buff, ofH);
3623
+ ofH += 2;
3624
+ if (bc != 8 && bc != 24 && bc != 32)
3625
+ throw bc + " e";
3626
+ var cpr = rU32(buff, ofH);
3627
+ ofH += 4;
3628
+ if (cpr != 0)
3629
+ throw cpr + " e";
3630
+ rU32(buff, ofH);
3631
+ ofH += 4;
3632
+ rU32(buff, ofH);
3633
+ ofH += 4;
3634
+ rU32(buff, ofH);
3635
+ ofH += 4;
3636
+ rU32(buff, ofH);
3637
+ ofH += 4;
3638
+ rU32(buff, ofH);
3639
+ ofH += 4; //console.log(hl, w, h, ps, bc, cpr, sz, xpm, ypm, cu, ci);
3640
+ //console.log(hl,w,h,",",xS,yS,wS,hS,",",xD,yD,wD,hD,",",xpm,ypm);
3641
+ var rl = Math.floor(((w * ps * bc + 31) & ~31) / 8);
3642
+ var img = new Uint8Array(w * h * 4);
3643
+ if (bc == 8) {
3644
+ for (var y = 0; y < h; y++)
3645
+ for (var x = 0; x < w; x++) {
3646
+ var qi = (y * w + x) << 2, ind = buff[ofB + (h - 1 - y) * rl + x] << 2;
3647
+ img[qi] = buff[ofH + ind + 2];
3648
+ img[qi + 1] = buff[ofH + ind + 1];
3649
+ img[qi + 2] = buff[ofH + ind + 0];
3650
+ img[qi + 3] = 255;
3651
+ }
3652
+ }
3653
+ if (bc == 24) {
3654
+ for (var y = 0; y < h; y++)
3655
+ for (var x = 0; x < w; x++) {
3656
+ var qi = (y * w + x) << 2, ti = ofB + (h - 1 - y) * rl + x * 3;
3657
+ img[qi] = buff[ti + 2];
3658
+ img[qi + 1] = buff[ti + 1];
3659
+ img[qi + 2] = buff[ti + 0];
3660
+ img[qi + 3] = 255;
3661
+ }
3662
+ }
3663
+ if (bc == 32) {
3664
+ for (var y = 0; y < h; y++)
3665
+ for (var x = 0; x < w; x++) {
3666
+ var qi = (y * w + x) << 2, ti = ofB + (h - 1 - y) * rl + x * 4;
3667
+ img[qi] = buff[ti + 2];
3668
+ img[qi + 1] = buff[ti + 1];
3669
+ img[qi + 2] = buff[ti + 0];
3670
+ img[qi + 3] = buff[ti + 3];
3671
+ }
3672
+ }
3673
+ var ctm = gst.ctm.slice(0);
3674
+ gst.ctm = [1, 0, 0, 1, 0, 0];
3675
+ UDOC.M.scale(gst.ctm, wD, -hD);
3676
+ UDOC.M.translate(gst.ctm, xD, yD + hD);
3677
+ UDOC.M.concat(gst.ctm, ctm);
3678
+ genv.PutImage(gst, img, w, h);
3679
+ gst.ctm = ctm;
3680
+ }
3681
+ else {
3682
+ console.log(fnm, siz);
3683
+ }
3684
+ if (obj != null)
3685
+ tab[oid] = obj;
3686
+ off += siz - 8;
3687
+ }
3688
+ //genv.Stroke(gst);
3689
+ genv.ShowPage();
3690
+ genv.Done();
3691
+ };
3692
+ FromEMF._readBox = function (buff, off) { var b = []; for (var i = 0; i < 4; i++)
3693
+ b[i] = FromEMF.B.readInt(buff, off + i * 4); return b; };
3694
+ FromEMF._updateCtm = function (prms, gst) {
3695
+ var mat = [1, 0, 0, 1, 0, 0];
3696
+ var wbb = prms.wbb; prms.bb; var vbb = (prms.vbb && prms.vbb.length == 4) ? prms.vbb : prms.bb;
3697
+ //var y0 = bb[1], y1 = bb[3]; bb[1]=Math.min(y0,y1); bb[3]=Math.max(y0,y1);
3698
+ UDOC.M.translate(mat, -wbb[0], -wbb[1]);
3699
+ UDOC.M.scale(mat, 1 / wbb[2], 1 / wbb[3]);
3700
+ UDOC.M.scale(mat, vbb[2], vbb[3]);
3701
+ //UDOC.M.scale(mat, vbb[2]/(bb[2]-bb[0]), vbb[3]/(bb[3]-bb[1]));
3702
+ //UDOC.M.scale(mat, bb[2]-bb[0],bb[3]-bb[1]);
3703
+ gst.ctm = mat;
3704
+ };
3705
+ FromEMF._draw = function (genv, gst, prms, needFill) {
3706
+ if (prms.fill && needFill)
3707
+ genv.Fill(gst, false);
3708
+ if (prms.strk && gst.lwidth != 0)
3709
+ genv.Stroke(gst);
3710
+ };
3711
+ FromEMF._drawPoly = function (buff, off, ppp, gst, nl, clos, justLine) {
3712
+ var rS = nl == 2 ? FromEMF.B.readShort : FromEMF.B.readInt;
3713
+ for (var j = 0; j < ppp; j++) {
3714
+ var px = rS(buff, off);
3715
+ off += nl;
3716
+ var py = rS(buff, off);
3717
+ off += nl;
3718
+ if (j == 0 && !justLine)
3719
+ UDOC.G.moveTo(gst, px, py);
3720
+ else
3721
+ UDOC.G.lineTo(gst, px, py);
3722
+ }
3723
+ if (clos)
3724
+ UDOC.G.closePath(gst);
3725
+ return off;
3726
+ };
3727
+ FromEMF.B = {
3728
+ uint8: new Uint8Array(4),
3729
+ readShort: function (buff, p) { var u8 = FromEMF.B.uint8; u8[0] = buff[p]; u8[1] = buff[p + 1]; return FromEMF.B.int16[0]; },
3730
+ readUshort: function (buff, p) { var u8 = FromEMF.B.uint8; u8[0] = buff[p]; u8[1] = buff[p + 1]; return FromEMF.B.uint16[0]; },
3731
+ readInt: function (buff, p) { var u8 = FromEMF.B.uint8; u8[0] = buff[p]; u8[1] = buff[p + 1]; u8[2] = buff[p + 2]; u8[3] = buff[p + 3]; return FromEMF.B.int32[0]; },
3732
+ readUint: function (buff, p) { var u8 = FromEMF.B.uint8; u8[0] = buff[p]; u8[1] = buff[p + 1]; u8[2] = buff[p + 2]; u8[3] = buff[p + 3]; return FromEMF.B.uint32[0]; },
3733
+ readFloat: function (buff, p) { var u8 = FromEMF.B.uint8; u8[0] = buff[p]; u8[1] = buff[p + 1]; u8[2] = buff[p + 2]; u8[3] = buff[p + 3]; return FromEMF.B.flot32[0]; },
3734
+ readASCII: function (buff, p, l) { var s = ""; for (var i = 0; i < l; i++)
3735
+ s += String.fromCharCode(buff[p + i]); return s; }
3736
+ };
3737
+ FromEMF.B.int16 = new Int16Array(FromEMF.B.uint8.buffer);
3738
+ FromEMF.B.uint16 = new Uint16Array(FromEMF.B.uint8.buffer);
3739
+ FromEMF.B.int32 = new Int32Array(FromEMF.B.uint8.buffer);
3740
+ FromEMF.B.uint32 = new Uint32Array(FromEMF.B.uint8.buffer);
3741
+ FromEMF.B.flot32 = new Float32Array(FromEMF.B.uint8.buffer);
3742
+ FromEMF.C = {
3743
+ EMR_HEADER: 0x00000001,
3744
+ EMR_POLYBEZIER: 0x00000002,
3745
+ EMR_POLYGON: 0x00000003,
3746
+ EMR_POLYLINE: 0x00000004,
3747
+ EMR_POLYBEZIERTO: 0x00000005,
3748
+ EMR_POLYLINETO: 0x00000006,
3749
+ EMR_POLYPOLYLINE: 0x00000007,
3750
+ EMR_POLYPOLYGON: 0x00000008,
3751
+ EMR_SETWINDOWEXTEX: 0x00000009,
3752
+ EMR_SETWINDOWORGEX: 0x0000000A,
3753
+ EMR_SETVIEWPORTEXTEX: 0x0000000B,
3754
+ EMR_SETVIEWPORTORGEX: 0x0000000C,
3755
+ EMR_SETBRUSHORGEX: 0x0000000D,
3756
+ EMR_EOF: 0x0000000E,
3757
+ EMR_SETPIXELV: 0x0000000F,
3758
+ EMR_SETMAPPERFLAGS: 0x00000010,
3759
+ EMR_SETMAPMODE: 0x00000011,
3760
+ EMR_SETBKMODE: 0x00000012,
3761
+ EMR_SETPOLYFILLMODE: 0x00000013,
3762
+ EMR_SETROP2: 0x00000014,
3763
+ EMR_SETSTRETCHBLTMODE: 0x00000015,
3764
+ EMR_SETTEXTALIGN: 0x00000016,
3765
+ EMR_SETCOLORADJUSTMENT: 0x00000017,
3766
+ EMR_SETTEXTCOLOR: 0x00000018,
3767
+ EMR_SETBKCOLOR: 0x00000019,
3768
+ EMR_OFFSETCLIPRGN: 0x0000001A,
3769
+ EMR_MOVETOEX: 0x0000001B,
3770
+ EMR_SETMETARGN: 0x0000001C,
3771
+ EMR_EXCLUDECLIPRECT: 0x0000001D,
3772
+ EMR_INTERSECTCLIPRECT: 0x0000001E,
3773
+ EMR_SCALEVIEWPORTEXTEX: 0x0000001F,
3774
+ EMR_SCALEWINDOWEXTEX: 0x00000020,
3775
+ EMR_SAVEDC: 0x00000021,
3776
+ EMR_RESTOREDC: 0x00000022,
3777
+ EMR_SETWORLDTRANSFORM: 0x00000023,
3778
+ EMR_MODIFYWORLDTRANSFORM: 0x00000024,
3779
+ EMR_SELECTOBJECT: 0x00000025,
3780
+ EMR_CREATEPEN: 0x00000026,
3781
+ EMR_CREATEBRUSHINDIRECT: 0x00000027,
3782
+ EMR_DELETEOBJECT: 0x00000028,
3783
+ EMR_ANGLEARC: 0x00000029,
3784
+ EMR_ELLIPSE: 0x0000002A,
3785
+ EMR_RECTANGLE: 0x0000002B,
3786
+ EMR_ROUNDRECT: 0x0000002C,
3787
+ EMR_ARC: 0x0000002D,
3788
+ EMR_CHORD: 0x0000002E,
3789
+ EMR_PIE: 0x0000002F,
3790
+ EMR_SELECTPALETTE: 0x00000030,
3791
+ EMR_CREATEPALETTE: 0x00000031,
3792
+ EMR_SETPALETTEENTRIES: 0x00000032,
3793
+ EMR_RESIZEPALETTE: 0x00000033,
3794
+ EMR_REALIZEPALETTE: 0x00000034,
3795
+ EMR_EXTFLOODFILL: 0x00000035,
3796
+ EMR_LINETO: 0x00000036,
3797
+ EMR_ARCTO: 0x00000037,
3798
+ EMR_POLYDRAW: 0x00000038,
3799
+ EMR_SETARCDIRECTION: 0x00000039,
3800
+ EMR_SETMITERLIMIT: 0x0000003A,
3801
+ EMR_BEGINPATH: 0x0000003B,
3802
+ EMR_ENDPATH: 0x0000003C,
3803
+ EMR_CLOSEFIGURE: 0x0000003D,
3804
+ EMR_FILLPATH: 0x0000003E,
3805
+ EMR_STROKEANDFILLPATH: 0x0000003F,
3806
+ EMR_STROKEPATH: 0x00000040,
3807
+ EMR_FLATTENPATH: 0x00000041,
3808
+ EMR_WIDENPATH: 0x00000042,
3809
+ EMR_SELECTCLIPPATH: 0x00000043,
3810
+ EMR_ABORTPATH: 0x00000044,
3811
+ EMR_COMMENT: 0x00000046,
3812
+ EMR_FILLRGN: 0x00000047,
3813
+ EMR_FRAMERGN: 0x00000048,
3814
+ EMR_INVERTRGN: 0x00000049,
3815
+ EMR_PAINTRGN: 0x0000004A,
3816
+ EMR_EXTSELECTCLIPRGN: 0x0000004B,
3817
+ EMR_BITBLT: 0x0000004C,
3818
+ EMR_STRETCHBLT: 0x0000004D,
3819
+ EMR_MASKBLT: 0x0000004E,
3820
+ EMR_PLGBLT: 0x0000004F,
3821
+ EMR_SETDIBITSTODEVICE: 0x00000050,
3822
+ EMR_STRETCHDIBITS: 0x00000051,
3823
+ EMR_EXTCREATEFONTINDIRECTW: 0x00000052,
3824
+ EMR_EXTTEXTOUTA: 0x00000053,
3825
+ EMR_EXTTEXTOUTW: 0x00000054,
3826
+ EMR_POLYBEZIER16: 0x00000055,
3827
+ EMR_POLYGON16: 0x00000056,
3828
+ EMR_POLYLINE16: 0x00000057,
3829
+ EMR_POLYBEZIERTO16: 0x00000058,
3830
+ EMR_POLYLINETO16: 0x00000059,
3831
+ EMR_POLYPOLYLINE16: 0x0000005A,
3832
+ EMR_POLYPOLYGON16: 0x0000005B,
3833
+ EMR_POLYDRAW16: 0x0000005C,
3834
+ EMR_CREATEMONOBRUSH: 0x0000005D,
3835
+ EMR_CREATEDIBPATTERNBRUSHPT: 0x0000005E,
3836
+ EMR_EXTCREATEPEN: 0x0000005F,
3837
+ EMR_POLYTEXTOUTA: 0x00000060,
3838
+ EMR_POLYTEXTOUTW: 0x00000061,
3839
+ EMR_SETICMMODE: 0x00000062,
3840
+ EMR_CREATECOLORSPACE: 0x00000063,
3841
+ EMR_SETCOLORSPACE: 0x00000064,
3842
+ EMR_DELETECOLORSPACE: 0x00000065,
3843
+ EMR_GLSRECORD: 0x00000066,
3844
+ EMR_GLSBOUNDEDRECORD: 0x00000067,
3845
+ EMR_PIXELFORMAT: 0x00000068,
3846
+ EMR_DRAWESCAPE: 0x00000069,
3847
+ EMR_EXTESCAPE: 0x0000006A,
3848
+ EMR_SMALLTEXTOUT: 0x0000006C,
3849
+ EMR_FORCEUFIMAPPING: 0x0000006D,
3850
+ EMR_NAMEDESCAPE: 0x0000006E,
3851
+ EMR_COLORCORRECTPALETTE: 0x0000006F,
3852
+ EMR_SETICMPROFILEA: 0x00000070,
3853
+ EMR_SETICMPROFILEW: 0x00000071,
3854
+ EMR_ALPHABLEND: 0x00000072,
3855
+ EMR_SETLAYOUT: 0x00000073,
3856
+ EMR_TRANSPARENTBLT: 0x00000074,
3857
+ EMR_GRADIENTFILL: 0x00000076,
3858
+ EMR_SETLINKEDUFIS: 0x00000077,
3859
+ EMR_SETTEXTJUSTIFICATION: 0x00000078,
3860
+ EMR_COLORMATCHTOTARGETW: 0x00000079,
3861
+ EMR_CREATECOLORSPACEW: 0x0000007A
3862
+ };
3863
+ FromEMF.K = [];
3864
+ // (function() {
3865
+ // var inp, out, stt;
3866
+ // inp = FromEMF.C; out = FromEMF.K; stt=4;
3867
+ // for(var p in inp) out[inp[p]] = p.slice(stt);
3868
+ // } )();
3869
+ var ToContext2D = function (needPage, scale) {
3870
+ this.canvas = document.createElement("canvas");
3871
+ this.ctx = this.canvas.getContext("2d");
3872
+ this.bb = null;
3873
+ this.currPage = 0;
3874
+ this.needPage = needPage;
3875
+ this.scale = scale;
3876
+ };
3877
+ ToContext2D.prototype.StartPage = function (x, y, w, h) {
3878
+ if (this.currPage != this.needPage)
3879
+ return;
3880
+ this.bb = [x, y, w, h];
3881
+ var scl = this.scale, dpr = window.devicePixelRatio;
3882
+ var cnv = this.canvas, ctx = this.ctx;
3883
+ cnv.width = Math.round(w * scl);
3884
+ cnv.height = Math.round(h * scl);
3885
+ ctx.translate(0, h * scl);
3886
+ ctx.scale(scl, -scl);
3887
+ cnv.setAttribute("style", "border:1px solid; width:" + (cnv.width / dpr) + "px; height:" + (cnv.height / dpr) + "px");
3888
+ };
3889
+ ToContext2D.prototype.Fill = function (gst, evenOdd) {
3890
+ if (this.currPage != this.needPage)
3891
+ return;
3892
+ var ctx = this.ctx;
3893
+ ctx.beginPath();
3894
+ this._setStyle(gst, ctx);
3895
+ this._draw(gst.pth, ctx);
3896
+ ctx.fill();
3897
+ };
3898
+ ToContext2D.prototype.Stroke = function (gst) {
3899
+ if (this.currPage != this.needPage)
3900
+ return;
3901
+ var ctx = this.ctx;
3902
+ ctx.beginPath();
3903
+ this._setStyle(gst, ctx);
3904
+ this._draw(gst.pth, ctx);
3905
+ ctx.stroke();
3906
+ };
3907
+ ToContext2D.prototype.PutText = function (gst, str, stw) {
3908
+ if (this.currPage != this.needPage)
3909
+ return;
3910
+ this._scale(gst.ctm);
3911
+ var ctx = this.ctx;
3912
+ this._setStyle(gst, ctx);
3913
+ ctx.save();
3914
+ var m = [1, 0, 0, -1, 0, 0];
3915
+ this._concat(m, gst.font.Tm);
3916
+ this._concat(m, gst.ctm);
3917
+ //console.log(str, m, gst); throw "e";
3918
+ ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
3919
+ ctx.fillText(str, 0, 0);
3920
+ ctx.restore();
3921
+ };
3922
+ ToContext2D.prototype.PutImage = function (gst, buff, w, h, msk) {
3923
+ if (this.currPage != this.needPage)
3924
+ return;
3925
+ var ctx = this.ctx;
3926
+ if (buff.length == w * h * 4) {
3927
+ buff = buff.slice(0);
3928
+ if (msk && msk.length == w * h * 4)
3929
+ for (var i = 0; i < buff.length; i += 4)
3930
+ buff[i + 3] = msk[i + 1];
3931
+ var cnv = document.createElement("canvas"), cctx = cnv.getContext("2d");
3932
+ cnv.width = w;
3933
+ cnv.height = h;
3934
+ var imgd = cctx.createImageData(w, h);
3935
+ for (var i = 0; i < buff.length; i++)
3936
+ imgd.data[i] = buff[i];
3937
+ cctx.putImageData(imgd, 0, 0);
3938
+ ctx.save();
3939
+ var m = [1, 0, 0, 1, 0, 0];
3940
+ this._concat(m, [1 / w, 0, 0, -1 / h, 0, 1]);
3941
+ this._concat(m, gst.ctm);
3942
+ ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
3943
+ ctx.drawImage(cnv, 0, 0);
3944
+ ctx.restore();
3945
+ }
3946
+ };
3947
+ ToContext2D.prototype.ShowPage = function () { this.currPage++; };
3948
+ ToContext2D.prototype.Done = function () { };
3949
+ function _flt(n) { return "" + parseFloat(n.toFixed(2)); }
3950
+ ToContext2D.prototype._setStyle = function (gst, ctx) {
3951
+ var scl = this._scale(gst.ctm);
3952
+ ctx.fillStyle = this._getFill(gst.colr, gst.ca, ctx);
3953
+ ctx.strokeStyle = this._getFill(gst.COLR, gst.CA, ctx);
3954
+ ctx.lineCap = ["butt", "round", "square"][gst.lcap];
3955
+ ctx.lineJoin = ["miter", "round", "bevel"][gst.ljoin];
3956
+ ctx.lineWidth = gst.lwidth * scl;
3957
+ var dsh = gst.dash.slice(0);
3958
+ for (var i = 0; i < dsh.length; i++)
3959
+ dsh[i] = _flt(dsh[i] * scl);
3960
+ ctx.setLineDash(dsh);
3961
+ ctx.miterLimit = gst.mlimit * scl;
3962
+ var fn = gst.font.Tf, ln = fn.toLowerCase();
3963
+ var p0 = ln.indexOf("bold") != -1 ? "bold " : "";
3964
+ var p1 = (ln.indexOf("italic") != -1 || ln.indexOf("oblique") != -1) ? "italic " : "";
3965
+ ctx.font = p0 + p1 + gst.font.Tfs + "px \"" + fn + "\"";
3966
+ };
3967
+ ToContext2D.prototype._getFill = function (colr, ca, ctx) {
3968
+ if (colr.typ == null)
3969
+ return this._colr(colr, ca);
3970
+ else {
3971
+ var grd = colr, crd = grd.crds, mat = grd.mat, scl = this._scale(mat), gf;
3972
+ if (grd.typ == "lin") {
3973
+ var p0 = this._multPoint(mat, crd.slice(0, 2)), p1 = this._multPoint(mat, crd.slice(2));
3974
+ gf = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
3975
+ }
3976
+ else if (grd.typ == "rad") {
3977
+ var p0 = this._multPoint(mat, crd.slice(0, 2)), p1 = this._multPoint(mat, crd.slice(3));
3978
+ gf = ctx.createRadialGradient(p0[0], p0[1], crd[2] * scl, p1[0], p1[1], crd[5] * scl);
3979
+ }
3980
+ for (var i = 0; i < grd.grad.length; i++)
3981
+ gf.addColorStop(grd.grad[i][0], this._colr(grd.grad[i][1], ca));
3982
+ return gf;
3983
+ }
3984
+ };
3985
+ ToContext2D.prototype._colr = function (c, a) { return "rgba(" + Math.round(c[0] * 255) + "," + Math.round(c[1] * 255) + "," + Math.round(c[2] * 255) + "," + a + ")"; };
3986
+ ToContext2D.prototype._scale = function (m) { return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2])); };
3987
+ ToContext2D.prototype._concat = function (m, w) {
3988
+ var a = m[0], b = m[1], c = m[2], d = m[3], tx = m[4], ty = m[5];
3989
+ m[0] = (a * w[0]) + (b * w[2]);
3990
+ m[1] = (a * w[1]) + (b * w[3]);
3991
+ m[2] = (c * w[0]) + (d * w[2]);
3992
+ m[3] = (c * w[1]) + (d * w[3]);
3993
+ m[4] = (tx * w[0]) + (ty * w[2]) + w[4];
3994
+ m[5] = (tx * w[1]) + (ty * w[3]) + w[5];
3995
+ };
3996
+ ToContext2D.prototype._multPoint = function (m, p) { var x = p[0], y = p[1]; return [x * m[0] + y * m[2] + m[4], x * m[1] + y * m[3] + m[5]]; },
3997
+ ToContext2D.prototype._draw = function (path, ctx) {
3998
+ var c = 0, crds = path.crds;
3999
+ for (var j = 0; j < path.cmds.length; j++) {
4000
+ var cmd = path.cmds[j];
4001
+ if (cmd == "M") {
4002
+ ctx.moveTo(crds[c], crds[c + 1]);
4003
+ c += 2;
4004
+ }
4005
+ else if (cmd == "L") {
4006
+ ctx.lineTo(crds[c], crds[c + 1]);
4007
+ c += 2;
4008
+ }
4009
+ else if (cmd == "C") {
4010
+ ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]);
4011
+ c += 6;
4012
+ }
4013
+ else if (cmd == "Q") {
4014
+ ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]);
4015
+ c += 4;
4016
+ }
4017
+ else if (cmd == "Z") {
4018
+ ctx.closePath();
4019
+ }
4020
+ }
4021
+ };
4022
+
4023
+ var ImageList = /** @class */ (function () {
4024
+ function ImageList(files) {
4025
+ if (files == null) {
4026
+ return;
4027
+ }
4028
+ this.images = {};
4029
+ for (var fileKey in files) {
4030
+ // let reg = new RegExp("xl/media/image1.png", "g");
4031
+ if (fileKey.indexOf("xl/media/") > -1) {
4032
+ var fileNameArr = fileKey.split(".");
4033
+ var suffix = fileNameArr[fileNameArr.length - 1].toLowerCase();
4034
+ if (suffix in { "png": 1, "jpeg": 1, "jpg": 1, "gif": 1, "bmp": 1, "tif": 1, "webp": 1, "emf": 1 }) {
4035
+ if (suffix == "emf") {
4036
+ var pNum = 0; // number of the page, that you want to render
4037
+ var scale = 1; // the scale of the document
4038
+ var wrt = new ToContext2D(pNum, scale);
4039
+ var inp, out, stt;
4040
+ FromEMF.K = [];
4041
+ inp = FromEMF.C;
4042
+ out = FromEMF.K;
4043
+ stt = 4;
4044
+ for (var p in inp)
4045
+ out[inp[p]] = p.slice(stt);
4046
+ FromEMF.Parse(files[fileKey], wrt);
4047
+ this.images[fileKey] = wrt.canvas.toDataURL("image/png");
4048
+ }
4049
+ else {
4050
+ this.images[fileKey] = files[fileKey];
4051
+ }
4052
+ }
4053
+ }
4054
+ }
4055
+ }
4056
+ ImageList.prototype.getImageByName = function (pathName) {
4057
+ if (pathName in this.images) {
4058
+ var base64 = this.images[pathName];
4059
+ return new Image(pathName, base64);
4060
+ }
4061
+ return null;
4062
+ };
4063
+ return ImageList;
4064
+ }());
4065
+ var Image = /** @class */ (function (_super) {
4066
+ __extends(Image, _super);
4067
+ function Image(pathName, base64) {
4068
+ var _this = _super.call(this) || this;
4069
+ _this.src = base64;
4070
+ return _this;
4071
+ }
4072
+ Image.prototype.setDefault = function () {
4073
+ };
4074
+ return Image;
4075
+ }(LuckyImageBase));
4076
+
4077
+ var LuckyFile = /** @class */ (function (_super) {
4078
+ __extends(LuckyFile, _super);
4079
+ function LuckyFile(files, fileName) {
4080
+ var _this = _super.call(this) || this;
4081
+ _this.columnWidthSet = [];
4082
+ _this.rowHeightSet = [];
4083
+ _this.files = files;
4084
+ _this.fileName = fileName;
4085
+ _this.readXml = new ReadXml(files);
4086
+ _this.getSheetNameList();
4087
+ _this.sharedStrings = _this.readXml.getElementsByTagName("sst/si", sharedStringsFile);
4088
+ _this.calcChain = _this.readXml.getElementsByTagName("calcChain/c", calcChainFile);
4089
+ _this.styles = {};
4090
+ _this.styles["cellXfs"] = _this.readXml.getElementsByTagName("cellXfs/xf", stylesFile);
4091
+ _this.styles["cellStyleXfs"] = _this.readXml.getElementsByTagName("cellStyleXfs/xf", stylesFile);
4092
+ _this.styles["cellStyles"] = _this.readXml.getElementsByTagName("cellStyles/cellStyle", stylesFile);
4093
+ _this.styles["fonts"] = _this.readXml.getElementsByTagName("fonts/font", stylesFile);
4094
+ _this.styles["fills"] = _this.readXml.getElementsByTagName("fills/fill", stylesFile);
4095
+ _this.styles["borders"] = _this.readXml.getElementsByTagName("borders/border", stylesFile);
4096
+ _this.styles["clrScheme"] = _this.readXml.getElementsByTagName("a:clrScheme/a:dk1|a:lt1|a:dk2|a:lt2|a:accent1|a:accent2|a:accent3|a:accent4|a:accent5|a:accent6|a:hlink|a:folHlink", theme1File);
4097
+ _this.styles["indexedColors"] = _this.readXml.getElementsByTagName("colors/indexedColors/rgbColor", stylesFile);
4098
+ _this.styles["mruColors"] = _this.readXml.getElementsByTagName("colors/mruColors/color", stylesFile);
4099
+ _this.imageList = new ImageList(files);
4100
+ var numfmts = _this.readXml.getElementsByTagName("numFmt/numFmt", stylesFile);
4101
+ var numFmtDefaultC = JSON.parse(JSON.stringify(numFmtDefault));
4102
+ for (var i = 0; i < numfmts.length; i++) {
4103
+ var attrList = numfmts[i].attributeList;
4104
+ var numfmtid = getXmlAttibute(attrList, "numFmtId", "49");
4105
+ var formatcode = getXmlAttibute(attrList, "formatCode", "@");
4106
+ // console.log(numfmtid, formatcode);
4107
+ if (!(numfmtid in numFmtDefault)) {
4108
+ numFmtDefaultC[numfmtid] = numFmtDefaultMap[formatcode] || formatcode;
4109
+ }
4110
+ }
4111
+ // console.log(JSON.stringify(numFmtDefaultC), numfmts);
4112
+ _this.styles["numfmts"] = numFmtDefaultC;
4113
+ return _this;
4114
+ }
4115
+ /**
4116
+ * @return All sheet name of workbook
4117
+ */
4118
+ LuckyFile.prototype.getSheetNameList = function () {
4119
+ var workbookRelList = this.readXml.getElementsByTagName("Relationships/Relationship", workbookRels);
4120
+ if (workbookRelList == null) {
4121
+ return;
4122
+ }
4123
+ var regex = new RegExp("worksheets/[^/]*?.xml");
4124
+ var sheetNames = {};
4125
+ for (var i = 0; i < workbookRelList.length; i++) {
4126
+ var rel = workbookRelList[i], attrList = rel.attributeList;
4127
+ var id = attrList["Id"], target = attrList["Target"];
4128
+ if (regex.test(target)) {
4129
+ if (target.indexOf('/xl') === 0) {
4130
+ sheetNames[id] = target.substr(1);
4131
+ }
4132
+ else {
4133
+ sheetNames[id] = "xl/" + target;
4134
+ }
4135
+ }
4136
+ }
4137
+ this.sheetNameList = sheetNames;
4138
+ };
4139
+ /**
4140
+ * @param sheetName WorkSheet'name
4141
+ * @return sheet file name and path in zip
4142
+ */
4143
+ LuckyFile.prototype.getSheetFileBysheetId = function (sheetId) {
4144
+ // for(let i=0;i<this.sheetNameList.length;i++){
4145
+ // let sheetFileName = this.sheetNameList[i];
4146
+ // if(sheetFileName.indexOf("sheet"+sheetId)>-1){
4147
+ // return sheetFileName;
4148
+ // }
4149
+ // }
4150
+ return this.sheetNameList[sheetId];
4151
+ };
4152
+ /**
4153
+ * @return workBook information
4154
+ */
4155
+ LuckyFile.prototype.getWorkBookInfo = function () {
4156
+ var Company = this.readXml.getElementsByTagName("Company", appFile);
4157
+ var AppVersion = this.readXml.getElementsByTagName("AppVersion", appFile);
4158
+ var creator = this.readXml.getElementsByTagName("dc:creator", coreFile);
4159
+ var lastModifiedBy = this.readXml.getElementsByTagName("cp:lastModifiedBy", coreFile);
4160
+ var created = this.readXml.getElementsByTagName("dcterms:created", coreFile);
4161
+ var modified = this.readXml.getElementsByTagName("dcterms:modified", coreFile);
4162
+ this.info = new LuckyFileInfo();
4163
+ this.info.name = this.fileName;
4164
+ this.info.creator = creator.length > 0 ? creator[0].value : "";
4165
+ this.info.lastmodifiedby = lastModifiedBy.length > 0 ? lastModifiedBy[0].value : "";
4166
+ this.info.createdTime = created.length > 0 ? created[0].value : "";
4167
+ this.info.modifiedTime = modified.length > 0 ? modified[0].value : "";
4168
+ this.info.company = Company.length > 0 ? Company[0].value : "";
4169
+ this.info.appversion = AppVersion.length > 0 ? AppVersion[0].value : "";
4170
+ };
4171
+ /**
4172
+ * @return All sheet , include whole information
4173
+ */
4174
+ LuckyFile.prototype.getSheetsFull = function (isInitialCell) {
4175
+ if (isInitialCell === void 0) { isInitialCell = true; }
4176
+ var sheets = this.readXml.getElementsByTagName("sheets/sheet", workBookFile);
4177
+ var sheetList = {};
4178
+ for (var key in sheets) {
4179
+ var sheet = sheets[key];
4180
+ sheetList[sheet.attributeList.name] = sheet.attributeList["sheetId"];
4181
+ }
4182
+ this.sheets = [];
4183
+ var order = 0;
4184
+ for (var key in sheets) {
4185
+ var sheet = sheets[key];
4186
+ var sheetName = sheet.attributeList.name;
4187
+ var sheetId = sheet.attributeList["sheetId"];
4188
+ var rid = sheet.attributeList["r:id"];
4189
+ var sheetFile = this.getSheetFileBysheetId(rid);
4190
+ var hide = sheet.attributeList.state === "hidden" ? 1 : 0;
4191
+ var drawing = this.readXml.getElementsByTagName("worksheet/drawing", sheetFile), drawingFile = void 0, drawingRelsFile = void 0;
4192
+ if (drawing != null && drawing.length > 0) {
4193
+ var attrList = drawing[0].attributeList;
4194
+ var rid_1 = getXmlAttibute(attrList, "r:id", null);
4195
+ if (rid_1 != null) {
4196
+ drawingFile = this.getDrawingFile(rid_1, sheetFile);
4197
+ drawingRelsFile = this.getDrawingRelsFile(drawingFile);
4198
+ }
4199
+ }
4200
+ if (sheetFile != null) {
4201
+ var sheet_1 = new LuckySheet(sheetName, sheetId, order, isInitialCell, {
4202
+ sheetFile: sheetFile,
4203
+ readXml: this.readXml,
4204
+ sheetList: sheetList,
4205
+ styles: this.styles,
4206
+ sharedStrings: this.sharedStrings,
4207
+ calcChain: this.calcChain,
4208
+ imageList: this.imageList,
4209
+ drawingFile: drawingFile,
4210
+ drawingRelsFile: drawingRelsFile,
4211
+ hide: hide,
4212
+ });
4213
+ this.columnWidthSet = [];
4214
+ this.rowHeightSet = [];
4215
+ this.imagePositionCaculation(sheet_1);
4216
+ this.sheets.push(sheet_1);
4217
+ order++;
4218
+ }
4219
+ }
4220
+ };
4221
+ LuckyFile.prototype.extendArray = function (index, sets, def, hidden, lens) {
4222
+ if (index < sets.length) {
4223
+ return;
4224
+ }
4225
+ var startIndex = sets.length, endIndex = index;
4226
+ var allGap = 0;
4227
+ if (startIndex > 0) {
4228
+ allGap = sets[startIndex - 1];
4229
+ }
4230
+ // else{
4231
+ // sets.push(0);
4232
+ // }
4233
+ for (var i = startIndex; i <= endIndex; i++) {
4234
+ var gap = def, istring = i.toString();
4235
+ if (istring in hidden) {
4236
+ gap = 0;
4237
+ }
4238
+ else if (istring in lens) {
4239
+ gap = lens[istring];
4240
+ }
4241
+ allGap += Math.round(gap + 1);
4242
+ sets.push(allGap);
4243
+ }
4244
+ };
4245
+ LuckyFile.prototype.imagePositionCaculation = function (sheet) {
4246
+ var images = sheet.images, defaultColWidth = sheet.defaultColWidth, defaultRowHeight = sheet.defaultRowHeight;
4247
+ var colhidden = {};
4248
+ if (sheet.config.colhidden) {
4249
+ colhidden = sheet.config.colhidden;
4250
+ }
4251
+ var columnlen = {};
4252
+ if (sheet.config.columnlen) {
4253
+ columnlen = sheet.config.columnlen;
4254
+ }
4255
+ var rowhidden = {};
4256
+ if (sheet.config.rowhidden) {
4257
+ rowhidden = sheet.config.rowhidden;
4258
+ }
4259
+ var rowlen = {};
4260
+ if (sheet.config.rowlen) {
4261
+ rowlen = sheet.config.rowlen;
4262
+ }
4263
+ for (var key in images) {
4264
+ var imageObject = images[key]; //Image, luckyImage
4265
+ var fromCol = imageObject.fromCol;
4266
+ var fromColOff = imageObject.fromColOff;
4267
+ var fromRow = imageObject.fromRow;
4268
+ var fromRowOff = imageObject.fromRowOff;
4269
+ var toCol = imageObject.toCol;
4270
+ var toColOff = imageObject.toColOff;
4271
+ var toRow = imageObject.toRow;
4272
+ var toRowOff = imageObject.toRowOff;
4273
+ var x_n = 0, y_n = 0;
4274
+ var cx_n = 0, cy_n = 0;
4275
+ if (fromCol >= this.columnWidthSet.length) {
4276
+ this.extendArray(fromCol, this.columnWidthSet, defaultColWidth, colhidden, columnlen);
4277
+ }
4278
+ if (fromCol == 0) {
4279
+ x_n = 0;
4280
+ }
4281
+ else {
4282
+ x_n = this.columnWidthSet[fromCol - 1];
4283
+ }
4284
+ x_n = x_n + fromColOff;
4285
+ if (fromRow >= this.rowHeightSet.length) {
4286
+ this.extendArray(fromRow, this.rowHeightSet, defaultRowHeight, rowhidden, rowlen);
4287
+ }
4288
+ if (fromRow == 0) {
4289
+ y_n = 0;
4290
+ }
4291
+ else {
4292
+ y_n = this.rowHeightSet[fromRow - 1];
4293
+ }
4294
+ y_n = y_n + fromRowOff;
4295
+ if (toCol >= this.columnWidthSet.length) {
4296
+ this.extendArray(toCol, this.columnWidthSet, defaultColWidth, colhidden, columnlen);
4297
+ }
4298
+ if (toCol == 0) {
4299
+ cx_n = 0;
4300
+ }
4301
+ else {
4302
+ cx_n = this.columnWidthSet[toCol - 1];
4303
+ }
4304
+ cx_n = cx_n + toColOff - x_n;
4305
+ if (toRow >= this.rowHeightSet.length) {
4306
+ this.extendArray(toRow, this.rowHeightSet, defaultRowHeight, rowhidden, rowlen);
4307
+ }
4308
+ if (toRow == 0) {
4309
+ cy_n = 0;
4310
+ }
4311
+ else {
4312
+ cy_n = this.rowHeightSet[toRow - 1];
4313
+ }
4314
+ cy_n = cy_n + toRowOff - y_n;
4315
+ console.log(defaultColWidth, colhidden, columnlen);
4316
+ console.log(fromCol, this.columnWidthSet[fromCol], fromColOff);
4317
+ console.log(toCol, this.columnWidthSet[toCol], toColOff, JSON.stringify(this.columnWidthSet));
4318
+ imageObject.originWidth = cx_n;
4319
+ imageObject.originHeight = cy_n;
4320
+ imageObject.crop.height = cy_n;
4321
+ imageObject.crop.width = cx_n;
4322
+ imageObject.default.height = cy_n;
4323
+ imageObject.default.left = x_n;
4324
+ imageObject.default.top = y_n;
4325
+ imageObject.default.width = cx_n;
4326
+ }
4327
+ //console.log(this.columnWidthSet, this.rowHeightSet);
4328
+ };
4329
+ /**
4330
+ * @return drawing file string
4331
+ */
4332
+ LuckyFile.prototype.getDrawingFile = function (rid, sheetFile) {
4333
+ var sheetRelsPath = "xl/worksheets/_rels/";
4334
+ var sheetFileArr = sheetFile.split("/");
4335
+ var sheetRelsName = sheetFileArr[sheetFileArr.length - 1];
4336
+ var sheetRelsFile = sheetRelsPath + sheetRelsName + ".rels";
4337
+ var drawing = this.readXml.getElementsByTagName("Relationships/Relationship", sheetRelsFile);
4338
+ if (drawing.length > 0) {
4339
+ for (var i = 0; i < drawing.length; i++) {
4340
+ var relationship = drawing[i];
4341
+ var attrList = relationship.attributeList;
4342
+ var relationshipId = getXmlAttibute(attrList, "Id", null);
4343
+ if (relationshipId == rid) {
4344
+ var target = getXmlAttibute(attrList, "Target", null);
4345
+ if (target != null) {
4346
+ return target.replace(/\.\.\//g, "");
4347
+ }
4348
+ }
4349
+ }
4350
+ }
4351
+ return null;
4352
+ };
4353
+ LuckyFile.prototype.getDrawingRelsFile = function (drawingFile) {
4354
+ var drawingRelsPath = "xl/drawings/_rels/";
4355
+ var drawingFileArr = drawingFile.split("/");
4356
+ var drawingRelsName = drawingFileArr[drawingFileArr.length - 1];
4357
+ var drawingRelsFile = drawingRelsPath + drawingRelsName + ".rels";
4358
+ return drawingRelsFile;
4359
+ };
4360
+ /**
4361
+ * @return All sheet base information widthout cell and config
4362
+ */
4363
+ LuckyFile.prototype.getSheetsWithoutCell = function () {
4364
+ this.getSheetsFull(false);
4365
+ };
4366
+ /**
4367
+ * @return LuckySheet file json
4368
+ */
4369
+ LuckyFile.prototype.Parse = function () {
4370
+ // let xml = this.readXml;
4371
+ // for(let key in this.sheetNameList){
4372
+ // let sheetName=this.sheetNameList[key];
4373
+ // let sheetColumns = xml.getElementsByTagName("row/c/f", sheetName);
4374
+ // console.log(sheetColumns);
4375
+ // }
4376
+ // return "";
4377
+ this.getWorkBookInfo();
4378
+ this.getSheetsFull();
4379
+ // for(let i=0;i<this.sheets.length;i++){
4380
+ // let sheet = this.sheets[i];
4381
+ // let _borderInfo = sheet.config._borderInfo;
4382
+ // if(_borderInfo==null){
4383
+ // continue;
4384
+ // }
4385
+ // let _borderInfoKeys = Object.keys(_borderInfo);
4386
+ // _borderInfoKeys.sort();
4387
+ // for(let a=0;a<_borderInfoKeys.length;a++){
4388
+ // let key = parseInt(_borderInfoKeys[a]);
4389
+ // let b = _borderInfo[key];
4390
+ // if(b.cells.length==0){
4391
+ // continue;
4392
+ // }
4393
+ // if(sheet.config.borderInfo==null){
4394
+ // sheet.config.borderInfo = [];
4395
+ // }
4396
+ // sheet.config.borderInfo.push(b);
4397
+ // }
4398
+ // }
4399
+ return this.toJsonString(this);
4400
+ };
4401
+ LuckyFile.prototype.toJsonString = function (file) {
4402
+ var LuckyOutPutFile = new LuckyFileBase();
4403
+ LuckyOutPutFile.info = file.info;
4404
+ LuckyOutPutFile.sheets = [];
4405
+ file.sheets.forEach(function (sheet) {
4406
+ var sheetout = new LuckySheetBase();
4407
+ //let attrName = ["name","color","config","index","status","order","row","column","luckysheet_select_save","scrollLeft","scrollTop","zoomRatio","showGridLines","defaultColWidth","defaultRowHeight","celldata","chart","isPivotTable","pivotTable","luckysheet_conditionformat_save","freezen","calcChain"];
4408
+ if (sheet.name != null) {
4409
+ sheetout.name = sheet.name;
4410
+ }
4411
+ if (sheet.color != null) {
4412
+ sheetout.color = sheet.color;
4413
+ }
4414
+ if (sheet.config != null) {
4415
+ sheetout.config = sheet.config;
4416
+ // if(sheetout.config._borderInfo!=null){
4417
+ // delete sheetout.config._borderInfo;
4418
+ // }
4419
+ }
4420
+ if (sheet.index != null) {
4421
+ sheetout.index = sheet.index;
4422
+ }
4423
+ if (sheet.status != null) {
4424
+ sheetout.status = sheet.status;
4425
+ }
4426
+ if (sheet.order != null) {
4427
+ sheetout.order = sheet.order;
4428
+ }
4429
+ if (sheet.row != null) {
4430
+ sheetout.row = sheet.row;
4431
+ }
4432
+ if (sheet.column != null) {
4433
+ sheetout.column = sheet.column;
4434
+ }
4435
+ if (sheet.luckysheet_select_save != null) {
4436
+ sheetout.luckysheet_select_save = sheet.luckysheet_select_save;
4437
+ }
4438
+ if (sheet.scrollLeft != null) {
4439
+ sheetout.scrollLeft = sheet.scrollLeft;
4440
+ }
4441
+ if (sheet.scrollTop != null) {
4442
+ sheetout.scrollTop = sheet.scrollTop;
4443
+ }
4444
+ if (sheet.zoomRatio != null) {
4445
+ sheetout.zoomRatio = sheet.zoomRatio;
4446
+ }
4447
+ if (sheet.showGridLines != null) {
4448
+ sheetout.showGridLines = sheet.showGridLines;
4449
+ }
4450
+ if (sheet.defaultColWidth != null) {
4451
+ sheetout.defaultColWidth = sheet.defaultColWidth;
4452
+ }
4453
+ if (sheet.defaultRowHeight != null) {
4454
+ sheetout.defaultRowHeight = sheet.defaultRowHeight;
4455
+ }
4456
+ if (sheet.celldata != null) {
4457
+ // sheetout.celldata = sheet.celldata;
4458
+ sheetout.celldata = [];
4459
+ sheet.celldata.forEach(function (cell) {
4460
+ var cellout = new LuckySheetCelldataBase();
4461
+ cellout.r = cell.r;
4462
+ cellout.c = cell.c;
4463
+ cellout.v = cell.v;
4464
+ sheetout.celldata.push(cellout);
4465
+ });
4466
+ }
4467
+ if (sheet.chart != null) {
4468
+ sheetout.chart = sheet.chart;
4469
+ }
4470
+ if (sheet.isPivotTable != null) {
4471
+ sheetout.isPivotTable = sheet.isPivotTable;
4472
+ }
4473
+ if (sheet.pivotTable != null) {
4474
+ sheetout.pivotTable = sheet.pivotTable;
4475
+ }
4476
+ if (sheet.luckysheet_conditionformat_save != null) {
4477
+ sheetout.luckysheet_conditionformat_save = sheet.luckysheet_conditionformat_save;
4478
+ }
4479
+ if (sheet.freezen != null) {
4480
+ sheetout.freezen = sheet.freezen;
4481
+ }
4482
+ if (sheet.calcChain != null) {
4483
+ sheetout.calcChain = sheet.calcChain;
4484
+ }
4485
+ if (sheet.images != null) {
4486
+ sheetout.images = sheet.images;
4487
+ }
4488
+ if (sheet.dataVerification != null) {
4489
+ sheetout.dataVerification = sheet.dataVerification;
4490
+ }
4491
+ if (sheet.hyperlink != null) {
4492
+ sheetout.hyperlink = sheet.hyperlink;
4493
+ }
4494
+ if (sheet.hide != null) {
4495
+ sheetout.hide = sheet.hide;
4496
+ }
4497
+ LuckyOutPutFile.sheets.push(sheetout);
4498
+ });
4499
+ return JSON.stringify(LuckyOutPutFile);
4500
+ };
4501
+ return LuckyFile;
4502
+ }(LuckyFileBase));
4503
+
4504
+ var HandleZip = /** @class */ (function () {
4505
+ function HandleZip(file) {
4506
+ // Support nodejs fs to read files
4507
+ // if(file instanceof File){
4508
+ this.uploadFile = file;
4509
+ // }
4510
+ }
4511
+ HandleZip.prototype.unzipFile = function (successFunc, errorFunc) {
4512
+ // var new_zip:JSZip = new JSZip();
4513
+ JSZip__default["default"].loadAsync(this.uploadFile) // 1) read the Blob
4514
+ .then(function (zip) {
4515
+ var fileList = {}, lastIndex = Object.keys(zip.files).length, index = 0;
4516
+ zip.forEach(function (relativePath, zipEntry) {
4517
+ var fileName = zipEntry.name;
4518
+ var fileNameArr = fileName.split(".");
4519
+ var suffix = fileNameArr[fileNameArr.length - 1].toLowerCase();
4520
+ var fileType = "string";
4521
+ if (suffix in { "png": 1, "jpeg": 1, "jpg": 1, "gif": 1, "bmp": 1, "tif": 1, "webp": 1, }) {
4522
+ fileType = "base64";
4523
+ }
4524
+ else if (suffix == "emf") {
4525
+ fileType = "arraybuffer";
4526
+ }
4527
+ zipEntry.async(fileType).then(function (data) {
4528
+ if (fileType == "base64") {
4529
+ data = "data:image/" + suffix + ";base64," + data;
4530
+ }
4531
+ fileList[zipEntry.name] = data;
4532
+ // console.log(lastIndex, index);
4533
+ if (lastIndex == index + 1) {
4534
+ successFunc(fileList);
4535
+ }
4536
+ index++;
4537
+ });
4538
+ });
4539
+ }, function (e) {
4540
+ errorFunc(e);
4541
+ });
4542
+ };
4543
+ HandleZip.prototype.unzipFileByUrl = function (url, successFunc, errorFunc) {
4544
+ new JSZip__default["default"]();
4545
+ getBinaryContent(url, function (err, data) {
4546
+ if (err) {
4547
+ throw err; // or handle err
4548
+ }
4549
+ JSZip__default["default"].loadAsync(data).then(function (zip) {
4550
+ var fileList = {}, lastIndex = Object.keys(zip.files).length, index = 0;
4551
+ zip.forEach(function (relativePath, zipEntry) {
4552
+ var fileName = zipEntry.name;
4553
+ var fileNameArr = fileName.split(".");
4554
+ var suffix = fileNameArr[fileNameArr.length - 1].toLowerCase();
4555
+ var fileType = "string";
4556
+ if (suffix in { "png": 1, "jpeg": 1, "jpg": 1, "gif": 1, "bmp": 1, "tif": 1, "webp": 1, }) {
4557
+ fileType = "base64";
4558
+ }
4559
+ else if (suffix == "emf") {
4560
+ fileType = "arraybuffer";
4561
+ }
4562
+ zipEntry.async(fileType).then(function (data) {
4563
+ if (fileType == "base64") {
4564
+ data = "data:image/" + suffix + ";base64," + data;
4565
+ }
4566
+ fileList[zipEntry.name] = data;
4567
+ // console.log(lastIndex, index);
4568
+ if (lastIndex == index + 1) {
4569
+ successFunc(fileList);
4570
+ }
4571
+ index++;
4572
+ });
4573
+ });
4574
+ }, function (e) {
4575
+ errorFunc(e);
4576
+ });
4577
+ });
4578
+ };
4579
+ HandleZip.prototype.newZipFile = function () {
4580
+ var zip = new JSZip__default["default"]();
4581
+ this.workBook = zip;
4582
+ };
4583
+ //title:"nested/hello.txt", content:"Hello Worldasdfasfasdfasfasfasfasfasdfas"
4584
+ HandleZip.prototype.addToZipFile = function (title, content) {
4585
+ if (this.workBook == null) {
4586
+ var zip = new JSZip__default["default"]();
4587
+ this.workBook = zip;
4588
+ }
4589
+ this.workBook.file(title, content);
4590
+ };
4591
+ return HandleZip;
4592
+ }());
4593
+
4594
+ // //demo
4595
+ // function demoHandler(){
4596
+ // let upload = document.getElementById("Luckyexcel-demo-file");
4597
+ // let selectADemo = document.getElementById("Luckyexcel-select-demo");
4598
+ // let downlodDemo = document.getElementById("Luckyexcel-downlod-file");
4599
+ // let mask = document.getElementById("lucky-mask-demo");
4600
+ // if(upload){
4601
+ // window.onload = () => {
4602
+ // upload.addEventListener("change", function(evt){
4603
+ // var files:FileList = (evt.target as any).files;
4604
+ // if(files==null || files.length==0){
4605
+ // alert("No files wait for import");
4606
+ // return;
4607
+ // }
4608
+ // let name = files[0].name;
4609
+ // let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length-1];
4610
+ // if(suffix!="xlsx"){
4611
+ // alert("Currently only supports the import of xlsx files");
4612
+ // return;
4613
+ // }
4614
+ // LuckyExcel.transformExcelToLucky(files[0], function(exportJson:any, luckysheetfile:string){
4615
+ // if(exportJson.sheets==null || exportJson.sheets.length==0){
4616
+ // alert("Failed to read the content of the excel file, currently does not support xls files!");
4617
+ // return;
4618
+ // }
4619
+ // console.log(exportJson, luckysheetfile);
4620
+ // window.luckysheet.destroy();
4621
+ // window.luckysheet.create({
4622
+ // container: 'luckysheet', //luckysheet is the container id
4623
+ // showinfobar:false,
4624
+ // data:exportJson.sheets,
4625
+ // title:exportJson.info.name,
4626
+ // userInfo:exportJson.info.name.creator
4627
+ // });
4628
+ // });
4629
+ // });
4630
+ // selectADemo.addEventListener("change", function(evt){
4631
+ // var obj:any = selectADemo;
4632
+ // var index = obj.selectedIndex;
4633
+ // var value = obj.options[index].value;
4634
+ // var name = obj.options[index].innerHTML;
4635
+ // if(value==""){
4636
+ // return;
4637
+ // }
4638
+ // mask.style.display = "flex";
4639
+ // LuckyExcel.transformExcelToLuckyByUrl(value, name, function(exportJson:any, luckysheetfile:string){
4640
+ // if(exportJson.sheets==null || exportJson.sheets.length==0){
4641
+ // alert("Failed to read the content of the excel file, currently does not support xls files!");
4642
+ // return;
4643
+ // }
4644
+ // console.log(exportJson, luckysheetfile);
4645
+ // mask.style.display = "none";
4646
+ // window.luckysheet.destroy();
4647
+ // window.luckysheet.create({
4648
+ // container: 'luckysheet', //luckysheet is the container id
4649
+ // showinfobar:false,
4650
+ // data:exportJson.sheets,
4651
+ // title:exportJson.info.name,
4652
+ // userInfo:exportJson.info.name.creator
4653
+ // });
4654
+ // });
4655
+ // });
4656
+ // downlodDemo.addEventListener("click", function(evt){
4657
+ // var obj:any = selectADemo;
4658
+ // var index = obj.selectedIndex;
4659
+ // var value = obj.options[index].value;
4660
+ // if(value.length==0){
4661
+ // alert("Please select a demo file");
4662
+ // return;
4663
+ // }
4664
+ // var elemIF:any = document.getElementById("Lucky-download-frame");
4665
+ // if(elemIF==null){
4666
+ // elemIF = document.createElement("iframe");
4667
+ // elemIF.style.display = "none";
4668
+ // elemIF.id = "Lucky-download-frame";
4669
+ // document.body.appendChild(elemIF);
4670
+ // }
4671
+ // elemIF.src = value;
4672
+ // // elemIF.parentNode.removeChild(elemIF);
4673
+ // });
4674
+ // }
4675
+ // }
4676
+ // }
4677
+ // demoHandler();
4678
+ // api
4679
+ var LuckyExcel = /** @class */ (function () {
4680
+ function LuckyExcel() {
4681
+ }
4682
+ LuckyExcel.transformExcelToLucky = function (excelFile, callback, errorHandler) {
4683
+ var handleZip = new HandleZip(excelFile);
4684
+ handleZip.unzipFile(function (files) {
4685
+ var luckyFile = new LuckyFile(files, excelFile.name);
4686
+ var luckysheetfile = luckyFile.Parse();
4687
+ var exportJson = JSON.parse(luckysheetfile);
4688
+ if (callback != undefined) {
4689
+ callback(exportJson, luckysheetfile);
4690
+ }
4691
+ }, function (err) {
4692
+ if (errorHandler) {
4693
+ errorHandler(err);
4694
+ }
4695
+ else {
4696
+ console.error(err);
4697
+ }
4698
+ });
4699
+ };
4700
+ LuckyExcel.transformExcelToLuckyByUrl = function (url, name, callBack, errorHandler) {
4701
+ var handleZip = new HandleZip();
4702
+ handleZip.unzipFileByUrl(url, function (files) {
4703
+ var luckyFile = new LuckyFile(files, name);
4704
+ var luckysheetfile = luckyFile.Parse();
4705
+ var exportJson = JSON.parse(luckysheetfile);
4706
+ if (callBack != undefined) {
4707
+ callBack(exportJson, luckysheetfile);
4708
+ }
4709
+ }, function (err) {
4710
+ if (errorHandler) {
4711
+ errorHandler(err);
4712
+ }
4713
+ else {
4714
+ console.error(err);
4715
+ }
4716
+ });
4717
+ };
4718
+ LuckyExcel.transformLuckyToExcel = function (LuckyFile, callBack, errorHandler) { };
4719
+ return LuckyExcel;
4720
+ }());
4721
+
4722
+ module.exports = LuckyExcel;