@alienkarma/exceljs 4.4.0-fork.11 → 4.4.0-fork.13

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 (536) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +3024 -3024
  3. package/README_zh.md +2878 -2878
  4. package/excel.js +13 -13
  5. package/index.d.ts +2040 -2040
  6. package/lib/csv/csv.js +191 -191
  7. package/lib/csv/line-buffer.js +74 -74
  8. package/lib/csv/stream-converter.js +135 -135
  9. package/lib/doc/anchor.js +91 -91
  10. package/lib/doc/cell.js +1124 -1124
  11. package/lib/doc/column.js +320 -320
  12. package/lib/doc/data/theme1.json +234 -234
  13. package/lib/doc/data-validations.js +19 -19
  14. package/lib/doc/defined-names.js +196 -196
  15. package/lib/doc/enums.js +48 -48
  16. package/lib/doc/image.js +59 -59
  17. package/lib/doc/modelcontainer.js +18 -18
  18. package/lib/doc/note.js +65 -65
  19. package/lib/doc/pivot-table.js +132 -132
  20. package/lib/doc/range.js +257 -257
  21. package/lib/doc/row.js +415 -415
  22. package/lib/doc/table.js +465 -465
  23. package/lib/doc/workbook.js +224 -224
  24. package/lib/doc/worksheet.js +949 -949
  25. package/lib/exceljs.bare.js +13 -13
  26. package/lib/exceljs.browser.js +36 -36
  27. package/lib/exceljs.nodejs.js +14 -14
  28. package/lib/stream/xlsx/hyperlink-reader.js +83 -83
  29. package/lib/stream/xlsx/sheet-comments-writer.js +121 -121
  30. package/lib/stream/xlsx/sheet-rels-writer.js +119 -119
  31. package/lib/stream/xlsx/workbook-reader.js +337 -337
  32. package/lib/stream/xlsx/workbook-writer.js +372 -367
  33. package/lib/stream/xlsx/worksheet-reader.js +374 -374
  34. package/lib/stream/xlsx/worksheet-writer.js +717 -717
  35. package/lib/utils/auto-drain.js +15 -15
  36. package/lib/utils/browser-buffer-decode.js +14 -14
  37. package/lib/utils/browser-buffer-encode.js +15 -15
  38. package/lib/utils/cell-matrix.js +165 -165
  39. package/lib/utils/col-cache.js +287 -287
  40. package/lib/utils/copy-style.js +43 -43
  41. package/lib/utils/encryptor.js +55 -55
  42. package/lib/utils/iterate-stream.js +48 -48
  43. package/lib/utils/parse-sax.js +30 -30
  44. package/lib/utils/shared-formula.js +44 -44
  45. package/lib/utils/shared-strings.js +35 -35
  46. package/lib/utils/stream-base64.js +72 -72
  47. package/lib/utils/stream-buf.js +364 -364
  48. package/lib/utils/string-buf.js +82 -82
  49. package/lib/utils/string-builder.js +35 -35
  50. package/lib/utils/stuttered-pipe.js +67 -67
  51. package/lib/utils/typed-stack.js +24 -24
  52. package/lib/utils/under-dash.js +184 -184
  53. package/lib/utils/utils.js +205 -205
  54. package/lib/utils/xml-stream.js +169 -169
  55. package/lib/utils/zip-stream.js +87 -87
  56. package/lib/xlsx/.rels +10 -10
  57. package/lib/xlsx/calcChain.xml +5 -5
  58. package/lib/xlsx/core.xml +6 -6
  59. package/lib/xlsx/defaultnumformats.js +153 -153
  60. package/lib/xlsx/rel-type.js +20 -20
  61. package/lib/xlsx/styles.xml +40 -40
  62. package/lib/xlsx/workbook.xml +16 -16
  63. package/lib/xlsx/xform/base-xform.js +145 -145
  64. package/lib/xlsx/xform/book/defined-name-xform.js +91 -91
  65. package/lib/xlsx/xform/book/sheet-xform.js +34 -34
  66. package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -26
  67. package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -29
  68. package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -29
  69. package/lib/xlsx/xform/book/workbook-view-xform.js +53 -53
  70. package/lib/xlsx/xform/book/workbook-xform.js +259 -259
  71. package/lib/xlsx/xform/comment/comment-xform.js +105 -105
  72. package/lib/xlsx/xform/comment/comments-xform.js +82 -82
  73. package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -39
  74. package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -36
  75. package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -60
  76. package/lib/xlsx/xform/comment/vml-client-data-xform.js +95 -95
  77. package/lib/xlsx/xform/comment/vml-notes-xform.js +107 -107
  78. package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -95
  79. package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -64
  80. package/lib/xlsx/xform/composite-xform.js +56 -56
  81. package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -32
  82. package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -28
  83. package/lib/xlsx/xform/core/app-xform.js +100 -100
  84. package/lib/xlsx/xform/core/content-types-xform.js +135 -135
  85. package/lib/xlsx/xform/core/core-xform.js +136 -136
  86. package/lib/xlsx/xform/core/relationship-xform.js +25 -25
  87. package/lib/xlsx/xform/core/relationships-xform.js +73 -73
  88. package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -48
  89. package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -71
  90. package/lib/xlsx/xform/drawing/blip-xform.js +42 -42
  91. package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -38
  92. package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -68
  93. package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -77
  94. package/lib/xlsx/xform/drawing/drawing-xform.js +109 -109
  95. package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -43
  96. package/lib/xlsx/xform/drawing/ext-xform.js +44 -44
  97. package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -41
  98. package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -65
  99. package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -63
  100. package/lib/xlsx/xform/drawing/pic-xform.js +77 -77
  101. package/lib/xlsx/xform/drawing/sp-pr.js +17 -17
  102. package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -62
  103. package/lib/xlsx/xform/list-xform.js +95 -95
  104. package/lib/xlsx/xform/pivot-table/cache-field.js +43 -43
  105. package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -77
  106. package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +103 -103
  107. package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +189 -189
  108. package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -38
  109. package/lib/xlsx/xform/sheet/cell-xform.js +498 -498
  110. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +301 -301
  111. package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -27
  112. package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -45
  113. package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -48
  114. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -92
  115. package/lib/xlsx/xform/sheet/cf/databar-xform.js +49 -49
  116. package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -87
  117. package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -25
  118. package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -47
  119. package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -27
  120. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -98
  121. package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -43
  122. package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -62
  123. package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -50
  124. package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +98 -98
  125. package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -25
  126. package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -73
  127. package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -25
  128. package/lib/xlsx/xform/sheet/col-xform.js +86 -86
  129. package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -257
  130. package/lib/xlsx/xform/sheet/dimension-xform.js +29 -29
  131. package/lib/xlsx/xform/sheet/drawing-xform.js +33 -33
  132. package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -86
  133. package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -146
  134. package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -54
  135. package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -27
  136. package/lib/xlsx/xform/sheet/merges.js +56 -56
  137. package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -43
  138. package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -27
  139. package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -49
  140. package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -35
  141. package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -103
  142. package/lib/xlsx/xform/sheet/picture-xform.js +33 -33
  143. package/lib/xlsx/xform/sheet/print-options-xform.js +49 -49
  144. package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -39
  145. package/lib/xlsx/xform/sheet/row-xform.js +142 -142
  146. package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +55 -55
  147. package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -90
  148. package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -89
  149. package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -202
  150. package/lib/xlsx/xform/sheet/table-part-xform.js +33 -33
  151. package/lib/xlsx/xform/sheet/worksheet-xform.js +548 -548
  152. package/lib/xlsx/xform/simple/boolean-xform.js +31 -31
  153. package/lib/xlsx/xform/simple/date-xform.js +66 -66
  154. package/lib/xlsx/xform/simple/float-xform.js +51 -51
  155. package/lib/xlsx/xform/simple/integer-xform.js +57 -57
  156. package/lib/xlsx/xform/simple/string-xform.js +51 -51
  157. package/lib/xlsx/xform/static-xform.js +64 -64
  158. package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -98
  159. package/lib/xlsx/xform/strings/rich-text-xform.js +101 -101
  160. package/lib/xlsx/xform/strings/shared-string-xform.js +102 -102
  161. package/lib/xlsx/xform/strings/shared-strings-xform.js +127 -127
  162. package/lib/xlsx/xform/strings/text-xform.js +44 -44
  163. package/lib/xlsx/xform/style/alignment-xform.js +172 -172
  164. package/lib/xlsx/xform/style/border-xform.js +207 -207
  165. package/lib/xlsx/xform/style/color-xform.js +63 -63
  166. package/lib/xlsx/xform/style/dxf-xform.js +111 -111
  167. package/lib/xlsx/xform/style/fill-xform.js +364 -364
  168. package/lib/xlsx/xform/style/font-xform.js +102 -102
  169. package/lib/xlsx/xform/style/numfmt-xform.js +63 -63
  170. package/lib/xlsx/xform/style/protection-xform.js +60 -60
  171. package/lib/xlsx/xform/style/style-xform.js +125 -125
  172. package/lib/xlsx/xform/style/styles-xform.js +527 -527
  173. package/lib/xlsx/xform/style/underline-xform.js +47 -47
  174. package/lib/xlsx/xform/table/auto-filter-xform.js +81 -81
  175. package/lib/xlsx/xform/table/custom-filter-xform.js +33 -33
  176. package/lib/xlsx/xform/table/filter-column-xform.js +96 -96
  177. package/lib/xlsx/xform/table/filter-xform.js +31 -31
  178. package/lib/xlsx/xform/table/table-column-xform.js +44 -44
  179. package/lib/xlsx/xform/table/table-style-info-xform.js +41 -41
  180. package/lib/xlsx/xform/table/table-xform.js +131 -131
  181. package/lib/xlsx/xlsx.js +774 -774
  182. package/lib/xlsx/xml/theme1.js +3 -3
  183. package/lib/xlsx/xml/theme1.xml +317 -317
  184. package/package.json +1 -2
  185. package/dist/LICENSE +0 -22
  186. package/dist/es5/csv/csv.js +0 -182
  187. package/dist/es5/csv/csv.js.map +0 -1
  188. package/dist/es5/csv/line-buffer.js +0 -68
  189. package/dist/es5/csv/line-buffer.js.map +0 -1
  190. package/dist/es5/csv/stream-converter.js +0 -110
  191. package/dist/es5/csv/stream-converter.js.map +0 -1
  192. package/dist/es5/doc/anchor.js +0 -73
  193. package/dist/es5/doc/anchor.js.map +0 -1
  194. package/dist/es5/doc/cell.js +0 -960
  195. package/dist/es5/doc/cell.js.map +0 -1
  196. package/dist/es5/doc/column.js +0 -274
  197. package/dist/es5/doc/column.js.map +0 -1
  198. package/dist/es5/doc/data-validations.js +0 -18
  199. package/dist/es5/doc/data-validations.js.map +0 -1
  200. package/dist/es5/doc/defined-names.js +0 -173
  201. package/dist/es5/doc/defined-names.js.map +0 -1
  202. package/dist/es5/doc/enums.js +0 -49
  203. package/dist/es5/doc/enums.js.map +0 -1
  204. package/dist/es5/doc/image.js +0 -69
  205. package/dist/es5/doc/image.js.map +0 -1
  206. package/dist/es5/doc/modelcontainer.js +0 -16
  207. package/dist/es5/doc/modelcontainer.js.map +0 -1
  208. package/dist/es5/doc/note.js +0 -64
  209. package/dist/es5/doc/note.js.map +0 -1
  210. package/dist/es5/doc/pivot-table.js +0 -137
  211. package/dist/es5/doc/pivot-table.js.map +0 -1
  212. package/dist/es5/doc/range.js +0 -229
  213. package/dist/es5/doc/range.js.map +0 -1
  214. package/dist/es5/doc/row.js +0 -382
  215. package/dist/es5/doc/row.js.map +0 -1
  216. package/dist/es5/doc/table.js +0 -441
  217. package/dist/es5/doc/table.js.map +0 -1
  218. package/dist/es5/doc/workbook.js +0 -205
  219. package/dist/es5/doc/workbook.js.map +0 -1
  220. package/dist/es5/doc/worksheet.js +0 -918
  221. package/dist/es5/doc/worksheet.js.map +0 -1
  222. package/dist/es5/exceljs.bare.js +0 -14
  223. package/dist/es5/exceljs.bare.js.map +0 -1
  224. package/dist/es5/exceljs.browser.js +0 -36
  225. package/dist/es5/exceljs.browser.js.map +0 -1
  226. package/dist/es5/exceljs.nodejs.js +0 -15
  227. package/dist/es5/exceljs.nodejs.js.map +0 -1
  228. package/dist/es5/index.js +0 -15
  229. package/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  230. package/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  231. package/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  232. package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  233. package/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  234. package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  235. package/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  236. package/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  237. package/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  238. package/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  239. package/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  240. package/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  241. package/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  242. package/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  243. package/dist/es5/utils/auto-drain.js +0 -18
  244. package/dist/es5/utils/auto-drain.js.map +0 -1
  245. package/dist/es5/utils/browser-buffer-decode.js +0 -15
  246. package/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  247. package/dist/es5/utils/browser-buffer-encode.js +0 -18
  248. package/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  249. package/dist/es5/utils/cell-matrix.js +0 -149
  250. package/dist/es5/utils/cell-matrix.js.map +0 -1
  251. package/dist/es5/utils/col-cache.js +0 -258
  252. package/dist/es5/utils/col-cache.js.map +0 -1
  253. package/dist/es5/utils/copy-style.js +0 -43
  254. package/dist/es5/utils/copy-style.js.map +0 -1
  255. package/dist/es5/utils/encryptor.js +0 -58
  256. package/dist/es5/utils/encryptor.js.map +0 -1
  257. package/dist/es5/utils/iterate-stream.js +0 -46
  258. package/dist/es5/utils/iterate-stream.js.map +0 -1
  259. package/dist/es5/utils/parse-sax.js +0 -47
  260. package/dist/es5/utils/parse-sax.js.map +0 -1
  261. package/dist/es5/utils/shared-formula.js +0 -42
  262. package/dist/es5/utils/shared-formula.js.map +0 -1
  263. package/dist/es5/utils/shared-strings.js +0 -32
  264. package/dist/es5/utils/shared-strings.js.map +0 -1
  265. package/dist/es5/utils/stream-base64.js +0 -66
  266. package/dist/es5/utils/stream-base64.js.map +0 -1
  267. package/dist/es5/utils/stream-buf.js +0 -343
  268. package/dist/es5/utils/stream-buf.js.map +0 -1
  269. package/dist/es5/utils/string-buf.js +0 -73
  270. package/dist/es5/utils/string-buf.js.map +0 -1
  271. package/dist/es5/utils/string-builder.js +0 -32
  272. package/dist/es5/utils/string-builder.js.map +0 -1
  273. package/dist/es5/utils/stuttered-pipe.js +0 -61
  274. package/dist/es5/utils/stuttered-pipe.js.map +0 -1
  275. package/dist/es5/utils/typed-stack.js +0 -23
  276. package/dist/es5/utils/typed-stack.js.map +0 -1
  277. package/dist/es5/utils/under-dash.js +0 -168
  278. package/dist/es5/utils/under-dash.js.map +0 -1
  279. package/dist/es5/utils/utils.js +0 -204
  280. package/dist/es5/utils/utils.js.map +0 -1
  281. package/dist/es5/utils/xml-stream.js +0 -151
  282. package/dist/es5/utils/xml-stream.js.map +0 -1
  283. package/dist/es5/utils/zip-stream.js +0 -79
  284. package/dist/es5/utils/zip-stream.js.map +0 -1
  285. package/dist/es5/xlsx/defaultnumformats.js +0 -230
  286. package/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  287. package/dist/es5/xlsx/rel-type.js +0 -21
  288. package/dist/es5/xlsx/rel-type.js.map +0 -1
  289. package/dist/es5/xlsx/xform/base-xform.js +0 -139
  290. package/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  291. package/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  292. package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  293. package/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  294. package/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  295. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  296. package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  297. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +0 -27
  298. package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +0 -1
  299. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  300. package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  301. package/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  302. package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  303. package/dist/es5/xlsx/xform/book/workbook-xform.js +0 -241
  304. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  305. package/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  306. package/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  307. package/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  308. package/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  309. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  310. package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  311. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  312. package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  313. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  314. package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  315. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  316. package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  317. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  318. package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  319. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  320. package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  321. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  322. package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  323. package/dist/es5/xlsx/xform/composite-xform.js +0 -51
  324. package/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  325. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  326. package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  327. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  328. package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  329. package/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  330. package/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  331. package/dist/es5/xlsx/xform/core/content-types-xform.js +0 -127
  332. package/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  333. package/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  334. package/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  335. package/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  336. package/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  337. package/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  338. package/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  339. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  340. package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  341. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  342. package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  343. package/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -39
  344. package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  345. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  346. package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  347. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  348. package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  349. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  350. package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  351. package/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  352. package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  353. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  354. package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  355. package/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  356. package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  357. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  358. package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  359. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  360. package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  361. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  362. package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  363. package/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  364. package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  365. package/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  366. package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  367. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  368. package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  369. package/dist/es5/xlsx/xform/list-xform.js +0 -91
  370. package/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  371. package/dist/es5/xlsx/xform/pivot-table/cache-field.js +0 -48
  372. package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +0 -1
  373. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +0 -73
  374. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +0 -1
  375. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +0 -93
  376. package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +0 -1
  377. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +0 -176
  378. package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +0 -1
  379. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  380. package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  381. package/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -450
  382. package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  383. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  384. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  385. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  386. package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  387. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  388. package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  389. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  390. package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  391. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  392. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  393. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  394. package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  395. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  396. package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  397. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  398. package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  399. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  400. package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  401. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  402. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  403. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  404. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  405. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  406. package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  407. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  408. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  409. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  410. package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  411. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  412. package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  413. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  414. package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  415. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  416. package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  417. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  418. package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  419. package/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  420. package/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  421. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  422. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  423. package/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  424. package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  425. package/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  426. package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  427. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  428. package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  429. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  430. package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  431. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  432. package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  433. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  434. package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  435. package/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  436. package/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  437. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  438. package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  439. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  440. package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  441. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  442. package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  443. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  444. package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  445. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  446. package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  447. package/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  448. package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  449. package/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  450. package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  451. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  452. package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  453. package/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  454. package/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  455. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  456. package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  457. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  458. package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  459. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  460. package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  461. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  462. package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  463. package/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  464. package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  465. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -522
  466. package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  467. package/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  468. package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  469. package/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  470. package/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  471. package/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  472. package/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  473. package/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  474. package/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  475. package/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  476. package/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  477. package/dist/es5/xlsx/xform/static-xform.js +0 -61
  478. package/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  479. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  480. package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  481. package/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  482. package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  483. package/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  484. package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  485. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  486. package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  487. package/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  488. package/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  489. package/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  490. package/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  491. package/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  492. package/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  493. package/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  494. package/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  495. package/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  496. package/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  497. package/dist/es5/xlsx/xform/style/fill-xform.js +0 -307
  498. package/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  499. package/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  500. package/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  501. package/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -58
  502. package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  503. package/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  504. package/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  505. package/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  506. package/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  507. package/dist/es5/xlsx/xform/style/styles-xform.js +0 -611
  508. package/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  509. package/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  510. package/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  511. package/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  512. package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  513. package/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  514. package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  515. package/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  516. package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  517. package/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  518. package/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  519. package/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  520. package/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  521. package/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  522. package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  523. package/dist/es5/xlsx/xform/table/table-xform.js +0 -122
  524. package/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  525. package/dist/es5/xlsx/xlsx.js +0 -775
  526. package/dist/es5/xlsx/xlsx.js.map +0 -1
  527. package/dist/es5/xlsx/xml/theme1.js +0 -5
  528. package/dist/es5/xlsx/xml/theme1.js.map +0 -1
  529. package/dist/exceljs.bare.js +0 -57759
  530. package/dist/exceljs.bare.js.map +0 -777
  531. package/dist/exceljs.bare.min.js +0 -45
  532. package/dist/exceljs.bare.min.js.map +0 -1
  533. package/dist/exceljs.js +0 -62398
  534. package/dist/exceljs.js.map +0 -1095
  535. package/dist/exceljs.min.js +0 -45
  536. package/dist/exceljs.min.js.map +0 -1
@@ -1,527 +1,527 @@
1
- /* eslint-disable max-classes-per-file */
2
- const Enums = require('../../../doc/enums');
3
- const XmlStream = require('../../../utils/xml-stream');
4
-
5
- const BaseXform = require('../base-xform');
6
- const StaticXform = require('../static-xform');
7
- const ListXform = require('../list-xform');
8
- const FontXform = require('./font-xform');
9
- const FillXform = require('./fill-xform');
10
- const BorderXform = require('./border-xform');
11
- const NumFmtXform = require('./numfmt-xform');
12
- const StyleXform = require('./style-xform');
13
- const DxfXform = require('./dxf-xform');
14
-
15
- // custom numfmt ids start here
16
- const NUMFMT_BASE = 164;
17
-
18
- // =============================================================================
19
- // StylesXform is used to generate and parse the styles.xml file
20
- // it manages the collections of fonts, number formats, alignments, etc
21
- class StylesXform extends BaseXform {
22
- constructor(initialise) {
23
- super();
24
-
25
- this.map = {
26
- numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),
27
- fonts: new ListXform({
28
- tag: 'fonts',
29
- count: true,
30
- childXform: new FontXform(),
31
- $: {'x14ac:knownFonts': 1},
32
- }),
33
- fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),
34
- borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),
35
- cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),
36
- cellXfs: new ListXform({
37
- tag: 'cellXfs',
38
- count: true,
39
- childXform: new StyleXform({xfId: true}),
40
- }),
41
- dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),
42
-
43
- // for style manager
44
- numFmt: new NumFmtXform(),
45
- font: new FontXform(),
46
- fill: new FillXform(),
47
- border: new BorderXform(),
48
- style: new StyleXform({xfId: true}),
49
-
50
- cellStyles: StylesXform.STATIC_XFORMS.cellStyles,
51
- tableStyles: StylesXform.STATIC_XFORMS.tableStyles,
52
- extLst: StylesXform.STATIC_XFORMS.extLst,
53
- };
54
-
55
- if (initialise) {
56
- // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing
57
- this.init();
58
- }
59
- }
60
-
61
- initIndex() {
62
- this.index = {
63
- style: {},
64
- numFmt: {},
65
- numFmtNextId: 164, // start custom format ids here
66
- font: {},
67
- border: {},
68
- fill: {},
69
- };
70
- }
71
-
72
- init() {
73
- // Prepare for Style Manager role
74
- this.model = {
75
- styles: [],
76
- numFmts: [],
77
- fonts: [],
78
- borders: [],
79
- fills: [],
80
- dxfs: [],
81
- };
82
-
83
- this.initIndex();
84
-
85
- // default (zero) border
86
- this._addBorder({});
87
-
88
- // add default (all zero) style
89
- this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});
90
-
91
- // add default fills
92
- this._addFill({type: 'pattern', pattern: 'none'});
93
- this._addFill({type: 'pattern', pattern: 'gray125'});
94
-
95
- this.weakMap = new WeakMap();
96
- }
97
-
98
- render(xmlStream, model) {
99
- model = model || this.model;
100
- //
101
- // <fonts count="2" x14ac:knownFonts="1">
102
- xmlStream.openXml(XmlStream.StdDocAttributes);
103
-
104
- xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);
105
-
106
- if (this.index) {
107
- // model has been built by style manager role (contains xml)
108
- if (model.numFmts && model.numFmts.length) {
109
- xmlStream.openNode('numFmts', {count: model.numFmts.length});
110
- model.numFmts.forEach(numFmtXml => {
111
- xmlStream.writeXml(numFmtXml);
112
- });
113
- xmlStream.closeNode();
114
- }
115
-
116
- if (!model.fonts.length) {
117
- // default (zero) font
118
- this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});
119
- }
120
- xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});
121
- model.fonts.forEach(fontXml => {
122
- xmlStream.writeXml(fontXml);
123
- });
124
- xmlStream.closeNode();
125
-
126
- xmlStream.openNode('fills', {count: model.fills.length});
127
- model.fills.forEach(fillXml => {
128
- xmlStream.writeXml(fillXml);
129
- });
130
- xmlStream.closeNode();
131
-
132
- xmlStream.openNode('borders', {count: model.borders.length});
133
- model.borders.forEach(borderXml => {
134
- xmlStream.writeXml(borderXml);
135
- });
136
- xmlStream.closeNode();
137
-
138
- this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);
139
-
140
- xmlStream.openNode('cellXfs', {count: model.styles.length});
141
- model.styles.forEach(styleXml => {
142
- xmlStream.writeXml(styleXml);
143
- });
144
- xmlStream.closeNode();
145
- } else {
146
- // model is plain JSON and needs to be xformed
147
- this.map.numFmts.render(xmlStream, model.numFmts);
148
- this.map.fonts.render(xmlStream, model.fonts);
149
- this.map.fills.render(xmlStream, model.fills);
150
- this.map.borders.render(xmlStream, model.borders);
151
- this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);
152
- this.map.cellXfs.render(xmlStream, model.styles);
153
- }
154
-
155
- StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);
156
-
157
- this.map.dxfs.render(xmlStream, model.dxfs);
158
-
159
- StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);
160
- StylesXform.STATIC_XFORMS.extLst.render(xmlStream);
161
-
162
- xmlStream.closeNode();
163
- }
164
-
165
- parseOpen(node) {
166
- if (this.parser) {
167
- this.parser.parseOpen(node);
168
- return true;
169
- }
170
- switch (node.name) {
171
- case 'styleSheet':
172
- this.initIndex();
173
- return true;
174
- default:
175
- this.parser = this.map[node.name];
176
- if (this.parser) {
177
- this.parser.parseOpen(node);
178
- }
179
- return true;
180
- }
181
- }
182
-
183
- parseText(text) {
184
- if (this.parser) {
185
- this.parser.parseText(text);
186
- }
187
- }
188
-
189
- parseClose(name) {
190
- if (this.parser) {
191
- if (!this.parser.parseClose(name)) {
192
- this.parser = undefined;
193
- }
194
- return true;
195
- }
196
- switch (name) {
197
- case 'styleSheet': {
198
- this.model = {};
199
- const add = (propName, xform) => {
200
- if (xform.model && xform.model.length) {
201
- this.model[propName] = xform.model;
202
- }
203
- };
204
- add('numFmts', this.map.numFmts);
205
- add('fonts', this.map.fonts);
206
- add('fills', this.map.fills);
207
- add('borders', this.map.borders);
208
- add('styles', this.map.cellXfs);
209
- add('dxfs', this.map.dxfs);
210
-
211
- // index numFmts
212
- this.index = {
213
- model: [],
214
- numFmt: [],
215
- };
216
- if (this.model.numFmts) {
217
- const numFmtIndex = this.index.numFmt;
218
- this.model.numFmts.forEach(numFmt => {
219
- numFmtIndex[numFmt.id] = numFmt.formatCode;
220
- });
221
- }
222
-
223
- return false;
224
- }
225
- default:
226
- // not quite sure how we get here!
227
- return true;
228
- }
229
- }
230
-
231
- // add a cell's style model to the collection
232
- // each style property is processed and cross-referenced, etc.
233
- // the styleId is returned. Note: cellType is used when numFmt not defined
234
- addStyleModel(model, cellType) {
235
- if (!model) {
236
- return 0;
237
- }
238
-
239
- // if we have no default font, add it here now
240
- if (!this.model.fonts.length) {
241
- // default (zero) font
242
- this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});
243
- }
244
-
245
- // if we have seen this style object before, assume it has the same styleId
246
- if (this.weakMap && this.weakMap.has(model)) {
247
- return this.weakMap.get(model);
248
- }
249
-
250
- const style = {};
251
- cellType = cellType || Enums.ValueType.Number;
252
-
253
- if (model.numFmt) {
254
- style.numFmtId = this._addNumFmtStr(model.numFmt);
255
- } else {
256
- switch (cellType) {
257
- case Enums.ValueType.Number:
258
- style.numFmtId = this._addNumFmtStr('General');
259
- break;
260
- case Enums.ValueType.Date:
261
- style.numFmtId = this._addNumFmtStr('mm-dd-yy');
262
- break;
263
- default:
264
- break;
265
- }
266
- }
267
-
268
- if (model.font) {
269
- style.fontId = this._addFont(model.font);
270
- }
271
-
272
- if (model.border) {
273
- style.borderId = this._addBorder(model.border);
274
- }
275
-
276
- if (model.fill) {
277
- style.fillId = this._addFill(model.fill);
278
- }
279
-
280
- if (model.alignment) {
281
- style.alignment = model.alignment;
282
- }
283
-
284
- if (model.protection) {
285
- style.protection = model.protection;
286
- }
287
-
288
- const styleId = this._addStyle(style);
289
- if (this.weakMap) {
290
- this.weakMap.set(model, styleId);
291
- }
292
- return styleId;
293
- }
294
-
295
- // given a styleId (i.e. s="n"), get the cell's style model
296
- // objects are shared where possible.
297
- getStyleModel(id) {
298
- // if the style doesn't exist return null
299
- const style = this.model.styles[id];
300
- if (!style) return null;
301
-
302
- // have we built this model before?
303
- let model = this.index.model[id];
304
- if (model) return model;
305
-
306
- // build a new model
307
- model = this.index.model[id] = {};
308
-
309
- // -------------------------------------------------------
310
- // number format
311
- if (style.numFmtId) {
312
- const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);
313
- if (numFmt) {
314
- model.numFmt = numFmt;
315
- }
316
- }
317
-
318
- function addStyle(name, group, styleId) {
319
- if (styleId || styleId === 0) {
320
- const part = group[styleId];
321
- if (part) {
322
- model[name] = part;
323
- }
324
- }
325
- }
326
-
327
- addStyle('font', this.model.fonts, style.fontId);
328
- addStyle('border', this.model.borders, style.borderId);
329
- addStyle('fill', this.model.fills, style.fillId);
330
-
331
- // -------------------------------------------------------
332
- // alignment
333
- if (style.alignment) {
334
- model.alignment = style.alignment;
335
- }
336
-
337
- // -------------------------------------------------------
338
- // protection
339
- if (style.protection) {
340
- model.protection = style.protection;
341
- }
342
-
343
- return model;
344
- }
345
-
346
- addDxfStyle(style) {
347
- if (style.numFmt) {
348
- // register numFmtId to use it during dxf-xform rendering
349
- style.numFmtId = this._addNumFmtStr(style.numFmt);
350
- }
351
-
352
- this.model.dxfs.push(style);
353
- return this.model.dxfs.length - 1;
354
- }
355
-
356
- getDxfStyle(id) {
357
- return this.model.dxfs[id];
358
- }
359
-
360
- // =========================================================================
361
- // Private Interface
362
- _addStyle(style) {
363
- const xml = this.map.style.toXml(style);
364
- let index = this.index.style[xml];
365
- if (index === undefined) {
366
- index = this.index.style[xml] = this.model.styles.length;
367
- this.model.styles.push(xml);
368
- }
369
- return index;
370
- }
371
-
372
- // =========================================================================
373
- // Number Formats
374
- _addNumFmtStr(formatCode) {
375
- // check if default format
376
- let index = NumFmtXform.getDefaultFmtId(formatCode);
377
- if (index !== undefined) return index;
378
-
379
- // check if already in
380
- index = this.index.numFmt[formatCode];
381
- if (index !== undefined) return index;
382
-
383
- index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;
384
- const xml = this.map.numFmt.toXml({id: index, formatCode});
385
- this.model.numFmts.push(xml);
386
- return index;
387
- }
388
-
389
- // =========================================================================
390
- // Fonts
391
- _addFont(font) {
392
- const xml = this.map.font.toXml(font);
393
- let index = this.index.font[xml];
394
- if (index === undefined) {
395
- index = this.index.font[xml] = this.model.fonts.length;
396
- this.model.fonts.push(xml);
397
- }
398
- return index;
399
- }
400
-
401
- // =========================================================================
402
- // Borders
403
- _addBorder(border) {
404
- const xml = this.map.border.toXml(border);
405
- let index = this.index.border[xml];
406
- if (index === undefined) {
407
- index = this.index.border[xml] = this.model.borders.length;
408
- this.model.borders.push(xml);
409
- }
410
- return index;
411
- }
412
-
413
- // =========================================================================
414
- // Fills
415
- _addFill(fill) {
416
- const xml = this.map.fill.toXml(fill);
417
- let index = this.index.fill[xml];
418
- if (index === undefined) {
419
- index = this.index.fill[xml] = this.model.fills.length;
420
- this.model.fills.push(xml);
421
- }
422
- return index;
423
- }
424
-
425
- // =========================================================================
426
- }
427
-
428
- StylesXform.STYLESHEET_ATTRIBUTES = {
429
- xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
430
- 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
431
- 'mc:Ignorable': 'x14ac x16r2',
432
- 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',
433
- 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',
434
- };
435
- StylesXform.STATIC_XFORMS = {
436
- cellStyles: new StaticXform({
437
- tag: 'cellStyles',
438
- $: {count: 1},
439
- c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],
440
- }),
441
- dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),
442
- tableStyles: new StaticXform({
443
- tag: 'tableStyles',
444
- $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},
445
- }),
446
- extLst: new StaticXform({
447
- tag: 'extLst',
448
- c: [
449
- {
450
- tag: 'ext',
451
- $: {
452
- uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',
453
- 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',
454
- },
455
- c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],
456
- },
457
- {
458
- tag: 'ext',
459
- $: {
460
- uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',
461
- 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',
462
- },
463
- c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],
464
- },
465
- ],
466
- }),
467
- };
468
-
469
- // the stylemanager mock acts like StyleManager except that it always returns 0 or {}
470
- class StylesXformMock extends StylesXform {
471
- constructor() {
472
- super();
473
-
474
- this.model = {
475
- styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],
476
- numFmts: [],
477
- fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],
478
- borders: [{}],
479
- fills: [
480
- {type: 'pattern', pattern: 'none'},
481
- {type: 'pattern', pattern: 'gray125'},
482
- ],
483
- };
484
- }
485
-
486
- // =========================================================================
487
- // Style Manager Interface
488
-
489
- // override normal behaviour - consume and dispose
490
- parseStream(stream) {
491
- stream.autodrain();
492
- return Promise.resolve();
493
- }
494
-
495
- // add a cell's style model to the collection
496
- // each style property is processed and cross-referenced, etc.
497
- // the styleId is returned. Note: cellType is used when numFmt not defined
498
- addStyleModel(model, cellType) {
499
- switch (cellType) {
500
- case Enums.ValueType.Date:
501
- return this.dateStyleId;
502
- default:
503
- return 0;
504
- }
505
- }
506
-
507
- get dateStyleId() {
508
- if (!this._dateStyleId) {
509
- const dateStyle = {
510
- numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),
511
- };
512
- this._dateStyleId = this.model.styles.length;
513
- this.model.styles.push(dateStyle);
514
- }
515
- return this._dateStyleId;
516
- }
517
-
518
- // given a styleId (i.e. s="n"), get the cell's style model
519
- // objects are shared where possible.
520
- getStyleModel(/* id */) {
521
- return {};
522
- }
523
- }
524
-
525
- StylesXform.Mock = StylesXformMock;
526
-
527
- module.exports = StylesXform;
1
+ /* eslint-disable max-classes-per-file */
2
+ const Enums = require('../../../doc/enums');
3
+ const XmlStream = require('../../../utils/xml-stream');
4
+
5
+ const BaseXform = require('../base-xform');
6
+ const StaticXform = require('../static-xform');
7
+ const ListXform = require('../list-xform');
8
+ const FontXform = require('./font-xform');
9
+ const FillXform = require('./fill-xform');
10
+ const BorderXform = require('./border-xform');
11
+ const NumFmtXform = require('./numfmt-xform');
12
+ const StyleXform = require('./style-xform');
13
+ const DxfXform = require('./dxf-xform');
14
+
15
+ // custom numfmt ids start here
16
+ const NUMFMT_BASE = 164;
17
+
18
+ // =============================================================================
19
+ // StylesXform is used to generate and parse the styles.xml file
20
+ // it manages the collections of fonts, number formats, alignments, etc
21
+ class StylesXform extends BaseXform {
22
+ constructor(initialise) {
23
+ super();
24
+
25
+ this.map = {
26
+ numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),
27
+ fonts: new ListXform({
28
+ tag: 'fonts',
29
+ count: true,
30
+ childXform: new FontXform(),
31
+ $: {'x14ac:knownFonts': 1},
32
+ }),
33
+ fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),
34
+ borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),
35
+ cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),
36
+ cellXfs: new ListXform({
37
+ tag: 'cellXfs',
38
+ count: true,
39
+ childXform: new StyleXform({xfId: true}),
40
+ }),
41
+ dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),
42
+
43
+ // for style manager
44
+ numFmt: new NumFmtXform(),
45
+ font: new FontXform(),
46
+ fill: new FillXform(),
47
+ border: new BorderXform(),
48
+ style: new StyleXform({xfId: true}),
49
+
50
+ cellStyles: StylesXform.STATIC_XFORMS.cellStyles,
51
+ tableStyles: StylesXform.STATIC_XFORMS.tableStyles,
52
+ extLst: StylesXform.STATIC_XFORMS.extLst,
53
+ };
54
+
55
+ if (initialise) {
56
+ // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing
57
+ this.init();
58
+ }
59
+ }
60
+
61
+ initIndex() {
62
+ this.index = {
63
+ style: {},
64
+ numFmt: {},
65
+ numFmtNextId: 164, // start custom format ids here
66
+ font: {},
67
+ border: {},
68
+ fill: {},
69
+ };
70
+ }
71
+
72
+ init() {
73
+ // Prepare for Style Manager role
74
+ this.model = {
75
+ styles: [],
76
+ numFmts: [],
77
+ fonts: [],
78
+ borders: [],
79
+ fills: [],
80
+ dxfs: [],
81
+ };
82
+
83
+ this.initIndex();
84
+
85
+ // default (zero) border
86
+ this._addBorder({});
87
+
88
+ // add default (all zero) style
89
+ this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});
90
+
91
+ // add default fills
92
+ this._addFill({type: 'pattern', pattern: 'none'});
93
+ this._addFill({type: 'pattern', pattern: 'gray125'});
94
+
95
+ this.weakMap = new WeakMap();
96
+ }
97
+
98
+ render(xmlStream, model) {
99
+ model = model || this.model;
100
+ //
101
+ // <fonts count="2" x14ac:knownFonts="1">
102
+ xmlStream.openXml(XmlStream.StdDocAttributes);
103
+
104
+ xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);
105
+
106
+ if (this.index) {
107
+ // model has been built by style manager role (contains xml)
108
+ if (model.numFmts && model.numFmts.length) {
109
+ xmlStream.openNode('numFmts', {count: model.numFmts.length});
110
+ model.numFmts.forEach(numFmtXml => {
111
+ xmlStream.writeXml(numFmtXml);
112
+ });
113
+ xmlStream.closeNode();
114
+ }
115
+
116
+ if (!model.fonts.length) {
117
+ // default (zero) font
118
+ this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});
119
+ }
120
+ xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});
121
+ model.fonts.forEach(fontXml => {
122
+ xmlStream.writeXml(fontXml);
123
+ });
124
+ xmlStream.closeNode();
125
+
126
+ xmlStream.openNode('fills', {count: model.fills.length});
127
+ model.fills.forEach(fillXml => {
128
+ xmlStream.writeXml(fillXml);
129
+ });
130
+ xmlStream.closeNode();
131
+
132
+ xmlStream.openNode('borders', {count: model.borders.length});
133
+ model.borders.forEach(borderXml => {
134
+ xmlStream.writeXml(borderXml);
135
+ });
136
+ xmlStream.closeNode();
137
+
138
+ this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);
139
+
140
+ xmlStream.openNode('cellXfs', {count: model.styles.length});
141
+ model.styles.forEach(styleXml => {
142
+ xmlStream.writeXml(styleXml);
143
+ });
144
+ xmlStream.closeNode();
145
+ } else {
146
+ // model is plain JSON and needs to be xformed
147
+ this.map.numFmts.render(xmlStream, model.numFmts);
148
+ this.map.fonts.render(xmlStream, model.fonts);
149
+ this.map.fills.render(xmlStream, model.fills);
150
+ this.map.borders.render(xmlStream, model.borders);
151
+ this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);
152
+ this.map.cellXfs.render(xmlStream, model.styles);
153
+ }
154
+
155
+ StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);
156
+
157
+ this.map.dxfs.render(xmlStream, model.dxfs);
158
+
159
+ StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);
160
+ StylesXform.STATIC_XFORMS.extLst.render(xmlStream);
161
+
162
+ xmlStream.closeNode();
163
+ }
164
+
165
+ parseOpen(node) {
166
+ if (this.parser) {
167
+ this.parser.parseOpen(node);
168
+ return true;
169
+ }
170
+ switch (node.name) {
171
+ case 'styleSheet':
172
+ this.initIndex();
173
+ return true;
174
+ default:
175
+ this.parser = this.map[node.name];
176
+ if (this.parser) {
177
+ this.parser.parseOpen(node);
178
+ }
179
+ return true;
180
+ }
181
+ }
182
+
183
+ parseText(text) {
184
+ if (this.parser) {
185
+ this.parser.parseText(text);
186
+ }
187
+ }
188
+
189
+ parseClose(name) {
190
+ if (this.parser) {
191
+ if (!this.parser.parseClose(name)) {
192
+ this.parser = undefined;
193
+ }
194
+ return true;
195
+ }
196
+ switch (name) {
197
+ case 'styleSheet': {
198
+ this.model = {};
199
+ const add = (propName, xform) => {
200
+ if (xform.model && xform.model.length) {
201
+ this.model[propName] = xform.model;
202
+ }
203
+ };
204
+ add('numFmts', this.map.numFmts);
205
+ add('fonts', this.map.fonts);
206
+ add('fills', this.map.fills);
207
+ add('borders', this.map.borders);
208
+ add('styles', this.map.cellXfs);
209
+ add('dxfs', this.map.dxfs);
210
+
211
+ // index numFmts
212
+ this.index = {
213
+ model: [],
214
+ numFmt: [],
215
+ };
216
+ if (this.model.numFmts) {
217
+ const numFmtIndex = this.index.numFmt;
218
+ this.model.numFmts.forEach(numFmt => {
219
+ numFmtIndex[numFmt.id] = numFmt.formatCode;
220
+ });
221
+ }
222
+
223
+ return false;
224
+ }
225
+ default:
226
+ // not quite sure how we get here!
227
+ return true;
228
+ }
229
+ }
230
+
231
+ // add a cell's style model to the collection
232
+ // each style property is processed and cross-referenced, etc.
233
+ // the styleId is returned. Note: cellType is used when numFmt not defined
234
+ addStyleModel(model, cellType) {
235
+ if (!model) {
236
+ return 0;
237
+ }
238
+
239
+ // if we have no default font, add it here now
240
+ if (!this.model.fonts.length) {
241
+ // default (zero) font
242
+ this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});
243
+ }
244
+
245
+ // if we have seen this style object before, assume it has the same styleId
246
+ if (this.weakMap && this.weakMap.has(model)) {
247
+ return this.weakMap.get(model);
248
+ }
249
+
250
+ const style = {};
251
+ cellType = cellType || Enums.ValueType.Number;
252
+
253
+ if (model.numFmt) {
254
+ style.numFmtId = this._addNumFmtStr(model.numFmt);
255
+ } else {
256
+ switch (cellType) {
257
+ case Enums.ValueType.Number:
258
+ style.numFmtId = this._addNumFmtStr('General');
259
+ break;
260
+ case Enums.ValueType.Date:
261
+ style.numFmtId = this._addNumFmtStr('mm-dd-yy');
262
+ break;
263
+ default:
264
+ break;
265
+ }
266
+ }
267
+
268
+ if (model.font) {
269
+ style.fontId = this._addFont(model.font);
270
+ }
271
+
272
+ if (model.border) {
273
+ style.borderId = this._addBorder(model.border);
274
+ }
275
+
276
+ if (model.fill) {
277
+ style.fillId = this._addFill(model.fill);
278
+ }
279
+
280
+ if (model.alignment) {
281
+ style.alignment = model.alignment;
282
+ }
283
+
284
+ if (model.protection) {
285
+ style.protection = model.protection;
286
+ }
287
+
288
+ const styleId = this._addStyle(style);
289
+ if (this.weakMap) {
290
+ this.weakMap.set(model, styleId);
291
+ }
292
+ return styleId;
293
+ }
294
+
295
+ // given a styleId (i.e. s="n"), get the cell's style model
296
+ // objects are shared where possible.
297
+ getStyleModel(id) {
298
+ // if the style doesn't exist return null
299
+ const style = this.model.styles[id];
300
+ if (!style) return null;
301
+
302
+ // have we built this model before?
303
+ let model = this.index.model[id];
304
+ if (model) return model;
305
+
306
+ // build a new model
307
+ model = this.index.model[id] = {};
308
+
309
+ // -------------------------------------------------------
310
+ // number format
311
+ if (style.numFmtId) {
312
+ const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);
313
+ if (numFmt) {
314
+ model.numFmt = numFmt;
315
+ }
316
+ }
317
+
318
+ function addStyle(name, group, styleId) {
319
+ if (styleId || styleId === 0) {
320
+ const part = group[styleId];
321
+ if (part) {
322
+ model[name] = part;
323
+ }
324
+ }
325
+ }
326
+
327
+ addStyle('font', this.model.fonts, style.fontId);
328
+ addStyle('border', this.model.borders, style.borderId);
329
+ addStyle('fill', this.model.fills, style.fillId);
330
+
331
+ // -------------------------------------------------------
332
+ // alignment
333
+ if (style.alignment) {
334
+ model.alignment = style.alignment;
335
+ }
336
+
337
+ // -------------------------------------------------------
338
+ // protection
339
+ if (style.protection) {
340
+ model.protection = style.protection;
341
+ }
342
+
343
+ return model;
344
+ }
345
+
346
+ addDxfStyle(style) {
347
+ if (style.numFmt) {
348
+ // register numFmtId to use it during dxf-xform rendering
349
+ style.numFmtId = this._addNumFmtStr(style.numFmt);
350
+ }
351
+
352
+ this.model.dxfs.push(style);
353
+ return this.model.dxfs.length - 1;
354
+ }
355
+
356
+ getDxfStyle(id) {
357
+ return this.model.dxfs[id];
358
+ }
359
+
360
+ // =========================================================================
361
+ // Private Interface
362
+ _addStyle(style) {
363
+ const xml = this.map.style.toXml(style);
364
+ let index = this.index.style[xml];
365
+ if (index === undefined) {
366
+ index = this.index.style[xml] = this.model.styles.length;
367
+ this.model.styles.push(xml);
368
+ }
369
+ return index;
370
+ }
371
+
372
+ // =========================================================================
373
+ // Number Formats
374
+ _addNumFmtStr(formatCode) {
375
+ // check if default format
376
+ let index = NumFmtXform.getDefaultFmtId(formatCode);
377
+ if (index !== undefined) return index;
378
+
379
+ // check if already in
380
+ index = this.index.numFmt[formatCode];
381
+ if (index !== undefined) return index;
382
+
383
+ index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;
384
+ const xml = this.map.numFmt.toXml({id: index, formatCode});
385
+ this.model.numFmts.push(xml);
386
+ return index;
387
+ }
388
+
389
+ // =========================================================================
390
+ // Fonts
391
+ _addFont(font) {
392
+ const xml = this.map.font.toXml(font);
393
+ let index = this.index.font[xml];
394
+ if (index === undefined) {
395
+ index = this.index.font[xml] = this.model.fonts.length;
396
+ this.model.fonts.push(xml);
397
+ }
398
+ return index;
399
+ }
400
+
401
+ // =========================================================================
402
+ // Borders
403
+ _addBorder(border) {
404
+ const xml = this.map.border.toXml(border);
405
+ let index = this.index.border[xml];
406
+ if (index === undefined) {
407
+ index = this.index.border[xml] = this.model.borders.length;
408
+ this.model.borders.push(xml);
409
+ }
410
+ return index;
411
+ }
412
+
413
+ // =========================================================================
414
+ // Fills
415
+ _addFill(fill) {
416
+ const xml = this.map.fill.toXml(fill);
417
+ let index = this.index.fill[xml];
418
+ if (index === undefined) {
419
+ index = this.index.fill[xml] = this.model.fills.length;
420
+ this.model.fills.push(xml);
421
+ }
422
+ return index;
423
+ }
424
+
425
+ // =========================================================================
426
+ }
427
+
428
+ StylesXform.STYLESHEET_ATTRIBUTES = {
429
+ xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
430
+ 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',
431
+ 'mc:Ignorable': 'x14ac x16r2',
432
+ 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',
433
+ 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',
434
+ };
435
+ StylesXform.STATIC_XFORMS = {
436
+ cellStyles: new StaticXform({
437
+ tag: 'cellStyles',
438
+ $: {count: 1},
439
+ c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],
440
+ }),
441
+ dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),
442
+ tableStyles: new StaticXform({
443
+ tag: 'tableStyles',
444
+ $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},
445
+ }),
446
+ extLst: new StaticXform({
447
+ tag: 'extLst',
448
+ c: [
449
+ {
450
+ tag: 'ext',
451
+ $: {
452
+ uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',
453
+ 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',
454
+ },
455
+ c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],
456
+ },
457
+ {
458
+ tag: 'ext',
459
+ $: {
460
+ uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',
461
+ 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',
462
+ },
463
+ c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],
464
+ },
465
+ ],
466
+ }),
467
+ };
468
+
469
+ // the stylemanager mock acts like StyleManager except that it always returns 0 or {}
470
+ class StylesXformMock extends StylesXform {
471
+ constructor() {
472
+ super();
473
+
474
+ this.model = {
475
+ styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],
476
+ numFmts: [],
477
+ fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],
478
+ borders: [{}],
479
+ fills: [
480
+ {type: 'pattern', pattern: 'none'},
481
+ {type: 'pattern', pattern: 'gray125'},
482
+ ],
483
+ };
484
+ }
485
+
486
+ // =========================================================================
487
+ // Style Manager Interface
488
+
489
+ // override normal behaviour - consume and dispose
490
+ parseStream(stream) {
491
+ stream.autodrain();
492
+ return Promise.resolve();
493
+ }
494
+
495
+ // add a cell's style model to the collection
496
+ // each style property is processed and cross-referenced, etc.
497
+ // the styleId is returned. Note: cellType is used when numFmt not defined
498
+ addStyleModel(model, cellType) {
499
+ switch (cellType) {
500
+ case Enums.ValueType.Date:
501
+ return this.dateStyleId;
502
+ default:
503
+ return 0;
504
+ }
505
+ }
506
+
507
+ get dateStyleId() {
508
+ if (!this._dateStyleId) {
509
+ const dateStyle = {
510
+ numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),
511
+ };
512
+ this._dateStyleId = this.model.styles.length;
513
+ this.model.styles.push(dateStyle);
514
+ }
515
+ return this._dateStyleId;
516
+ }
517
+
518
+ // given a styleId (i.e. s="n"), get the cell's style model
519
+ // objects are shared where possible.
520
+ getStyleModel(/* id */) {
521
+ return {};
522
+ }
523
+ }
524
+
525
+ StylesXform.Mock = StylesXformMock;
526
+
527
+ module.exports = StylesXform;