react-native-nitro-xlsx 0.1.4 → 0.2.6

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 (428) hide show
  1. package/NitroXlsx.podspec +27 -27
  2. package/Package.swift +35 -10
  3. package/README.md +220 -58
  4. package/android/CMakeLists.txt +24 -27
  5. package/android/cpp-adapter.cpp +12 -0
  6. package/android/src/main/java/com/margelo/nitro/xlsx/NitroXlsxPackage.kt +9 -0
  7. package/cpp/HybridNitroXlsx.cpp +25 -179
  8. package/cpp/HybridNitroXlsx.hpp +2 -2
  9. package/cpp/HybridXlsxConditionalFormat.cpp +252 -0
  10. package/cpp/HybridXlsxConditionalFormat.hpp +62 -0
  11. package/cpp/HybridXlsxConditionalFormats.cpp +46 -0
  12. package/cpp/HybridXlsxConditionalFormats.hpp +28 -0
  13. package/cpp/HybridXlsxWorkbook.cpp +159 -196
  14. package/cpp/HybridXlsxWorkbook.hpp +7 -2
  15. package/cpp/HybridXlsxWorksheet.cpp +433 -62
  16. package/cpp/HybridXlsxWorksheet.hpp +73 -26
  17. package/cpp/XlsxCacheDir.cpp +76 -0
  18. package/cpp/XlsxCacheDir.hpp +27 -0
  19. package/cpp/XlsxError.hpp +68 -0
  20. package/cpp/XlsxJson.cpp +185 -0
  21. package/cpp/XlsxJson.hpp +36 -0
  22. package/ios/XlsxCacheDir.mm +60 -0
  23. package/nitrogen/generated/android/NitroXlsx+autolinking.cmake +2 -0
  24. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.hpp +5 -3
  25. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.cpp +54 -0
  26. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.hpp +95 -0
  27. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.cpp +24 -0
  28. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.hpp +68 -0
  29. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp +3 -0
  30. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.hpp +6 -1
  31. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp +47 -19
  32. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.hpp +52 -20
  33. package/package.json +3 -3
  34. package/scripts/run-cpp-tests.sh +14 -0
  35. package/src/__mocks__/react-native-nitro-modules.ts +1 -0
  36. package/src/__tests__/index.test.ts +76 -7
  37. package/src/index.ts +107 -18
  38. package/src/specs/NitroXlsx.nitro.ts +141 -44
  39. package/thirdparty/OpenXLSX/.clang-format +118 -0
  40. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  41. package/thirdparty/OpenXLSX/.gitignore +130 -0
  42. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  43. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  44. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  45. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  46. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  47. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  48. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  49. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  50. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  51. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  52. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  53. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  54. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  55. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  56. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  57. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  58. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  59. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  60. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  61. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  62. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  63. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  64. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  65. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  66. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  67. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  68. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  69. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  70. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  71. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  72. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  73. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  74. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  75. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  76. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  77. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  78. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  79. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  80. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  81. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  82. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  83. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  84. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  123. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  124. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  125. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  126. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  127. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  128. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  129. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  130. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  131. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  132. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  133. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  134. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  135. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  136. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  137. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  138. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  139. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  140. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  141. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  142. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  143. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  144. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  145. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  146. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  147. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  148. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  149. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  150. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  151. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  152. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  153. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  154. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  155. package/thirdparty/OpenXLSX/README.md +1279 -0
  156. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  157. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  158. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  159. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  160. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  161. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  162. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  163. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  164. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  165. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  166. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  167. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  168. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  169. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  170. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  171. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  172. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  173. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  174. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  175. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  176. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  177. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  178. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  179. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  180. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  181. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  182. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  183. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  184. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  185. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  186. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  187. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  188. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  189. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  190. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  191. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  192. package/thirdparty/README.md +42 -0
  193. package/thirdparty/miniz/.clang-format +47 -0
  194. package/thirdparty/miniz/.travis.yml +2 -0
  195. package/thirdparty/miniz/CMakeLists.txt +333 -0
  196. package/thirdparty/miniz/CMakePresets.json +31 -0
  197. package/thirdparty/miniz/ChangeLog.md +272 -0
  198. package/thirdparty/miniz/Config.cmake.in +1 -0
  199. package/thirdparty/miniz/LICENSE +22 -0
  200. package/thirdparty/miniz/amalgamate.sh +57 -0
  201. package/thirdparty/miniz/examples/example1.c +105 -0
  202. package/thirdparty/miniz/examples/example2.c +164 -0
  203. package/thirdparty/miniz/examples/example3.c +269 -0
  204. package/thirdparty/miniz/examples/example4.c +102 -0
  205. package/thirdparty/miniz/examples/example5.c +327 -0
  206. package/thirdparty/miniz/examples/example6.c +189 -0
  207. package/thirdparty/miniz/meson.build +21 -0
  208. package/thirdparty/miniz/miniz.c +646 -0
  209. package/thirdparty/miniz/miniz.h +615 -0
  210. package/thirdparty/miniz/miniz.pc.in +13 -0
  211. package/thirdparty/miniz/miniz_common.h +89 -0
  212. package/thirdparty/miniz/miniz_export.h +20 -0
  213. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  214. package/thirdparty/miniz/miniz_tdef.h +199 -0
  215. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  216. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  217. package/thirdparty/miniz/miniz_zip.c +4895 -0
  218. package/thirdparty/miniz/miniz_zip.h +454 -0
  219. package/thirdparty/miniz/readme.md +46 -0
  220. package/thirdparty/miniz/test.sh +36 -0
  221. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  222. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  223. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  224. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  225. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  226. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  227. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  228. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  229. package/thirdparty/miniz/tests/main.cpp +185 -0
  230. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  231. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  232. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  233. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  234. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  235. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  236. package/thirdparty/miniz/tests/timer.cpp +152 -0
  237. package/thirdparty/miniz/tests/timer.h +40 -0
  238. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  239. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  240. package/thirdparty/miniz/tests/zip.dict +9 -0
  241. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  242. package/thirdparty/pugixml/.codecov.yml +7 -0
  243. package/thirdparty/pugixml/.gitattributes +1 -0
  244. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  245. package/thirdparty/pugixml/LICENSE.md +24 -0
  246. package/thirdparty/pugixml/Makefile +98 -0
  247. package/thirdparty/pugixml/README.md +81 -0
  248. package/thirdparty/pugixml/SECURITY.md +9 -0
  249. package/thirdparty/pugixml/appveyor.yml +50 -0
  250. package/thirdparty/pugixml/docs/config.adoc +7 -0
  251. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  252. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  253. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  254. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  255. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  256. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  257. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  258. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  259. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  260. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  261. package/thirdparty/pugixml/docs/manual.html +6395 -0
  262. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  263. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  264. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  265. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  266. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  267. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  268. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  269. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  270. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  271. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  272. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  273. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  274. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  275. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  276. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  277. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  278. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  279. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  280. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  281. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  282. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  283. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  284. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  285. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  286. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  287. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  288. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  289. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  290. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  291. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  292. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  293. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  294. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  295. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  296. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  297. package/thirdparty/pugixml/readme.txt +50 -0
  298. package/thirdparty/pugixml/scripts/archive.py +54 -0
  299. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  300. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  301. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  302. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  303. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  304. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  305. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  306. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  307. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  308. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  309. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  310. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  311. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  312. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  313. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  314. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  315. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  316. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  317. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  318. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  319. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  320. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  321. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  322. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  323. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  324. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  325. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  326. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  327. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  328. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  329. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  330. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  331. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  332. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  333. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  334. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  335. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  336. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  337. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  338. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  339. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  340. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  341. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  342. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  343. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  344. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  345. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  346. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  347. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  348. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  349. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  350. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  351. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  352. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  353. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  354. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  355. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  356. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  357. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  358. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  359. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  360. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  361. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  362. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  363. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  364. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  365. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  366. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  367. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  368. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  369. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  370. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  371. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  372. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  373. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  374. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  375. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  376. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  377. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  378. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  379. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  380. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  381. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  382. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  383. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  384. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  385. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  386. package/thirdparty/pugixml/tests/main.cpp +218 -0
  387. package/thirdparty/pugixml/tests/test.cpp +220 -0
  388. package/thirdparty/pugixml/tests/test.hpp +175 -0
  389. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  390. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  391. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  392. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  393. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  394. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  395. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  396. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  397. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  398. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  399. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  400. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  401. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  402. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  403. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  404. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  405. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  406. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  407. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  408. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  409. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  410. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  411. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  412. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  413. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  414. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  415. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  416. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  417. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  418. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  419. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  420. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  421. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  422. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  423. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  424. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  425. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  426. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  427. package/ios/dummy.swift +0 -2
  428. package/scripts/prepare-openxlsx.js +0 -109
@@ -0,0 +1,175 @@
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
+ #ifndef OPENXLSX_XLDATETIME_HPP
47
+ #define OPENXLSX_XLDATETIME_HPP
48
+
49
+ #ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
50
+ # pragma warning(push)
51
+ # pragma warning(disable : 4251)
52
+ # pragma warning(disable : 4275)
53
+ #endif // _MSC_VER
54
+
55
+ // ===== External Includes ===== //
56
+ #include <ctime>
57
+
58
+ // ===== OpenXLSX Includes ===== //
59
+ #include "OpenXLSX-Exports.hpp"
60
+ #include "XLException.hpp"
61
+
62
+ // ========== CLASS AND ENUM TYPE DEFINITIONS ========== //
63
+ namespace OpenXLSX
64
+ {
65
+ class OPENXLSX_EXPORT XLDateTime
66
+ {
67
+ public:
68
+ /**
69
+ * @brief Constructor.
70
+ */
71
+ XLDateTime();
72
+
73
+ /**
74
+ * @brief Constructor taking an Excel time point serial number as an argument.
75
+ * @param serial Excel time point serial number.
76
+ */
77
+ explicit XLDateTime(double serial);
78
+
79
+ /**
80
+ * @brief Constructor taking a std::tm struct as an argument.
81
+ * @param timepoint A std::tm struct.
82
+ */
83
+ explicit XLDateTime(const std::tm& timepoint);
84
+
85
+ /**
86
+ * @brief Constructor taking a unixtime format (seconds since 1/1/1970) as an argument.
87
+ * @param unixtime A time_t number.
88
+ */
89
+ explicit XLDateTime(time_t unixtime);
90
+
91
+ /**
92
+ * @brief Copy constructor.
93
+ * @param other Object to be copied.
94
+ */
95
+ XLDateTime(const XLDateTime& other);
96
+
97
+ /**
98
+ * @brief Move constructor.
99
+ * @param other Object to be moved.
100
+ */
101
+ XLDateTime(XLDateTime&& other) noexcept;
102
+
103
+ /**
104
+ * @brief Destructor
105
+ */
106
+ ~XLDateTime();
107
+
108
+ /**
109
+ * @brief Copy assignment operator.
110
+ * @param other Object to be copied.
111
+ * @return Reference to the copied-to object.
112
+ */
113
+ XLDateTime& operator=(const XLDateTime& other);
114
+
115
+ /**
116
+ * @brief Move assignment operator.
117
+ * @param other Object to be moved.
118
+ * @return Reference to the moved-to object.
119
+ */
120
+ XLDateTime& operator=(XLDateTime&& other) noexcept;
121
+
122
+ /**
123
+ * @brief Assignment operator taking an Excel date/time serial number as an argument.
124
+ * @param serial A floating point value with the serial number.
125
+ * @return Reference to the copied-to object.
126
+ */
127
+ XLDateTime& operator=(double serial);
128
+
129
+ /**
130
+ * @brief Assignment operator taking a std::tm object as an argument.
131
+ * @param timepoint std::tm object with the time point
132
+ * @return Reference to the copied-to object.
133
+ */
134
+ XLDateTime& operator=(const std::tm& timepoint);
135
+
136
+ /**
137
+ * @brief Implicit conversion to Excel date/time serial number (any floating point type).
138
+ * @tparam T Type to convert to (any floating point type).
139
+ * @return Excel date/time serial number.
140
+ */
141
+ template<typename T,
142
+ typename = std::enable_if_t<std::is_floating_point_v<T>>>
143
+ operator T() const // NOLINT
144
+ {
145
+ return serial();
146
+ }
147
+
148
+ /**
149
+ * @brief Implicit conversion to std::tm object.
150
+ * @return std::tm object.
151
+ */
152
+ operator std::tm() const; // NOLINT
153
+
154
+ /**
155
+ * @brief Get the date/time in the form of an Excel date/time serial number.
156
+ * @return A double with the serial number.
157
+ */
158
+ double serial() const;
159
+
160
+ /**
161
+ * @brief Get the date/time in the form of a std::tm struct.
162
+ * @return A std::tm struct with the time point.
163
+ */
164
+ std::tm tm() const;
165
+
166
+ private:
167
+ double m_serial { 1.0 }; /**< */
168
+ };
169
+ } // namespace OpenXLSX
170
+
171
+ #ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
172
+ # pragma warning(pop)
173
+ #endif // _MSC_VER
174
+
175
+ #endif // OPENXLSX_XLDATETIME_HPP
@@ -0,0 +1,505 @@
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
+ #ifndef OPENXLSX_XLDOCUMENT_HPP
47
+ #define OPENXLSX_XLDOCUMENT_HPP
48
+
49
+ #ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
50
+ # pragma warning(push)
51
+ # pragma warning(disable : 4251)
52
+ # pragma warning(disable : 4275)
53
+ #endif // _MSC_VER
54
+
55
+ // ===== External Includes ===== //
56
+ #include <algorithm> // std::find_if
57
+ #include <list>
58
+ #include <string>
59
+
60
+ // ===== OpenXLSX Includes ===== //
61
+ #include "IZipArchive.hpp"
62
+ #include "OpenXLSX-Exports.hpp"
63
+ #include "XLCommandQuery.hpp"
64
+ #include "XLComments.hpp"
65
+ #include "XLContentTypes.hpp"
66
+ #include "XLDrawing.hpp"
67
+ #include "XLProperties.hpp"
68
+ #include "XLRelationships.hpp"
69
+ #include "XLSharedStrings.hpp"
70
+ #include "XLStyles.hpp"
71
+ #include "XLTables.hpp"
72
+ #include "XLWorkbook.hpp"
73
+ #include "XLXmlData.hpp"
74
+ #include "XLZipArchive.hpp"
75
+
76
+ namespace OpenXLSX
77
+ {
78
+ extern const unsigned int pugi_parse_settings; // defined in XLDocument.cpp
79
+
80
+ constexpr const bool XLForceOverwrite = true; // readability constant for 2nd parameter of XLDocument::saveAs
81
+ constexpr const bool XLDoNotOverwrite = false; // "
82
+
83
+ /**
84
+ * @brief The XLDocumentProperties class is an enumeration of the possible properties (metadata) that can be set
85
+ * for a XLDocument object (and .xlsx file)
86
+ */
87
+ enum class XLProperty {
88
+ Title,
89
+ Subject,
90
+ Creator,
91
+ Keywords,
92
+ Description,
93
+ LastModifiedBy,
94
+ LastPrinted,
95
+ CreationDate,
96
+ ModificationDate,
97
+ Category,
98
+ Application,
99
+ DocSecurity,
100
+ ScaleCrop,
101
+ Manager,
102
+ Company,
103
+ LinksUpToDate,
104
+ SharedDoc,
105
+ HyperlinkBase,
106
+ HyperlinksChanged,
107
+ AppVersion
108
+ };
109
+
110
+ /**
111
+ * @brief This class encapsulates the concept of an excel file. It is different from the XLWorkbook, in that an
112
+ * XLDocument holds an XLWorkbook together with its metadata, as well as methods for opening,
113
+ * closing and saving the document.\n<b><em>The XLDocument is the entrypoint for clients
114
+ * using the RapidXLSX library.</em></b>
115
+ */
116
+ class OPENXLSX_EXPORT XLDocument final
117
+ {
118
+ //----- Friends
119
+ friend class XLXmlFile;
120
+ friend class XLWorkbook;
121
+ friend class XLSheet;
122
+ friend class XLXmlData;
123
+
124
+ //---------- Public Member Functions
125
+ public:
126
+ /**
127
+ * @brief Constructor. The default constructor with no arguments.
128
+ */
129
+ explicit XLDocument(const IZipArchive& zipArchive = XLZipArchive());
130
+
131
+ /**
132
+ * @brief Constructor. An alternative constructor, taking the path to the .xlsx file as an argument.
133
+ * @param docPath A std::string with the path to the .xlsx file.
134
+ * @param zipArchive
135
+ */
136
+ explicit XLDocument(const std::string& docPath, const IZipArchive& zipArchive = XLZipArchive());
137
+
138
+ /**
139
+ * @brief Copy constructor
140
+ * @param other XLDocument to copy
141
+ * @note Copy constructor explicitly deleted.
142
+ */
143
+ XLDocument(const XLDocument& other) = delete;
144
+
145
+ /**
146
+ * @brief Move constructor
147
+ * @param other XLDocument to construct from
148
+ */
149
+ XLDocument(XLDocument&& other) noexcept;
150
+
151
+ /**
152
+ * @brief Destructor
153
+ */
154
+ ~XLDocument();
155
+
156
+ /**
157
+ * @brief
158
+ * @param other
159
+ * @return
160
+ */
161
+ XLDocument& operator=(const XLDocument& other) = delete;
162
+
163
+ /**
164
+ * @brief move assignment operator
165
+ * @param other
166
+ * @return
167
+ */
168
+ XLDocument& operator=(XLDocument&& other) noexcept;
169
+
170
+ /**
171
+ * @brief ensure that warnings are shown (default setting)
172
+ */
173
+ void showWarnings();
174
+
175
+ /**
176
+ * @brief ensure that warnings are suppressed where this parameter is supported (currently only XLStyles)
177
+ */
178
+ void suppressWarnings();
179
+
180
+ /**
181
+ * @brief Open the .xlsx file with the given path
182
+ * @param fileName The path of the .xlsx file to open
183
+ */
184
+ void open(const std::string& fileName);
185
+
186
+ /**
187
+ * @brief Create a new .xlsx file with the given name.
188
+ * @param fileName The path of the new .xlsx file.
189
+ * @param forceOverwrite If not true (XLForceOverwrite) and fileName exists, create will throw an exception
190
+ * @throw XLException (OpenXLSX failed checks)
191
+ * @throw ZipRuntimeError (zippy failed archive / file access)
192
+ */
193
+ void create(const std::string& fileName, bool forceOverwrite);
194
+
195
+ /**
196
+ * @brief Create a new .xlsx file with the given name. Legacy interface, invokes create( fileName, XLForceOverwrite )
197
+ * @param fileName The path of the new .xlsx file.
198
+ * @deprecated use instead void create(const std::string& fileName, bool forceOverwrite)
199
+ * @warning Overwriting an existing file is retained as legacy behavior, but can lead to data loss!
200
+ */
201
+ [[deprecated]] void create(const std::string& fileName);
202
+
203
+ /**
204
+ * @brief Close the current document
205
+ */
206
+ void close();
207
+
208
+ /**
209
+ * @brief Save the current document using the current filename, overwriting the existing file.
210
+ * @throw XLException (OpenXLSX failed checks)
211
+ * @throw ZipRuntimeError (zippy failed archive / file access)
212
+ */
213
+ void save();
214
+
215
+ /**
216
+ * @brief Save the document with a new name. If a file exists with that name, it will be overwritten.
217
+ * @param fileName The path of the file
218
+ * @param forceOverwrite If not true (XLForceOverwrite) and fileName exists, saveAs will throw an exception
219
+ * @throw XLException (OpenXLSX failed checks)
220
+ * @throw ZipRuntimeError (zippy failed archive / file access)
221
+ */
222
+ void saveAs(const std::string& fileName, bool forceOverwrite);
223
+
224
+ /**
225
+ * @brief Save the document with a new name. Legacy interface, invokes saveAs( fileName, XLForceOverwrite )
226
+ * @param fileName The path of the file
227
+ * @deprecated use instead void saveAs(const std::string& fileName, bool forceOverwrite)
228
+ * @warning Overwriting an existing file is retained as legacy behavior, but can lead to data loss!
229
+ */
230
+ [[deprecated]] void saveAs(const std::string& fileName);
231
+
232
+ /**
233
+ * @brief Get the filename of the current document, e.g. "spreadsheet.xlsx".
234
+ * @return A std::string with the filename.
235
+ * @note 2024-06-03: function can't return as reference to const because filename as a substr of m_filePath can be a temporary
236
+ * @note 2024-07-28: Removed const from return type
237
+ */
238
+ std::string name() const;
239
+
240
+ /**
241
+ * @brief Get the full path of the current document, e.g. "drive/blah/spreadsheet.xlsx"
242
+ * @return A std::string with the path.
243
+ */
244
+ const std::string& path() const;
245
+
246
+ /**
247
+ * @brief Get the underlying workbook object, as a const object.
248
+ * @return A const pointer to the XLWorkbook object.
249
+ */
250
+ XLWorkbook workbook() const;
251
+
252
+ /**
253
+ * @brief Get the requested document property.
254
+ * @param prop The name of the property to get.
255
+ * @return The property as a string
256
+ */
257
+ std::string property(XLProperty prop) const;
258
+
259
+ /**
260
+ * @brief Set a property
261
+ * @param prop The property to set.
262
+ * @param value The getValue of the property, as a string
263
+ */
264
+ void setProperty(XLProperty prop, const std::string& value);
265
+
266
+ /**
267
+ * @brief Delete the property from the document
268
+ * @param theProperty The property to delete from the document
269
+ */
270
+ void deleteProperty(XLProperty theProperty);
271
+
272
+ /**
273
+ * @brief
274
+ * @return
275
+ */
276
+ explicit operator bool() const;
277
+
278
+ /**
279
+ * @brief
280
+ * @return
281
+ */
282
+ bool isOpen() const;
283
+
284
+ /**
285
+ * @brief return a handle on the workbook's styles
286
+ * @return a reference to m_styles
287
+ */
288
+ XLStyles& styles();
289
+
290
+ /**
291
+ * @brief determine whether a worksheet relationships file exists for sheetXmlNo
292
+ * @param sheetXmlNo check for this sheet number # (xl/worksheets/_reals/sheet#.xml.rels)
293
+ * @return true if relationships file exists
294
+ */
295
+ bool hasSheetRelationships(uint16_t sheetXmlNo) const;
296
+
297
+ /**
298
+ * @brief determine whether a worksheet vml drawing file exists for sheetXmlNo
299
+ * @param sheetXmlNo check for this sheet number # (xl/drawings/vmlDrawing#.xml)
300
+ * @return true if vml drawing file exists
301
+ */
302
+ bool hasSheetVmlDrawing(uint16_t sheetXmlNo) const;
303
+
304
+ /**
305
+ * @brief determine whether a worksheet comments file exists for sheetXmlNo
306
+ * @param sheetXmlNo check for this sheet number # (xl/comments#.xml)
307
+ * @return true if comments file exists
308
+ */
309
+ bool hasSheetComments(uint16_t sheetXmlNo) const;
310
+
311
+ /**
312
+ * @brief determine whether a worksheet table(s) file exists for sheetXmlNo
313
+ * @param sheetXmlNo check for this sheet number # (xl/tables/table#.xml)
314
+ * @return true if table(s) file exists
315
+ */
316
+ bool hasSheetTables(uint16_t sheetXmlNo) const;
317
+
318
+ /**
319
+ * @brief fetch the worksheet relationships for sheetXmlNo, create the file if it does not exist
320
+ * @param sheetXmlNo fetch for this sheet #
321
+ * @return an XLRelationships object initialized with the sheet relationships
322
+ */
323
+ XLRelationships sheetRelationships(uint16_t sheetXmlNo);
324
+
325
+ /**
326
+ * @brief fetch the worksheet VML drawing for sheetXmlNo, create the file if it does not exist
327
+ * @param sheetXmlNo fetch for this sheet #
328
+ * @return an XLVmlDrawing object initialized with the sheet drawing
329
+ */
330
+ XLVmlDrawing sheetVmlDrawing(uint16_t sheetXmlNo);
331
+
332
+ /**
333
+ * @brief fetch the worksheet comments for sheetXmlNo, create the file if it does not exist
334
+ * @param sheetXmlNo fetch for this sheet #
335
+ * @return an XLComments object initialized with the sheet comments
336
+ */
337
+ XLComments sheetComments(uint16_t sheetXmlNo);
338
+
339
+ /**
340
+ * @brief fetch the worksheet tables for sheetXmlNo, create the file if it does not exist
341
+ * @param sheetXmlNo fetch for this sheet #
342
+ * @return an XLTables object initialized with the sheet tables
343
+ */
344
+ XLTables sheetTables(uint16_t sheetXmlNo);
345
+
346
+ public:
347
+ /**
348
+ * @brief validate whether sheetName is a valid Excel worksheet name
349
+ * @param sheetName the desired name
350
+ * @param throwOnInvalid (default: false) if true, invalid sheetName will throw exception
351
+ * @return true if sheetName can be used, otherwise false
352
+ */
353
+ bool validateSheetName(std::string sheetName, bool throwOnInvalid = false);
354
+
355
+ /**
356
+ * @brief
357
+ * @param command
358
+ * @return for XLCommandType::SetSheetActive: execution success, otherwise always true
359
+ */
360
+ bool execCommand(const XLCommand& command);
361
+
362
+ /**
363
+ * @brief
364
+ * @param query
365
+ * @return
366
+ */
367
+ XLQuery execQuery(const XLQuery& query) const;
368
+
369
+ /**
370
+ * @brief
371
+ * @param query
372
+ * @return
373
+ */
374
+ XLQuery execQuery(const XLQuery& query);
375
+
376
+ /**
377
+ * @brief configure an alternative XML saving declaration to be used with pugixml
378
+ * @param savingDeclaration An XLXmlSavingDeclaration object with the configuration to use
379
+ * @return
380
+ */
381
+ void setSavingDeclaration(XLXmlSavingDeclaration const& savingDeclaration);
382
+
383
+ /**
384
+ * @brief
385
+ * @return
386
+ */
387
+ const XLSharedStrings& sharedStrings() const { return m_sharedStrings; }
388
+
389
+ /**
390
+ * @brief rewrite the shared strings cache (and update all cells referencing an index from the shared strings), dropping unused strings
391
+ * @note potentially time-intensive (on documents with many strings or many cells referring shared strings)
392
+ */
393
+ void cleanupSharedStrings();
394
+
395
+ //----------------------------------------------------------------------------------------------------------------------
396
+ // Protected Member Functions
397
+ //----------------------------------------------------------------------------------------------------------------------
398
+
399
+ protected:
400
+ /**
401
+ * @brief Get an XML file from the .xlsx archive.
402
+ * @param path The relative path of the file.
403
+ * @return A std::string with the content of the file
404
+ */
405
+ std::string extractXmlFromArchive(const std::string& path);
406
+
407
+ /**
408
+ * @brief fetch the XLXmlData object as stored in m_data, throw XLInternalError if path is not found
409
+ * @param path The relative path of the file.
410
+ * @param doNotThrow if true, will return a nullptr if path is not found
411
+ * @return a pointer to the XLXmlData object stored in m_data (or nullptr, see doNotThrow)
412
+ */
413
+ XLXmlData* getXmlData(const std::string& path, bool doNotThrow = false);
414
+
415
+ /**
416
+ * @brief const overload of getXmlData
417
+ * @param path
418
+ * @param doNotThrow
419
+ * @return
420
+ */
421
+ const XLXmlData* getXmlData(const std::string& path, bool doNotThrow = false) const;
422
+
423
+ /**
424
+ * @brief
425
+ * @param path
426
+ * @return
427
+ */
428
+ bool hasXmlData(const std::string& path) const;
429
+
430
+ //----------------------------------------------------------------------------------------------------------------------
431
+ // Private Member Variables
432
+ //----------------------------------------------------------------------------------------------------------------------
433
+
434
+ private:
435
+ bool m_suppressWarnings {true}; /**< If true, will suppress output of warnings where supported */
436
+
437
+ std::string m_filePath {}; /**< The path to the original file*/
438
+
439
+ XLXmlSavingDeclaration m_xmlSavingDeclaration; /**< The xml saving declaration that will be passed to pugixml before generating the XML output data*/
440
+
441
+ mutable std::list<XLXmlData> m_data {}; /**< */
442
+ mutable std::deque<std::string> m_sharedStringCache {}; /**< */
443
+ mutable XLSharedStrings m_sharedStrings {}; /**< */
444
+
445
+ XLRelationships m_docRelationships {}; /**< A pointer to the document relationships object*/
446
+ XLRelationships m_wbkRelationships {}; /**< A pointer to the document relationships object*/
447
+ XLContentTypes m_contentTypes {}; /**< A pointer to the content types object*/
448
+ XLAppProperties m_appProperties {}; /**< A pointer to the App properties object */
449
+ XLProperties m_coreProperties {}; /**< A pointer to the Core properties object*/
450
+ XLStyles m_styles {}; /**< A pointer to the document styles object*/
451
+ XLWorkbook m_workbook {}; /**< A pointer to the workbook object */
452
+ IZipArchive m_archive {}; /**< */
453
+ };
454
+
455
+
456
+ //----------------------------------------------------------------------------------------------------------------------
457
+ // Global utility functions
458
+ //----------------------------------------------------------------------------------------------------------------------
459
+
460
+ /**
461
+ * @brief Get a hexadecimal representation of size bytes, starting at data
462
+ * @param data A pointer to the data bytes to format
463
+ * @param size The amount of data bytes to format
464
+ * @return A string with the base-16 representation of the data bytes
465
+ * @note 2024-08-18 BUGFIX: replaced char array with std::string, as ISO C++ standard does not permit variable size arrays
466
+ */
467
+ OPENXLSX_EXPORT std::string BinaryAsHexString(const void *data, const size_t size);
468
+
469
+ /**
470
+ * @brief Calculate the two-byte XLSX password hash for password
471
+ * @param password the string to hash
472
+ * @return the two byte value calculated according to the XLSX password hashing algorithm
473
+ */
474
+ OPENXLSX_EXPORT uint16_t ExcelPasswordHash (std::string password);
475
+ /**
476
+ * @brief Same as ExcelPasswordHash but format the output as a 4-digit hexadecimal string
477
+ * @param password the string to hash
478
+ * @return a string that can be stored in OOXML as a password hash
479
+ */
480
+ OPENXLSX_EXPORT std::string ExcelPasswordHashAsString (std::string password);
481
+
482
+ /**
483
+ * @brief eliminate from pathA leading subdirectories shared with pathB and find a path from pathB to pathA destination
484
+ * @param pathA return a relative path to here
485
+ * @param pathB escape this path via "../" until the common branch with pathA is reached
486
+ * @return a string that leads via a relative path from pathA to pathB
487
+ * @throw XLInternalError if pathA and pathB have no common leading (sub)directory
488
+ */
489
+ std::string getPathARelativeToPathB(std::string const& pathA, std::string const& pathB);
490
+
491
+ /**
492
+ * @brief eliminate from path any . and .. subdirectories by ignoring them (.) or escaping to the parent directory (..)
493
+ * @param path the path to normalize in this way
494
+ * @return a normalized path (no longer contains . or .. entries)
495
+ * @throw XLInternalError upon invalid path - e.g. containing "//" or trying to escape via ".." beyond the context of path
496
+ */
497
+ std::string eliminateDotAndDotDotFromPath(const std::string& path);
498
+
499
+ } // namespace OpenXLSX
500
+
501
+ #ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
502
+ # pragma warning(pop)
503
+ #endif // _MSC_VER
504
+
505
+ #endif // OPENXLSX_XLDOCUMENT_HPP