react-native-nitro-xlsx 0.2.5 → 0.2.7

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 (449) hide show
  1. package/NitroXlsx.podspec +26 -27
  2. package/Package.swift +31 -10
  3. package/README.md +21 -9
  4. package/android/CMakeLists.txt +20 -27
  5. package/cpp/HybridNitroXlsx.cpp +25 -1
  6. package/cpp/HybridXlsxCellFormat.cpp +46 -146
  7. package/cpp/HybridXlsxCellFormat.hpp +9 -41
  8. package/cpp/HybridXlsxConditionalFormat.cpp +4 -1
  9. package/cpp/HybridXlsxConditionalFormats.cpp +5 -1
  10. package/cpp/HybridXlsxWorkbook.cpp +38 -8
  11. package/cpp/HybridXlsxWorkbook.hpp +10 -1
  12. package/cpp/HybridXlsxWorksheet.cpp +422 -141
  13. package/cpp/HybridXlsxWorksheet.hpp +4 -1
  14. package/cpp/XlsxCacheDir.cpp +25 -2
  15. package/cpp/XlsxCacheDir.hpp +3 -1
  16. package/cpp/XlsxCellStyle.hpp +360 -0
  17. package/cpp/XlsxJson.cpp +29 -8
  18. package/package.json +2 -2
  19. package/scripts/run-cpp-tests.sh +1 -1
  20. package/scripts/sync-openxlsx-headers.sh +34 -0
  21. package/src/__mocks__/react-native-nitro-modules.ts +523 -20
  22. package/src/__tests__/index.test.ts +124 -16
  23. package/src/index.ts +13 -13
  24. package/thirdparty/OpenXLSX/.clang-format +118 -0
  25. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  26. package/thirdparty/OpenXLSX/.gitignore +130 -0
  27. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  28. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  29. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  30. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  31. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  32. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  33. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  34. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  35. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  36. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  37. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  38. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  39. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  40. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  41. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  42. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  43. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  44. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  45. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  46. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  47. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  48. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  49. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  50. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  51. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  52. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  53. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  54. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  55. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  56. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  57. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  58. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  59. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  60. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  61. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  62. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  63. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  64. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  65. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  66. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  67. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  68. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  69. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  70. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  71. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  72. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  73. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  74. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  75. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  76. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/IZipArchive.hpp +361 -0
  77. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/OpenXLSX-Exports.hpp +12 -0
  78. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCell.hpp +367 -0
  79. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellIterator.hpp +252 -0
  80. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellRange.hpp +223 -0
  81. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellReference.hpp +317 -0
  82. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellValue.hpp +793 -0
  83. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColor.hpp +232 -0
  84. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColumn.hpp +159 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCommandQuery.hpp +228 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLComments.hpp +270 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLConstants.hpp +18 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLContentTypes.hpp +264 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDateTime.hpp +175 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDocument.hpp +505 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDrawing.hpp +452 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLException.hpp +161 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLFormula.hpp +375 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLIterator.hpp +40 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLMergeCells.hpp +216 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLProperties.hpp +348 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRelationships.hpp +348 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRow.hpp +721 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRowData.hpp +488 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSharedStrings.hpp +204 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSheet.hpp +1640 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLStyles.hpp +2390 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLTables.hpp +132 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLWorkbook.hpp +404 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlData.hpp +283 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlFile.hpp +194 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParser.hpp +282 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParserForwardDeclarations.hpp +85 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLZipArchive.hpp +232 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/LibZip.hpp +447 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/OpenXLSXFileSystemTools.hpp +207 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/Zippy.hpp +1375 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  123. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  124. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  125. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  126. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  127. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  128. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  129. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  130. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  131. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  132. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  133. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  134. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  135. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  136. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  137. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  138. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  139. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  140. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  141. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  142. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  143. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  144. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  145. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  146. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  147. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  148. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  149. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  150. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  151. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  152. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  153. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  154. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  155. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  156. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  157. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  158. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  159. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  160. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  161. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  162. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  163. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  164. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  165. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  166. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  167. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  168. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  169. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  170. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  171. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  172. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  173. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  174. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  175. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  176. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  177. package/thirdparty/OpenXLSX/README.md +1279 -0
  178. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  179. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  180. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  181. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  182. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  183. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  184. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  185. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  186. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  187. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  188. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  189. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  190. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  191. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  192. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  193. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  194. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  195. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  196. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  197. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  198. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  199. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  200. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  201. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  202. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  203. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  204. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  205. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  206. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  207. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  208. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  209. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  210. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  211. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  212. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  213. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  214. package/thirdparty/README.md +46 -0
  215. package/thirdparty/miniz/.clang-format +47 -0
  216. package/thirdparty/miniz/.travis.yml +2 -0
  217. package/thirdparty/miniz/CMakeLists.txt +333 -0
  218. package/thirdparty/miniz/CMakePresets.json +31 -0
  219. package/thirdparty/miniz/ChangeLog.md +272 -0
  220. package/thirdparty/miniz/Config.cmake.in +1 -0
  221. package/thirdparty/miniz/LICENSE +22 -0
  222. package/thirdparty/miniz/amalgamate.sh +57 -0
  223. package/thirdparty/miniz/examples/example1.c +105 -0
  224. package/thirdparty/miniz/examples/example2.c +164 -0
  225. package/thirdparty/miniz/examples/example3.c +269 -0
  226. package/thirdparty/miniz/examples/example4.c +102 -0
  227. package/thirdparty/miniz/examples/example5.c +327 -0
  228. package/thirdparty/miniz/examples/example6.c +189 -0
  229. package/thirdparty/miniz/meson.build +21 -0
  230. package/thirdparty/miniz/miniz.c +646 -0
  231. package/thirdparty/miniz/miniz.h +615 -0
  232. package/thirdparty/miniz/miniz.pc.in +13 -0
  233. package/thirdparty/miniz/miniz_common.h +89 -0
  234. package/thirdparty/miniz/miniz_export.h +20 -0
  235. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  236. package/thirdparty/miniz/miniz_tdef.h +199 -0
  237. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  238. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  239. package/thirdparty/miniz/miniz_zip.c +4895 -0
  240. package/thirdparty/miniz/miniz_zip.h +454 -0
  241. package/thirdparty/miniz/readme.md +46 -0
  242. package/thirdparty/miniz/test.sh +36 -0
  243. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  244. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  245. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  246. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  247. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  248. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  249. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  250. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  251. package/thirdparty/miniz/tests/main.cpp +185 -0
  252. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  253. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  254. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  255. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  256. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  257. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  258. package/thirdparty/miniz/tests/timer.cpp +152 -0
  259. package/thirdparty/miniz/tests/timer.h +40 -0
  260. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  261. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  262. package/thirdparty/miniz/tests/zip.dict +9 -0
  263. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  264. package/thirdparty/pugixml/.codecov.yml +7 -0
  265. package/thirdparty/pugixml/.gitattributes +1 -0
  266. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  267. package/thirdparty/pugixml/LICENSE.md +24 -0
  268. package/thirdparty/pugixml/Makefile +98 -0
  269. package/thirdparty/pugixml/README.md +81 -0
  270. package/thirdparty/pugixml/SECURITY.md +9 -0
  271. package/thirdparty/pugixml/appveyor.yml +50 -0
  272. package/thirdparty/pugixml/docs/config.adoc +7 -0
  273. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  274. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  275. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  276. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  277. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  278. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  279. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  280. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  281. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  282. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  283. package/thirdparty/pugixml/docs/manual.html +6395 -0
  284. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  285. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  286. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  287. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  288. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  289. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  290. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  291. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  292. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  293. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  294. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  295. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  296. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  297. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  298. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  299. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  300. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  301. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  302. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  303. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  304. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  305. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  306. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  307. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  308. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  309. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  310. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  311. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  312. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  313. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  314. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  315. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  316. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  317. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  318. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  319. package/thirdparty/pugixml/readme.txt +50 -0
  320. package/thirdparty/pugixml/scripts/archive.py +54 -0
  321. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  322. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  323. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  324. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  325. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  326. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  327. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  328. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  329. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  330. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  331. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  332. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  333. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  334. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  335. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  336. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  337. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  338. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  339. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  340. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  341. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  342. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  343. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  344. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  345. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  346. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  347. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  348. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  349. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  350. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  351. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  352. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  353. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  354. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  355. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  356. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  357. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  358. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  359. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  360. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  361. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  362. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  363. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  364. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  365. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  366. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  367. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  368. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  369. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  370. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  371. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  372. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  373. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  374. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  375. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  376. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  377. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  378. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  379. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  380. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  381. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  382. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  383. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  384. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  385. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  386. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  387. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  388. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  389. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  390. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  391. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  392. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  393. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  394. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  395. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  396. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  397. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  398. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  399. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  400. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  401. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  402. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  403. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  404. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  405. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  406. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  407. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  408. package/thirdparty/pugixml/tests/main.cpp +218 -0
  409. package/thirdparty/pugixml/tests/test.cpp +220 -0
  410. package/thirdparty/pugixml/tests/test.hpp +175 -0
  411. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  412. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  413. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  414. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  415. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  416. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  417. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  418. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  419. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  420. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  421. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  422. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  423. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  424. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  425. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  426. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  427. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  428. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  429. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  430. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  431. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  432. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  433. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  434. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  435. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  436. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  437. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  438. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  439. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  440. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  441. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  442. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  443. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  444. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  445. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  446. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  447. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  448. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  449. package/scripts/prepare-openxlsx.js +0 -126
@@ -0,0 +1,329 @@
1
+ /*
2
+
3
+ ____ ____ ___ ____ ____ ____ ___
4
+ 6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
5
+ 8P Y8 `MM. d' MM 6M' ` `MM. d'
6
+ 6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
7
+ MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
8
+ MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
9
+ MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
10
+ MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
11
+ YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
12
+ 8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
13
+ YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
14
+ MM
15
+ MM
16
+ _MM_
17
+
18
+ Copyright (c) 2018, Kenneth Troldal Balslev
19
+
20
+ All rights reserved.
21
+
22
+ Redistribution and use in source and binary forms, with or without
23
+ modification, are permitted provided that the following conditions are met:
24
+ - Redistributions of source code must retain the above copyright
25
+ notice, this list of conditions and the following disclaimer.
26
+ - Redistributions in binary form must reproduce the above copyright
27
+ notice, this list of conditions and the following disclaimer in the
28
+ documentation and/or other materials provided with the distribution.
29
+ - Neither the name of the author nor the
30
+ names of any contributors may be used to endorse or promote products
31
+ derived from this software without specific prior written permission.
32
+
33
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
34
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
37
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
+
44
+ */
45
+
46
+ // ===== External Includes ===== //
47
+ #include <cstring>
48
+
49
+ // ===== OpenXLSX Includes ===== //
50
+ #include "XLContentTypes.hpp"
51
+ #include "XLDocument.hpp"
52
+ #include "XLException.hpp"
53
+ #include "XLXmlParser.hpp" // pugixml wrapper
54
+
55
+ using namespace OpenXLSX;
56
+
57
+ namespace { // anonymous namespace for local functions
58
+
59
+ const std::string applicationOpenXmlOfficeDocument = "application/vnd.openxmlformats-officedocument";
60
+ const std::string applicationOpenXmlPackage = "application/vnd.openxmlformats-package";
61
+ const std::string applicationMicrosoftExcel = "application/vnd.ms-excel";
62
+ const std::string applicationMicrosoftOffice = "application/vnd.ms-office";
63
+
64
+ /**
65
+ * @details
66
+ * @note 2024-08-31: In line with a change to hardcoded XML relationship domains in XLRelationships.cpp, replaced the repeating
67
+ * hardcoded strings here with the above declared constants, preparing a potential need for a similar "dumb" fallback implementation
68
+ */
69
+ XLContentType GetContentTypeFromString(const std::string& typeString)
70
+ {
71
+ XLContentType type { XLContentType::Unknown };
72
+
73
+ if (typeString == applicationMicrosoftExcel + ".sheet.macroEnabled.main+xml")
74
+ type = XLContentType::WorkbookMacroEnabled;
75
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.sheet.main+xml")
76
+ type = XLContentType::Workbook;
77
+ else if (typeString == applicationOpenXmlPackage + ".relationships+xml")
78
+ type = XLContentType::Relationships;
79
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.worksheet+xml")
80
+ type = XLContentType::Worksheet;
81
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.chartsheet+xml")
82
+ type = XLContentType::Chartsheet;
83
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.externalLink+xml")
84
+ type = XLContentType::ExternalLink;
85
+ else if (typeString == applicationOpenXmlOfficeDocument + ".theme+xml")
86
+ type = XLContentType::Theme;
87
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.styles+xml")
88
+ type = XLContentType::Styles;
89
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.sharedStrings+xml")
90
+ type = XLContentType::SharedStrings;
91
+ else if (typeString == applicationOpenXmlOfficeDocument + ".drawing+xml")
92
+ type = XLContentType::Drawing;
93
+ else if (typeString == applicationOpenXmlOfficeDocument + ".drawingml.chart+xml")
94
+ type = XLContentType::Chart;
95
+ else if (typeString == applicationMicrosoftOffice + ".chartstyle+xml")
96
+ type = XLContentType::ChartStyle;
97
+ else if (typeString == applicationMicrosoftOffice + ".chartcolorstyle+xml")
98
+ type = XLContentType::ChartColorStyle;
99
+ else if (typeString == applicationMicrosoftExcel + ".controlproperties+xml")
100
+ type = XLContentType::ControlProperties;
101
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.calcChain+xml")
102
+ type = XLContentType::CalculationChain;
103
+ else if (typeString == applicationMicrosoftOffice + ".vbaProject")
104
+ type = XLContentType::VBAProject;
105
+ else if (typeString == applicationOpenXmlPackage + ".core-properties+xml")
106
+ type = XLContentType::CoreProperties;
107
+ else if (typeString == applicationOpenXmlOfficeDocument + ".extended-properties+xml")
108
+ type = XLContentType::ExtendedProperties;
109
+ else if (typeString == applicationOpenXmlOfficeDocument + ".custom-properties+xml")
110
+ type = XLContentType::CustomProperties;
111
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.comments+xml")
112
+ type = XLContentType::Comments;
113
+ else if (typeString == applicationOpenXmlOfficeDocument + ".spreadsheetml.table+xml")
114
+ type = XLContentType::Table;
115
+ else if (typeString == applicationOpenXmlOfficeDocument + ".vmlDrawing")
116
+ type = XLContentType::VMLDrawing;
117
+ else
118
+ type = XLContentType::Unknown;
119
+
120
+ return type;
121
+ }
122
+
123
+ /**
124
+ * @details
125
+ */
126
+ std::string GetStringFromType(XLContentType type)
127
+ {
128
+ std::string typeString;
129
+
130
+ if (type == XLContentType::WorkbookMacroEnabled)
131
+ typeString = applicationMicrosoftExcel + ".sheet.macroEnabled.main+xml";
132
+ else if (type == XLContentType::Workbook)
133
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.sheet.main+xml";
134
+ else if (type == XLContentType::Relationships)
135
+ typeString = applicationOpenXmlPackage + ".relationships+xml";
136
+ else if (type == XLContentType::Worksheet)
137
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.worksheet+xml";
138
+ else if (type == XLContentType::Chartsheet)
139
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.chartsheet+xml";
140
+ else if (type == XLContentType::ExternalLink)
141
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.externalLink+xml";
142
+ else if (type == XLContentType::Theme)
143
+ typeString = applicationOpenXmlOfficeDocument + ".theme+xml";
144
+ else if (type == XLContentType::Styles)
145
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.styles+xml";
146
+ else if (type == XLContentType::SharedStrings)
147
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.sharedStrings+xml";
148
+ else if (type == XLContentType::Drawing)
149
+ typeString = applicationOpenXmlOfficeDocument + ".drawing+xml";
150
+ else if (type == XLContentType::Chart)
151
+ typeString = applicationOpenXmlOfficeDocument + ".drawingml.chart+xml";
152
+ else if (type == XLContentType::ChartStyle)
153
+ typeString = applicationMicrosoftOffice + ".chartstyle+xml";
154
+ else if (type == XLContentType::ChartColorStyle)
155
+ typeString = applicationMicrosoftOffice + ".chartcolorstyle+xml";
156
+ else if (type == XLContentType::ControlProperties)
157
+ typeString = applicationMicrosoftExcel + ".controlproperties+xml";
158
+ else if (type == XLContentType::CalculationChain)
159
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.calcChain+xml";
160
+ else if (type == XLContentType::VBAProject)
161
+ typeString = applicationMicrosoftOffice + ".vbaProject";
162
+ else if (type == XLContentType::CoreProperties)
163
+ typeString = applicationOpenXmlPackage + ".core-properties+xml";
164
+ else if (type == XLContentType::ExtendedProperties)
165
+ typeString = applicationOpenXmlOfficeDocument + ".extended-properties+xml";
166
+ else if (type == XLContentType::CustomProperties)
167
+ typeString = applicationOpenXmlOfficeDocument + ".custom-properties+xml";
168
+ else if (type == XLContentType::Comments)
169
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.comments+xml";
170
+ else if (type == XLContentType::Table)
171
+ typeString = applicationOpenXmlOfficeDocument + ".spreadsheetml.table+xml";
172
+ else if (type == XLContentType::VMLDrawing)
173
+ typeString = applicationOpenXmlOfficeDocument + ".vmlDrawing";
174
+ else
175
+ throw XLInternalError("Unknown ContentType");
176
+
177
+ return typeString;
178
+ }
179
+ } // anonymous namespace
180
+
181
+ /**
182
+ * @details
183
+ */
184
+ XLContentItem::XLContentItem() : m_contentNode(std::make_unique<XMLNode>()) {}
185
+
186
+ /**
187
+ * @details
188
+ */
189
+ XLContentItem::XLContentItem(const XMLNode& node) : m_contentNode(std::make_unique<XMLNode>(node)) {}
190
+
191
+ /**
192
+ * @details
193
+ */
194
+ XLContentItem::XLContentItem(const XLContentItem& other) : m_contentNode(std::make_unique<XMLNode>(*other.m_contentNode)) {}
195
+
196
+ /**
197
+ * @details
198
+ */
199
+ XLContentItem::XLContentItem(XLContentItem&& other) noexcept = default;
200
+
201
+ /**
202
+ * @details
203
+ */
204
+ XLContentItem::~XLContentItem() = default;
205
+
206
+ /**
207
+ * @details
208
+ */
209
+ XLContentItem& XLContentItem::operator=(const XLContentItem& other)
210
+ {
211
+ if (&other != this) *m_contentNode = *other.m_contentNode;
212
+ return *this;
213
+ }
214
+
215
+ XLContentItem& XLContentItem::operator=(XLContentItem&& other) noexcept = default;
216
+
217
+ /**
218
+ * @details
219
+ */
220
+ XLContentType XLContentItem::type() const { return GetContentTypeFromString(m_contentNode->attribute("ContentType").value()); }
221
+
222
+ /**
223
+ * @details
224
+ */
225
+ std::string XLContentItem::path() const { return m_contentNode->attribute("PartName").value(); }
226
+
227
+ /**
228
+ * @details
229
+ */
230
+ XLContentTypes::XLContentTypes() = default;
231
+
232
+ /**
233
+ * @details
234
+ */
235
+ XLContentTypes::XLContentTypes(XLXmlData* xmlData) : XLXmlFile(xmlData) {}
236
+
237
+ /**
238
+ * @details explicit default destructor
239
+ */
240
+ XLContentTypes::~XLContentTypes() = default;
241
+
242
+ /**
243
+ * @details explicit default copy constructor - invokes base class copy constructor
244
+ */
245
+ XLContentTypes::XLContentTypes(const XLContentTypes& other) = default;
246
+
247
+ /**
248
+ * @details
249
+ */
250
+ XLContentTypes::XLContentTypes(XLContentTypes&& other) noexcept = default;
251
+
252
+ /**
253
+ * @details explicit default copy assignment operator - invokes base class copy assignment
254
+ */
255
+ XLContentTypes& XLContentTypes::operator=(const XLContentTypes& other) = default;
256
+
257
+ /**
258
+ * @details explicit default move assignment operator - invokes base class move assignment
259
+ */
260
+ XLContentTypes& XLContentTypes::operator=(XLContentTypes&& other) noexcept = default;
261
+
262
+ /**
263
+ * @details
264
+ * @note 2024-07-22: added more intelligent whitespace support
265
+ */
266
+ void XLContentTypes::addOverride(const std::string& path, XLContentType type)
267
+ {
268
+ const std::string typeString = GetStringFromType(type);
269
+
270
+ XMLNode lastOverride = xmlDocument().document_element().last_child_of_type(pugi::node_element); // see if there's a last element
271
+ XMLNode node{}; // scope declaration
272
+
273
+ // Create new node in the [Content_Types].xml file
274
+ if (lastOverride.empty())
275
+ node = xmlDocument().document_element().prepend_child("Override");
276
+ else { // if last element found
277
+ // ===== Insert node after previous override
278
+ node = xmlDocument().document_element().insert_child_after("Override", lastOverride);
279
+
280
+ // ===== Using whitespace nodes prior to lastOverride as a template, insert whitespaces between lastOverride and the new node
281
+ XMLNode copyWhitespaceFrom = lastOverride; // start looking for whitespace nodes before previous override
282
+ XMLNode insertBefore = node; // start inserting the same whitespace nodes before new override
283
+ while (copyWhitespaceFrom.previous_sibling().type() == pugi::node_pcdata) { // empty node returns pugi::node_null
284
+ // Advance to previous "template" whitespace node, ensured to exist in while-condition
285
+ copyWhitespaceFrom = copyWhitespaceFrom.previous_sibling();
286
+ // ===== Insert a whitespace node
287
+ insertBefore = xmlDocument().document_element().insert_child_before(pugi::node_pcdata, insertBefore);
288
+ insertBefore.set_value(copyWhitespaceFrom.value()); // copy the a whitespace in sequence node value
289
+ }
290
+ }
291
+ node.append_attribute("PartName").set_value(path.c_str());
292
+ node.append_attribute("ContentType").set_value(typeString.c_str());
293
+ }
294
+
295
+ /**
296
+ * @details
297
+ */
298
+ void XLContentTypes::deleteOverride(const std::string& path)
299
+ {
300
+ xmlDocument().document_element().remove_child(xmlDocument().document_element().find_child_by_attribute("PartName", path.c_str()));
301
+ }
302
+
303
+ /**
304
+ * @details
305
+ */
306
+ void XLContentTypes::deleteOverride(const XLContentItem& item) { deleteOverride(item.path()); }
307
+
308
+ /**
309
+ * @details
310
+ */
311
+ XLContentItem XLContentTypes::contentItem(const std::string& path)
312
+ {
313
+ return XLContentItem(xmlDocument().document_element().find_child_by_attribute("PartName", path.c_str()));
314
+ }
315
+
316
+ /**
317
+ * @details
318
+ */
319
+ std::vector<XLContentItem> XLContentTypes::getContentItems()
320
+ {
321
+ std::vector<XLContentItem> result;
322
+ XMLNode item = xmlDocument().document_element().first_child_of_type(pugi::node_element);
323
+ while (not item.empty()) {
324
+ if (strcmp(item.name(), "Override") == 0) result.emplace_back(item);
325
+ item = item.next_sibling_of_type(pugi::node_element);
326
+ }
327
+
328
+ return result;
329
+ }
@@ -0,0 +1,269 @@
1
+ //
2
+ // Created by Kenneth Balslev on 28/08/2021.
3
+ //
4
+
5
+ #include "XLDateTime.hpp"
6
+ #include "XLException.hpp"
7
+
8
+ #include <cmath>
9
+ #include <cstdint> // int32_t
10
+
11
+ namespace
12
+ {
13
+
14
+ /**
15
+ * @brief
16
+ * @param year
17
+ * @return
18
+ */
19
+ bool isLeapYear(int year)
20
+ {
21
+ if (year == 1900) return true; // historical Excel Date error inherited from older spreadsheet apps
22
+ if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return true;
23
+ return false;
24
+ }
25
+
26
+ /**
27
+ * @brief
28
+ * @param month
29
+ * @param year
30
+ * @return
31
+ */
32
+ int daysInMonth(int month, int year)
33
+ {
34
+ switch (month) {
35
+ case 1:
36
+ return 31;
37
+ case 2:
38
+ return (isLeapYear(year) ? 29 : 28);
39
+ case 3:
40
+ return 31;
41
+ case 4:
42
+ return 30;
43
+ case 5:
44
+ return 31;
45
+ case 6:
46
+ return 30;
47
+ case 7:
48
+ return 31;
49
+ case 8:
50
+ return 31;
51
+ case 9:
52
+ return 30;
53
+ case 10:
54
+ return 31;
55
+ case 11:
56
+ return 30;
57
+ case 12:
58
+ return 31;
59
+ default:
60
+ return 0;
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @brief
66
+ * @param serial
67
+ * @return
68
+ */
69
+ int dayOfWeek(double serial)
70
+ {
71
+ const auto day = static_cast<int32_t>(serial) % 7;
72
+ return (day == 0 ? 6 : day - 1);
73
+ }
74
+
75
+ } // namespace
76
+
77
+ namespace OpenXLSX
78
+ {
79
+ /**
80
+ * @details Conctructor. Default implementation.
81
+ */
82
+ XLDateTime::XLDateTime() = default;
83
+
84
+ /**
85
+ * @details Constructor taking an Excel date/time serial number as an argument.
86
+ */
87
+ XLDateTime::XLDateTime(double serial) : m_serial(serial)
88
+ {
89
+ if (serial < 1.0) throw XLDateTimeError("Excel date/time serial number is invalid (must be >= 1.0.)"); // don't permit dates before 1900-01-01T00:00:00.000
90
+ }
91
+
92
+ /**
93
+ * @details Constructor taking a std::tm object as an argument.
94
+ */
95
+ XLDateTime::XLDateTime(const std::tm& timepoint)
96
+ {
97
+ // ===== Check validity of tm struct.
98
+ // ===== Only year, month and day of the month are checked. Other variables are ignored.
99
+ if (timepoint.tm_year < 0) throw XLDateTimeError("Invalid year. Must be >= 0.");
100
+ if (timepoint.tm_mon < 0 || timepoint.tm_mon > 11) throw XLDateTimeError("Invalid month. Must be >= 0 or <= 11.");
101
+ if (timepoint.tm_mday <= 0 || timepoint.tm_mday > daysInMonth(timepoint.tm_mon + 1, timepoint.tm_year + 1900))
102
+ throw XLDateTimeError("Invalid day. Must be >= 1 or <= total days in the month.");
103
+
104
+ // ===== Count the number of days for full years past 1900
105
+ for (int i = 0; i < timepoint.tm_year; ++i) {
106
+ m_serial += (isLeapYear(1900 + i) ? 366 : 365);
107
+ }
108
+
109
+ // ===== Count the number of days for full months of the last year
110
+ for (int i = 0; i < timepoint.tm_mon; ++i) {
111
+ m_serial += daysInMonth(i + 1, timepoint.tm_year + 1900);
112
+ }
113
+
114
+ // ===== Add the number of days of the month, minus one.
115
+ // ===== (The reason for the 'minus one' is that unlike the other fields in the struct,
116
+ // ===== tm_day represents the date of a month, whereas the other fields typically
117
+ // ===== represents the number of whole units since the start).
118
+ m_serial += timepoint.tm_mday - 1;
119
+
120
+ // ===== Convert hour, minute and second to fraction of a full day.
121
+ const int32_t seconds = timepoint.tm_hour * 3600 + timepoint.tm_min * 60 + timepoint.tm_sec;
122
+ m_serial += seconds / 86400.0;
123
+ }
124
+
125
+ /**
126
+ * @details Constructor taking a unixtime format (seconds since 1/1/1970) as an argument.
127
+ */
128
+ XLDateTime::XLDateTime(time_t unixtime)
129
+ {
130
+ // There are 86400 seconds in a day
131
+ // There are 25569 days between 1/1/1970 and 30/12/1899 (the epoch used by Excel)
132
+ m_serial = ( static_cast<double>(unixtime) / 86400 ) + 25569;
133
+ }
134
+
135
+ /**
136
+ * @details Copy constructor. Default implementation.
137
+ */
138
+ XLDateTime::XLDateTime(const XLDateTime& other) = default;
139
+
140
+ /**
141
+ * @details Move constructor. Default implementation.
142
+ */
143
+ XLDateTime::XLDateTime(XLDateTime&& other) noexcept = default;
144
+
145
+ /**
146
+ * @details Destructor. Default implementation.
147
+ */
148
+ XLDateTime::~XLDateTime() = default;
149
+
150
+ /**
151
+ * @details Copy assignment operator. Default implementation.
152
+ */
153
+ XLDateTime& XLDateTime::operator=(const XLDateTime& other) = default;
154
+
155
+ /**
156
+ * @details Move assignment operator. Default implementation.
157
+ */
158
+ XLDateTime& XLDateTime::operator=(XLDateTime&& other) noexcept = default;
159
+
160
+ /**
161
+ * @details
162
+ */
163
+ XLDateTime& XLDateTime::operator=(double serial)
164
+ {
165
+ XLDateTime temp(serial);
166
+ std::swap(*this, temp);
167
+ return *this;
168
+ }
169
+
170
+ /**
171
+ * @details
172
+ */
173
+ XLDateTime& XLDateTime::operator=(const std::tm& timepoint)
174
+ {
175
+ XLDateTime temp(timepoint);
176
+ std::swap(*this, temp);
177
+ return *this;
178
+ }
179
+
180
+ /**
181
+ * @details
182
+ */
183
+ XLDateTime::operator std::tm() const { return tm(); }
184
+
185
+ /**
186
+ * @details Get the time point as an Excel date/time serial number.
187
+ */
188
+ double XLDateTime::serial() const { return m_serial; }
189
+
190
+ /**
191
+ * @details Get the time point as a std::tm object.
192
+ */
193
+ std::tm XLDateTime::tm() const
194
+ {
195
+ // ===== Create and initialize the resulting object.
196
+ std::tm result {};
197
+ result.tm_year = 0;
198
+ result.tm_mon = 0;
199
+ result.tm_mday = 0;
200
+ result.tm_wday = 0;
201
+ result.tm_yday = 0;
202
+ result.tm_hour = 0;
203
+ result.tm_min = 0;
204
+ result.tm_sec = 0;
205
+ result.tm_isdst = -1;
206
+ double serial = m_serial;
207
+
208
+ // ===== Count the number of whole years since 1900.
209
+ while (serial > 1) { // 2025-01-10: safeguard against infinite loop (preemptive)
210
+ const int days = (isLeapYear(result.tm_year + 1900) ? 366 : 365);
211
+ if (days + 1 > serial) break; // 2025-01-10: BUGFIX: break on days + 1 > serial (was days >= serial) to account for fractions
212
+ serial -= days;
213
+ ++result.tm_year;
214
+ }
215
+
216
+ // ===== Calculate the day of the year, and the day of the week
217
+ result.tm_yday = static_cast<int>(serial) - 1;
218
+ result.tm_wday = dayOfWeek(m_serial);
219
+
220
+ // ===== Count the number of whole months in the year.
221
+ while (result.tm_mon < 11) { // 2025-01-10 BUGFIX: break on December to prevent infinite loop after adjusted bugfix below
222
+ int days = daysInMonth(result.tm_mon + 1, 1900 + result.tm_year);
223
+ if (days + 1 > serial) break; // 2025-01-10: BUGFIX: break on days + 1 > serial (was days >= serial) to account for fractions
224
+ serial -= days;
225
+ ++result.tm_mon;
226
+ }
227
+
228
+ // ===== Calculate the number of days.
229
+ result.tm_mday = static_cast<int>(serial);
230
+ serial -= result.tm_mday;
231
+
232
+ // ===== Calculate the number of hours.
233
+ result.tm_hour = static_cast<int>(serial * 24);
234
+ serial -= (result.tm_hour / 24.0);
235
+
236
+ // ===== Calculate the number of minutes.
237
+ result.tm_min = static_cast<int>(serial * 24 * 60);
238
+ serial -= (result.tm_min / (24.0 * 60.0));
239
+
240
+ // ===== Calculate the number of seconds.
241
+ result.tm_sec = static_cast<int>(lround(serial * 24 * 60 * 60));
242
+
243
+ // ===== BEGIN: pass rounded overflow back up the date components. BUGFIX 2025-01-10: added this overflow handling to address issue #138
244
+ if (result.tm_sec >= 60) {
245
+ result.tm_sec -= 60;
246
+ ++result.tm_min;
247
+ if (result.tm_min >= 60) {
248
+ result.tm_min -= 60;
249
+ ++result.tm_hour;
250
+ if (result.tm_hour >= 24) {
251
+ result.tm_hour -= 24;
252
+ ++result.tm_mday;
253
+ int days = daysInMonth(result.tm_mon + 1, 1900 + result.tm_year);
254
+ if (result.tm_mday >= days) {
255
+ result.tm_mday -= days;
256
+ ++result.tm_mon;
257
+ if (result.tm_mon >= 12) {
258
+ result.tm_mon -= 12;
259
+ ++result.tm_year;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ } // END: pass rounded overflow back up the date components
265
+
266
+ return result;
267
+ }
268
+
269
+ } // namespace OpenXLSX