react-native-nitro-xlsx 0.2.5 → 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 (395) hide show
  1. package/NitroXlsx.podspec +26 -27
  2. package/Package.swift +31 -10
  3. package/README.md +1 -1
  4. package/android/CMakeLists.txt +20 -27
  5. package/package.json +2 -2
  6. package/scripts/run-cpp-tests.sh +1 -1
  7. package/thirdparty/OpenXLSX/.clang-format +118 -0
  8. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  9. package/thirdparty/OpenXLSX/.gitignore +130 -0
  10. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  11. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  12. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  13. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  14. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  15. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  16. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  17. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  18. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  19. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  20. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  21. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  22. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  23. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  24. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  25. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  26. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  27. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  28. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  29. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  30. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  31. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  32. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  33. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  34. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  35. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  36. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  37. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  38. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  39. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  40. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  41. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  42. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  43. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  44. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  45. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  46. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  47. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  48. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  49. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  50. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  51. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  52. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  53. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  54. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  55. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  56. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  57. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  58. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  59. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  60. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  61. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  62. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  63. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  64. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  65. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  66. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  67. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  68. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  69. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  70. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  71. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  72. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  73. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  74. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  75. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  76. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  77. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  78. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  79. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  80. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  81. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  82. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  83. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  84. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  123. package/thirdparty/OpenXLSX/README.md +1279 -0
  124. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  125. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  126. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  127. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  128. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  129. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  130. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  131. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  132. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  133. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  134. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  135. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  136. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  137. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  138. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  139. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  140. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  141. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  142. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  143. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  144. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  145. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  146. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  147. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  148. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  149. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  150. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  151. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  152. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  153. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  154. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  155. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  156. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  157. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  158. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  159. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  160. package/thirdparty/README.md +42 -0
  161. package/thirdparty/miniz/.clang-format +47 -0
  162. package/thirdparty/miniz/.travis.yml +2 -0
  163. package/thirdparty/miniz/CMakeLists.txt +333 -0
  164. package/thirdparty/miniz/CMakePresets.json +31 -0
  165. package/thirdparty/miniz/ChangeLog.md +272 -0
  166. package/thirdparty/miniz/Config.cmake.in +1 -0
  167. package/thirdparty/miniz/LICENSE +22 -0
  168. package/thirdparty/miniz/amalgamate.sh +57 -0
  169. package/thirdparty/miniz/examples/example1.c +105 -0
  170. package/thirdparty/miniz/examples/example2.c +164 -0
  171. package/thirdparty/miniz/examples/example3.c +269 -0
  172. package/thirdparty/miniz/examples/example4.c +102 -0
  173. package/thirdparty/miniz/examples/example5.c +327 -0
  174. package/thirdparty/miniz/examples/example6.c +189 -0
  175. package/thirdparty/miniz/meson.build +21 -0
  176. package/thirdparty/miniz/miniz.c +646 -0
  177. package/thirdparty/miniz/miniz.h +615 -0
  178. package/thirdparty/miniz/miniz.pc.in +13 -0
  179. package/thirdparty/miniz/miniz_common.h +89 -0
  180. package/thirdparty/miniz/miniz_export.h +20 -0
  181. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  182. package/thirdparty/miniz/miniz_tdef.h +199 -0
  183. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  184. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  185. package/thirdparty/miniz/miniz_zip.c +4895 -0
  186. package/thirdparty/miniz/miniz_zip.h +454 -0
  187. package/thirdparty/miniz/readme.md +46 -0
  188. package/thirdparty/miniz/test.sh +36 -0
  189. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  190. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  191. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  192. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  193. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  194. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  195. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  196. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  197. package/thirdparty/miniz/tests/main.cpp +185 -0
  198. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  199. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  200. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  201. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  202. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  203. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  204. package/thirdparty/miniz/tests/timer.cpp +152 -0
  205. package/thirdparty/miniz/tests/timer.h +40 -0
  206. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  207. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  208. package/thirdparty/miniz/tests/zip.dict +9 -0
  209. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  210. package/thirdparty/pugixml/.codecov.yml +7 -0
  211. package/thirdparty/pugixml/.gitattributes +1 -0
  212. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  213. package/thirdparty/pugixml/LICENSE.md +24 -0
  214. package/thirdparty/pugixml/Makefile +98 -0
  215. package/thirdparty/pugixml/README.md +81 -0
  216. package/thirdparty/pugixml/SECURITY.md +9 -0
  217. package/thirdparty/pugixml/appveyor.yml +50 -0
  218. package/thirdparty/pugixml/docs/config.adoc +7 -0
  219. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  220. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  221. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  222. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  223. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  224. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  225. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  226. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  227. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  228. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  229. package/thirdparty/pugixml/docs/manual.html +6395 -0
  230. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  231. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  232. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  233. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  234. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  235. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  236. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  237. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  238. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  239. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  240. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  241. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  242. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  243. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  244. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  245. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  246. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  247. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  248. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  249. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  250. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  251. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  252. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  253. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  254. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  255. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  256. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  257. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  258. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  259. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  260. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  261. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  262. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  263. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  264. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  265. package/thirdparty/pugixml/readme.txt +50 -0
  266. package/thirdparty/pugixml/scripts/archive.py +54 -0
  267. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  268. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  269. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  270. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  271. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  272. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  273. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  274. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  275. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  276. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  277. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  278. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  279. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  280. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  281. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  282. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  283. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  284. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  285. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  286. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  287. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  288. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  289. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  290. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  291. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  292. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  293. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  294. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  295. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  296. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  297. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  298. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  299. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  300. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  301. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  302. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  303. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  304. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  305. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  306. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  307. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  308. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  309. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  310. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  311. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  312. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  313. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  314. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  315. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  316. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  317. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  318. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  319. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  320. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  321. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  322. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  323. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  324. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  325. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  326. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  327. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  328. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  329. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  330. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  331. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  332. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  333. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  334. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  335. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  336. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  337. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  338. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  339. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  340. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  341. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  342. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  343. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  344. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  345. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  346. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  347. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  348. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  349. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  350. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  351. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  352. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  353. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  354. package/thirdparty/pugixml/tests/main.cpp +218 -0
  355. package/thirdparty/pugixml/tests/test.cpp +220 -0
  356. package/thirdparty/pugixml/tests/test.hpp +175 -0
  357. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  358. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  359. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  360. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  361. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  362. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  363. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  364. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  365. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  366. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  367. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  368. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  369. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  370. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  371. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  372. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  373. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  374. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  375. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  376. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  377. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  378. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  379. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  380. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  381. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  382. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  383. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  384. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  385. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  386. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  387. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  388. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  389. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  390. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  391. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  392. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  393. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  394. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  395. package/scripts/prepare-openxlsx.js +0 -126
@@ -0,0 +1,793 @@
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_XLCELLVALUE_HPP
47
+ #define OPENXLSX_XLCELLVALUE_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 <cmath>
57
+ #include <cstdint>
58
+ #include <iostream> // std::ostream
59
+ #include <string> // std::hash, also defined in <variant>
60
+ #include <variant> // std::variant
61
+
62
+ // ===== OpenXLSX Includes ===== //
63
+ #include "OpenXLSX-Exports.hpp"
64
+ #include "XLDateTime.hpp"
65
+ #include "XLException.hpp"
66
+ #include "XLXmlParserForwardDeclarations.hpp"
67
+
68
+ typedef std::variant<std::string, int64_t, double, bool>
69
+ XLCellValueType; // TBD: typedef std::variant< std::string, int64_t, double, bool, struct timestamp > XLCellValueType;
70
+
71
+ // ========== CLASS AND ENUM TYPE DEFINITIONS ========== //
72
+ namespace OpenXLSX
73
+ {
74
+ //---------- Forward Declarations ----------//
75
+ class XLCellValueProxy;
76
+ class XLCell;
77
+
78
+ /**
79
+ * @brief Enum defining the valid value types for a an Excel spreadsheet cell.
80
+ */
81
+ enum class XLValueType { Empty, Boolean, Integer, Float, Error, String };
82
+
83
+ //---------- Private Struct to enable XLValueType conversion to double ---------- //
84
+ struct VisitXLCellValueTypeToDouble
85
+ {
86
+ std::string packageName = "VisitXLCellValueTypeToDouble";
87
+ double operator()(int64_t v) const { return v; }
88
+ double operator()(double v) const { return v; }
89
+ double operator()(bool v) const { return v; }
90
+ // double operator()( struct timestamp v ) { /* to be implemented if this type ever gets supported */ }
91
+ double operator()(std::string v) const {
92
+ throw XLValueTypeError("string is not convertible to double."); // disable if implicit conversion of string to double shall be allowed
93
+ size_t pos;
94
+ double dVal = stod(v, &pos);
95
+ while (v[ pos ] == ' ' || v[ pos ] == '\t') ++pos; // skip over potential trailing whitespaces
96
+ // NOTE: std::string zero-termination is guaranteed, so the above loop will halt
97
+ if (pos != v.length())
98
+ throw XLValueTypeError("string is not convertible to double."); // throw if the *full value* does not convert to double
99
+ return dVal;
100
+ }
101
+ };
102
+
103
+ //---------- Private Struct to enable XLValueType conversion to std::string ---------- //
104
+ struct VisitXLCellValueTypeToString
105
+ {
106
+ std::string packageName = "VisitXLCellValueTypeToString";
107
+ std::string operator()(int64_t v) const { return std::to_string(v); }
108
+ std::string operator()(double v) const { return std::to_string(v); }
109
+ std::string operator()(bool v) const { return v ? "true" : "false"; }
110
+ // std::string operator()( struct timestamp v ) { return timestampString( v.seconds, v.microseconds, WITH_MS ); }
111
+ std::string operator()(std::string v) const { return v; }
112
+ };
113
+
114
+ /**
115
+ * @brief Class encapsulating a cell value.
116
+ */
117
+ class OPENXLSX_EXPORT XLCellValue
118
+ {
119
+ //---------- Friend Declarations ----------//
120
+ friend class XLCellValueProxy; // to allow access to m_value
121
+
122
+ // TODO: Consider template functions to compare to ints, floats etc.
123
+ friend bool operator==(const XLCellValue& lhs, const XLCellValue& rhs);
124
+ friend bool operator!=(const XLCellValue& lhs, const XLCellValue& rhs);
125
+ friend bool operator<(const XLCellValue& lhs, const XLCellValue& rhs);
126
+ friend bool operator>(const XLCellValue& lhs, const XLCellValue& rhs);
127
+ friend bool operator<=(const XLCellValue& lhs, const XLCellValue& rhs);
128
+ friend bool operator>=(const XLCellValue& lhs, const XLCellValue& rhs);
129
+ friend std::ostream& operator<<(std::ostream& os, const XLCellValue& value);
130
+ friend std::hash<OpenXLSX::XLCellValue>;
131
+
132
+ public:
133
+ //---------- Public Member Functions ----------//
134
+
135
+ /**
136
+ * @brief Default constructor
137
+ */
138
+ XLCellValue();
139
+
140
+ /**
141
+ * @brief A templated constructor. Any value convertible to a valid cell value can be used as argument.
142
+ * @tparam T The type of the argument (will be automatically deduced).
143
+ * @param value The value.
144
+ * @todo Consider changing the enable_if statement to check for objects with a .c_str() member function.
145
+ */
146
+ template<typename T,
147
+ typename = std::enable_if_t<
148
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
149
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
150
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
151
+ XLCellValue(T value) // NOLINT
152
+ {
153
+ // ===== If the argument is a bool, set the m_type attribute to Boolean.
154
+ if constexpr (std::is_integral_v<T> && std::is_same_v<T, bool>) {
155
+ m_type = XLValueType::Boolean;
156
+ m_value = value;
157
+ }
158
+
159
+ // ===== If the argument is an integral type, set the m_type attribute to Integer.
160
+ else if constexpr (std::is_integral_v<T> && !std::is_same_v<T, bool>) {
161
+ m_type = XLValueType::Integer;
162
+ m_value = static_cast<int64_t>(value);
163
+ }
164
+
165
+ // ===== If the argument is a string type (i.e. is constructable from *char),
166
+ // ===== set the m_type attribute to String.
167
+ else if constexpr (std::is_same_v<std::decay_t<T>, std::string> || std::is_same_v<std::decay_t<T>, std::string_view> ||
168
+ std::is_same_v<std::decay_t<T>, const char*> ||
169
+ (std::is_same_v<std::decay_t<T>, char*> && !std::is_same_v<T, bool>))
170
+ {
171
+ m_type = XLValueType::String;
172
+ m_value = std::string(value);
173
+ }
174
+
175
+ // ===== If the argument is an XLDateTime, set the value to the date/time serial number.
176
+ else if constexpr (std::is_same_v<T, XLDateTime>) {
177
+ m_type = XLValueType::Float;
178
+ m_value = value.serial();
179
+ }
180
+
181
+ // ===== If the argument is a floating point type, set the m_type attribute to Float.
182
+ // ===== If not, a static_assert will result in compilation error.
183
+ else {
184
+ static_assert(std::is_floating_point_v<T>, "Invalid argument for constructing XLCellValue object");
185
+ if (std::isfinite(value)) {
186
+ m_type = XLValueType::Float;
187
+ m_value = static_cast<double>(value);
188
+ }
189
+ else {
190
+ m_type = XLValueType::Error;
191
+ m_value = std::string("#NUM!");
192
+ }
193
+ }
194
+ }
195
+
196
+ /**
197
+ * @brief Copy constructor.
198
+ * @param other The object to be copied.
199
+ */
200
+ XLCellValue(const XLCellValue& other);
201
+
202
+ /**
203
+ * @brief Move constructor.
204
+ * @param other The object to be moved.
205
+ */
206
+ XLCellValue(XLCellValue&& other) noexcept;
207
+
208
+ /**
209
+ * @brief Destructor
210
+ */
211
+ ~XLCellValue();
212
+
213
+ /**
214
+ * @brief Copy assignment operator.
215
+ * @param other Object to be copied.
216
+ * @return Reference to the copied-to object.
217
+ */
218
+ XLCellValue& operator=(const XLCellValue& other);
219
+
220
+ /**
221
+ * @brief Move assignment operator.
222
+ * @param other Object to be moved.
223
+ * @return Reference to the moved-to object.
224
+ */
225
+ XLCellValue& operator=(XLCellValue&& other) noexcept;
226
+
227
+ /**
228
+ * @brief Templated assignment operator.
229
+ * @tparam T The type of the value argument.
230
+ * @param value The value.
231
+ * @return A reference to the assigned-to object.
232
+ */
233
+ template<typename T,
234
+ typename = std::enable_if_t<
235
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
236
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
237
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
238
+ XLCellValue& operator=(T value)
239
+ {
240
+ // ===== Implemented using copy-and-swap.
241
+ XLCellValue temp(value);
242
+ std::swap(*this, temp);
243
+ return *this;
244
+ }
245
+
246
+ /**
247
+ * @brief Templated setter for integral and bool types.
248
+ * @tparam T The type of the value argument.
249
+ * @param numberValue The value
250
+ */
251
+ template<
252
+ typename T,
253
+ typename = std::enable_if_t<std::is_same_v<T, XLCellValue> || std::is_integral_v<T> || std::is_floating_point_v<T> ||
254
+ std::is_same_v<std::decay_t<T>, std::string> || std::is_same_v<std::decay_t<T>, std::string_view> ||
255
+ std::is_same_v<std::decay_t<T>, const char*> || std::is_same_v<std::decay_t<T>, char*> ||
256
+ std::is_same_v<T, XLDateTime>>>
257
+ void set(T numberValue)
258
+ {
259
+ // ===== Implemented using the assignment operator.
260
+ *this = numberValue;
261
+ }
262
+
263
+ /**
264
+ * @brief Templated getter.
265
+ * @tparam T The type of the value to be returned.
266
+ * @return The value as a type T object.
267
+ * @throws XLValueTypeError if the XLCellValue object does not contain a compatible type.
268
+ */
269
+ template<typename T,
270
+ typename = std::enable_if_t<
271
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
272
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
273
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
274
+ T get() const
275
+ {
276
+ try {
277
+ // BUGFIX 2025-01-10: can not return const char* of a temporary object - use a static variable as workaround
278
+ // CAUTION: This is not thread-safe and this template return type really shouldn't be used.
279
+ // Accordingly, an exception should be thrown in the future
280
+ if constexpr (std::is_same_v<std::decay_t<T>, std::string_view> ||
281
+ std::is_same_v<std::decay_t<T>, const char*> ||
282
+ (std::is_same_v<std::decay_t<T>, char*> && !std::is_same_v<T, bool>)) {
283
+ // throw XLValueTypeError("(temporary) XLCellValue should not be requested as a reference type (string_view, (const) char*) - please fetch std::string");
284
+ static std::string s = std::get<std::string>(m_value);
285
+ return s.c_str();
286
+ }
287
+ // for all other template types, use the private getter:
288
+ return privateGet<T>();
289
+ }
290
+
291
+ catch (const std::bad_variant_access&) {
292
+ throw XLValueTypeError("XLCellValue object does not contain the requested type.");
293
+ }
294
+ }
295
+
296
+ private:
297
+ /**
298
+ * @brief private templated getter - only to be used by functions that know for certain that *this is valid until the return value has been used
299
+ * @tparam T The type of the value to be returned.
300
+ * @return The value as a type T object.
301
+ * @throws XLValueTypeError if the XLCellValue object does not contain a compatible type.
302
+ */
303
+ template<typename T,
304
+ typename = std::enable_if_t<
305
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
306
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
307
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
308
+ T privateGet() const
309
+ {
310
+ try {
311
+ if constexpr (std::is_integral_v<T> && std::is_same_v<T, bool>) return std::get<bool>(m_value);
312
+
313
+ if constexpr (std::is_integral_v<T> && !std::is_same_v<T, bool>) return static_cast<T>(std::get<int64_t>(m_value));
314
+
315
+ if constexpr (std::is_floating_point_v<T>) {
316
+ return static_cast<T>(getDouble()); // 2025-01-10: allow implicit conversion of int and bool to double (string conversion disabled for now)
317
+ // if (m_type == XLValueType::Error) return static_cast<T>(std::nan("1"));
318
+ // return static_cast<T>(std::get<double>(m_value));
319
+ }
320
+
321
+ if constexpr (std::is_same_v<std::decay_t<T>, std::string> || std::is_same_v<std::decay_t<T>, std::string_view> ||
322
+ std::is_same_v<std::decay_t<T>, const char*> ||
323
+ (std::is_same_v<std::decay_t<T>, char*> && !std::is_same_v<T, bool>))
324
+ return std::get<std::string>(m_value).c_str();
325
+
326
+ if constexpr (std::is_same_v<T, XLDateTime>)
327
+ return XLDateTime(getDouble()); // 2025-01-10: allow implicit conversion of int and bool to double (string conversion disabled for now)
328
+ }
329
+
330
+ catch (const std::bad_variant_access&) {
331
+ throw XLValueTypeError("XLCellValue object does not contain the requested type.");
332
+ }
333
+ }
334
+ public:
335
+
336
+ /**
337
+ * @brief get the cell value as a double, regardless of value type
338
+ * @return A double representation of value
339
+ * @throws XLValueTypeError if the XLCellValue object is not convertible to double.
340
+ */
341
+ double getDouble() const {
342
+ if (m_type == XLValueType::Error) return static_cast<double>(std::nan("1"));
343
+ try {
344
+ return std::visit(VisitXLCellValueTypeToDouble(), m_value);
345
+ }
346
+ catch (...) {
347
+ throw XLValueTypeError("XLCellValue object is not convertible to double.");
348
+ }
349
+ }
350
+
351
+ /**
352
+ * @brief get the cell value as a std::string, regardless of value type
353
+ * @return A std::string representation of value
354
+ * @throws XLValueTypeError if the XLCellValue object is not convertible to string.
355
+ */
356
+ std::string getString() // pull request #158 is covered by this
357
+ {
358
+ try {
359
+ return std::visit(VisitXLCellValueTypeToString(), m_value);
360
+ }
361
+ catch (...) { // 2024-05-27: was catch( string s ) - must have been a typo, currently nothing throws a string here
362
+ throw XLValueTypeError("XLCellValue object is not convertible to string.");
363
+ }
364
+ }
365
+
366
+ /**
367
+ * @brief get the cell value as a std::variant of XLCellValueType
368
+ * @return a const reference to m_value
369
+ */
370
+ const XLCellValueType& getVariant() const // pull request #127
371
+ {
372
+ return m_value;
373
+ }
374
+
375
+ /**
376
+ * @brief Explicit conversion operator for easy conversion to supported types.
377
+ * @tparam T The type to cast to.
378
+ * @return The XLCellValue object cast to requested type.
379
+ * @throws XLValueTypeError if the XLCellValue object does not contain a compatible type.
380
+ */
381
+ template<typename T,
382
+ typename = std::enable_if_t<
383
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
384
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
385
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
386
+ operator T() const
387
+ {
388
+ return this->get<T>();
389
+ }
390
+
391
+ /**
392
+ * @brief Clears the contents of the XLCellValue object.
393
+ * @return Returns a reference to the current object.
394
+ */
395
+ XLCellValue& clear();
396
+
397
+ /**
398
+ * @brief Sets the value type to XLValueType::Error.
399
+ * @return Returns a reference to the current object.
400
+ */
401
+ XLCellValue& setError(const std::string& error);
402
+
403
+ /**
404
+ * @brief Get the value type of the current object.
405
+ * @return An XLValueType for the current object.
406
+ */
407
+ XLValueType type() const;
408
+
409
+ /**
410
+ * @brief Get the value type of the current object, as a string representation
411
+ * @return A std::string representation of the value type.
412
+ */
413
+ std::string typeAsString() const;
414
+
415
+ private:
416
+ //---------- Private Member Variables ---------- //
417
+
418
+ XLCellValueType m_value { std::string("") }; /**< The value contained in the cell. */
419
+ XLValueType m_type { XLValueType::Empty }; /**< The value type of the cell. */
420
+ };
421
+
422
+ /**
423
+ * @brief The XLCellValueProxy class is used for proxy (or placeholder) objects for XLCellValue objects.
424
+ * @details The purpose is to enable implicit conversion during assignment operations. XLCellValueProxy objects
425
+ * can not be constructed manually by the user, only through XLCell objects.
426
+ */
427
+ class OPENXLSX_EXPORT XLCellValueProxy
428
+ {
429
+ friend class XLCell;
430
+ friend class XLCellValue;
431
+ friend class XLDocument; // for reindexing shared strings
432
+
433
+ public:
434
+ //---------- Public Member Functions ----------//
435
+
436
+ /**
437
+ * @brief Destructor
438
+ */
439
+ ~XLCellValueProxy();
440
+
441
+ /**
442
+ * @brief Copy assignment operator.
443
+ * @param other XLCellValueProxy object to be copied.
444
+ * @return A reference to the current object.
445
+ */
446
+ XLCellValueProxy& operator=(const XLCellValueProxy& other);
447
+
448
+ /**
449
+ * @brief Templated assignment operator
450
+ * @tparam T The type of numberValue assigned to the object.
451
+ * @param value The value.
452
+ * @return A reference to the current object.
453
+ */
454
+ template<typename T,
455
+ typename = std::enable_if_t<
456
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
457
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
458
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLCellValue> || std::is_same_v<T, XLDateTime>>>
459
+ XLCellValueProxy& operator=(T value)
460
+ { // NOLINT
461
+
462
+ if constexpr (std::is_integral_v<T> && std::is_same_v<T, bool>) // if bool
463
+ setBoolean(value);
464
+
465
+ else if constexpr (std::is_integral_v<T> && !std::is_same_v<T, bool>) // if integer
466
+ setInteger(value);
467
+
468
+ else if constexpr (std::is_floating_point_v<T>) // if floating point
469
+ setFloat(value);
470
+
471
+ else if constexpr (std::is_same_v<T, XLDateTime>)
472
+ setFloat(value.serial());
473
+
474
+ else if constexpr (std::is_same_v<std::decay_t<T>, std::string> || std::is_same_v<std::decay_t<T>, std::string_view> ||
475
+ std::is_same_v<std::decay_t<T>, const char*> ||
476
+ (std::is_same_v<std::decay_t<T>, char*> && !std::is_same_v<T, bool> && !std::is_same_v<T, XLCellValue>))
477
+ {
478
+ if constexpr (std::is_same_v<std::decay_t<T>, const char*> || std::is_same_v<std::decay_t<T>, char*>)
479
+ setString(value);
480
+ else if constexpr (std::is_same_v<std::decay_t<T>, std::string_view>)
481
+ setString(std::string(value).c_str());
482
+ else
483
+ setString(value.c_str());
484
+ }
485
+
486
+ if constexpr (std::is_same_v<T, XLCellValue>) {
487
+ switch (value.type()) {
488
+ case XLValueType::Boolean:
489
+ setBoolean(value.template get<bool>());
490
+ break;
491
+ case XLValueType::Integer:
492
+ setInteger(value.template get<int64_t>());
493
+ break;
494
+ case XLValueType::Float:
495
+ setFloat(value.template get<double>());
496
+ break;
497
+ case XLValueType::String:
498
+ setString(value.template privateGet<const char*>());
499
+ break;
500
+ case XLValueType::Empty:
501
+ clear();
502
+ break;
503
+ default:
504
+ setError("#N/A");
505
+ break;
506
+ }
507
+ }
508
+
509
+ return *this;
510
+ }
511
+
512
+ /**
513
+ * @brief
514
+ * @tparam T
515
+ * @param value
516
+ */
517
+ template<typename T,
518
+ typename = std::enable_if_t<
519
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
520
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
521
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLCellValue> || std::is_same_v<T, XLDateTime>>>
522
+ void set(T value)
523
+ {
524
+ *this = value;
525
+ }
526
+
527
+ /**
528
+ * @brief
529
+ * @tparam T
530
+ * @return
531
+ * @todo Is an explicit conversion operator needed as well?
532
+ */
533
+ template<typename T,
534
+ typename = std::enable_if_t<
535
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
536
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
537
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
538
+ T get() const
539
+ {
540
+ return getValue().get<T>();
541
+ }
542
+
543
+ /**
544
+ * @brief Clear the contents of the cell.
545
+ * @return A reference to the current object.
546
+ */
547
+ XLCellValueProxy& clear();
548
+
549
+ /**
550
+ * @brief Set the cell value to a error state.
551
+ * @return A reference to the current object.
552
+ */
553
+ XLCellValueProxy& setError(const std::string& error);
554
+
555
+ /**
556
+ * @brief Get the value type for the cell.
557
+ * @return An XLCellValue corresponding to the cell value.
558
+ */
559
+ XLValueType type() const;
560
+
561
+ /**
562
+ * @brief Get the value type of the current object, as a string representation
563
+ * @return A std::string representation of the value type.
564
+ */
565
+ std::string typeAsString() const;
566
+
567
+ /**
568
+ * @brief Implicitly convert the XLCellValueProxy object to a XLCellValue object.
569
+ * @return An XLCellValue object, corresponding to the cell value.
570
+ */
571
+ operator XLCellValue() const; // NOLINT
572
+
573
+ /**
574
+ * @brief
575
+ * @tparam T
576
+ * @return
577
+ */
578
+ template<typename T,
579
+ typename = std::enable_if_t<
580
+ std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_same_v<std::decay_t<T>, std::string> ||
581
+ std::is_same_v<std::decay_t<T>, std::string_view> || std::is_same_v<std::decay_t<T>, const char*> ||
582
+ std::is_same_v<std::decay_t<T>, char*> || std::is_same_v<T, XLDateTime>>>
583
+ operator T() const
584
+ {
585
+ return getValue().get<T>();
586
+ }
587
+
588
+ /**
589
+ * @brief get the cell value as a std::string, regardless of value type
590
+ * @return A std::string representation of value
591
+ * @throws XLValueTypeError if the XLCellValue object is not convertible to string.
592
+ */
593
+ std::string getString() const // pull request #158 is covered by this
594
+ {
595
+ try {
596
+ return std::visit(VisitXLCellValueTypeToString(), getValue().m_value);
597
+ }
598
+ catch (std::string s) {
599
+ throw XLValueTypeError("XLCellValue object is not convertible to string.");
600
+ }
601
+ }
602
+
603
+ private:
604
+ //---------- Private Member Functions ---------- //
605
+
606
+ /**
607
+ * @brief Constructor
608
+ * @param cell Pointer to the parent XLCell object.
609
+ * @param cellNode Pointer to the corresponding XMLNode object.
610
+ */
611
+ XLCellValueProxy(XLCell* cell, XMLNode* cellNode);
612
+
613
+ /**
614
+ * @brief Copy constructor
615
+ * @param other Object to be copied.
616
+ */
617
+ XLCellValueProxy(const XLCellValueProxy& other);
618
+
619
+ /**
620
+ * @brief Move constructor
621
+ * @param other Object to be moved.
622
+ */
623
+ XLCellValueProxy(XLCellValueProxy&& other) noexcept;
624
+
625
+ /**
626
+ * @brief Move assignment operator
627
+ * @param other Object to be moved
628
+ * @return Reference to moved-to pbject.
629
+ */
630
+ XLCellValueProxy& operator=(XLCellValueProxy&& other) noexcept;
631
+
632
+ /**
633
+ * @brief Set cell to an integer value.
634
+ * @param numberValue The value to be set.
635
+ */
636
+ void setInteger(int64_t numberValue);
637
+
638
+ /**
639
+ * @brief Set the cell to a bool value.
640
+ * @param numberValue The value to be set.
641
+ */
642
+ void setBoolean(bool numberValue);
643
+
644
+ /**
645
+ * @brief Set the cell to a floating point value.
646
+ * @param numberValue The value to be set.
647
+ */
648
+ void setFloat(double numberValue);
649
+
650
+ /**
651
+ * @brief Set the cell to a string value.
652
+ * @param stringValue The value to be set.
653
+ */
654
+ void setString(const char* stringValue);
655
+
656
+ /**
657
+ * @brief Get a copy of the XLCellValue object for the cell.
658
+ * @return An XLCellValue object.
659
+ */
660
+ XLCellValue getValue() const;
661
+
662
+ /**
663
+ * @brief get the shared string index of value
664
+ * @return the index in the shared strings table
665
+ * @return -1 if cell value is not a shared string
666
+ */
667
+ int32_t stringIndex() const;
668
+
669
+ /**
670
+ * @brief directly set the shared string index for cell, bypassing XLSharedStrings
671
+ * @return true if newIndex could be set
672
+ * @return false if newIndex < 0 or value is not already a shared string
673
+ */
674
+ bool setStringIndex(int32_t newIndex);
675
+
676
+ //---------- Private Member Variables ---------- //
677
+
678
+ XLCell* m_cell; /**< Pointer to the owning XLCell object. */
679
+ XMLNode* m_cellNode; /**< Pointer to corresponding XML cell node. */
680
+ };
681
+
682
+ } // namespace OpenXLSX
683
+
684
+ // TODO: Consider comparison operators on fundamental datatypes
685
+ // ========== FRIEND FUNCTION IMPLEMENTATIONS ========== //
686
+ namespace OpenXLSX
687
+ {
688
+ /**
689
+ * @brief
690
+ * @param lhs
691
+ * @param rhs
692
+ * @return
693
+ */
694
+ inline bool operator==(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value == rhs.m_value; }
695
+
696
+ /**
697
+ * @brief
698
+ * @param lhs
699
+ * @param rhs
700
+ * @return
701
+ */
702
+ inline bool operator!=(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value != rhs.m_value; }
703
+
704
+ /**
705
+ * @brief
706
+ * @param lhs
707
+ * @param rhs
708
+ * @return
709
+ */
710
+ inline bool operator<(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value < rhs.m_value; }
711
+
712
+ /**
713
+ * @brief
714
+ * @param lhs
715
+ * @param rhs
716
+ * @return
717
+ */
718
+ inline bool operator>(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value > rhs.m_value; }
719
+
720
+ /**
721
+ * @brief
722
+ * @param lhs
723
+ * @param rhs
724
+ * @return
725
+ */
726
+ inline bool operator<=(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value <= rhs.m_value; }
727
+
728
+ /**
729
+ * @brief
730
+ * @param lhs
731
+ * @param rhs
732
+ * @return
733
+ */
734
+ inline bool operator>=(const XLCellValue& lhs, const XLCellValue& rhs) { return lhs.m_value >= rhs.m_value; }
735
+
736
+ /**
737
+ * @brief
738
+ * @param os
739
+ * @param value
740
+ * @return
741
+ */
742
+ inline std::ostream& operator<<(std::ostream& os, const XLCellValue& value)
743
+ {
744
+ switch (value.type()) {
745
+ case XLValueType::Empty:
746
+ return os << "";
747
+ case XLValueType::Boolean:
748
+ return os << value.get<bool>();
749
+ case XLValueType::Integer:
750
+ return os << value.get<int64_t>();
751
+ case XLValueType::Float:
752
+ return os << value.get<double>();
753
+ case XLValueType::String:
754
+ return os << value.get<std::string>(); // 2025-01-10 BUGFIX: for temporary value objects, this was undefined behavior due to returning a string_view
755
+ default:
756
+ return os << "";
757
+ }
758
+ }
759
+
760
+ inline std::ostream& operator<<(std::ostream& os, const XLCellValueProxy& value)
761
+ {
762
+ switch (value.type()) {
763
+ case XLValueType::Empty:
764
+ return os << "";
765
+ case XLValueType::Boolean:
766
+ return os << value.get<bool>();
767
+ case XLValueType::Integer:
768
+ return os << value.get<int64_t>();
769
+ case XLValueType::Float:
770
+ return os << value.get<double>();
771
+ case XLValueType::String:
772
+ return os << value.get<std::string>(); // 2025-01-10 BUGFIX: for temporary value objects, this was undefined behavior due to returning a string_view
773
+ default:
774
+ return os << "";
775
+ }
776
+ }
777
+
778
+ } // namespace OpenXLSX
779
+
780
+ template<>
781
+ struct std::hash<OpenXLSX::XLCellValue> // NOLINT
782
+ {
783
+ std::size_t operator()(const OpenXLSX::XLCellValue& value) const noexcept
784
+ {
785
+ return std::hash<XLCellValueType> {}(value.m_value);
786
+ }
787
+ };
788
+
789
+ #ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
790
+ # pragma warning(pop)
791
+ #endif // _MSC_VER
792
+
793
+ #endif // OPENXLSX_XLCELLVALUE_HPP