react-native-nitro-xlsx 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/NitroXlsx.podspec +26 -27
  2. package/Package.swift +31 -10
  3. package/README.md +21 -9
  4. package/android/CMakeLists.txt +20 -27
  5. package/cpp/HybridNitroXlsx.cpp +25 -1
  6. package/cpp/HybridXlsxCellFormat.cpp +46 -146
  7. package/cpp/HybridXlsxCellFormat.hpp +9 -41
  8. package/cpp/HybridXlsxConditionalFormat.cpp +4 -1
  9. package/cpp/HybridXlsxConditionalFormats.cpp +5 -1
  10. package/cpp/HybridXlsxWorkbook.cpp +38 -8
  11. package/cpp/HybridXlsxWorkbook.hpp +10 -1
  12. package/cpp/HybridXlsxWorksheet.cpp +422 -141
  13. package/cpp/HybridXlsxWorksheet.hpp +4 -1
  14. package/cpp/XlsxCacheDir.cpp +25 -2
  15. package/cpp/XlsxCacheDir.hpp +3 -1
  16. package/cpp/XlsxCellStyle.hpp +360 -0
  17. package/cpp/XlsxJson.cpp +29 -8
  18. package/package.json +2 -2
  19. package/scripts/run-cpp-tests.sh +1 -1
  20. package/scripts/sync-openxlsx-headers.sh +34 -0
  21. package/src/__mocks__/react-native-nitro-modules.ts +523 -20
  22. package/src/__tests__/index.test.ts +124 -16
  23. package/src/index.ts +13 -13
  24. package/thirdparty/OpenXLSX/.clang-format +118 -0
  25. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  26. package/thirdparty/OpenXLSX/.gitignore +130 -0
  27. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  28. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  29. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  30. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  31. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  32. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  33. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  34. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  35. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  36. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  37. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  38. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  39. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  40. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  41. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  42. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  43. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  44. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  45. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  46. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  47. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  48. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  49. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  50. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  51. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  52. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  53. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  54. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  55. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  56. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  57. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  58. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  59. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  60. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  61. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  62. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  63. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  64. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  65. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  66. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  67. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  68. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  69. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  70. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  71. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  72. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  73. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  74. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  75. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  76. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/IZipArchive.hpp +361 -0
  77. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/OpenXLSX-Exports.hpp +12 -0
  78. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCell.hpp +367 -0
  79. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellIterator.hpp +252 -0
  80. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellRange.hpp +223 -0
  81. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellReference.hpp +317 -0
  82. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellValue.hpp +793 -0
  83. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColor.hpp +232 -0
  84. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColumn.hpp +159 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCommandQuery.hpp +228 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLComments.hpp +270 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLConstants.hpp +18 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLContentTypes.hpp +264 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDateTime.hpp +175 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDocument.hpp +505 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDrawing.hpp +452 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLException.hpp +161 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLFormula.hpp +375 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLIterator.hpp +40 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLMergeCells.hpp +216 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLProperties.hpp +348 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRelationships.hpp +348 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRow.hpp +721 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRowData.hpp +488 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSharedStrings.hpp +204 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSheet.hpp +1640 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLStyles.hpp +2390 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLTables.hpp +132 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLWorkbook.hpp +404 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlData.hpp +283 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlFile.hpp +194 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParser.hpp +282 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParserForwardDeclarations.hpp +85 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLZipArchive.hpp +232 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/LibZip.hpp +447 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/OpenXLSXFileSystemTools.hpp +207 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/Zippy.hpp +1375 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  123. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  124. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  125. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  126. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  127. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  128. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  129. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  130. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  131. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  132. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  133. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  134. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  135. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  136. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  137. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  138. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  139. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  140. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  141. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  142. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  143. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  144. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  145. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  146. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  147. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  148. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  149. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  150. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  151. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  152. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  153. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  154. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  155. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  156. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  157. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  158. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  159. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  160. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  161. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  162. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  163. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  164. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  165. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  166. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  167. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  168. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  169. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  170. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  171. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  172. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  173. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  174. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  175. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  176. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  177. package/thirdparty/OpenXLSX/README.md +1279 -0
  178. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  179. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  180. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  181. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  182. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  183. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  184. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  185. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  186. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  187. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  188. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  189. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  190. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  191. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  192. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  193. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  194. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  195. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  196. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  197. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  198. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  199. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  200. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  201. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  202. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  203. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  204. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  205. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  206. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  207. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  208. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  209. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  210. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  211. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  212. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  213. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  214. package/thirdparty/README.md +46 -0
  215. package/thirdparty/miniz/.clang-format +47 -0
  216. package/thirdparty/miniz/.travis.yml +2 -0
  217. package/thirdparty/miniz/CMakeLists.txt +333 -0
  218. package/thirdparty/miniz/CMakePresets.json +31 -0
  219. package/thirdparty/miniz/ChangeLog.md +272 -0
  220. package/thirdparty/miniz/Config.cmake.in +1 -0
  221. package/thirdparty/miniz/LICENSE +22 -0
  222. package/thirdparty/miniz/amalgamate.sh +57 -0
  223. package/thirdparty/miniz/examples/example1.c +105 -0
  224. package/thirdparty/miniz/examples/example2.c +164 -0
  225. package/thirdparty/miniz/examples/example3.c +269 -0
  226. package/thirdparty/miniz/examples/example4.c +102 -0
  227. package/thirdparty/miniz/examples/example5.c +327 -0
  228. package/thirdparty/miniz/examples/example6.c +189 -0
  229. package/thirdparty/miniz/meson.build +21 -0
  230. package/thirdparty/miniz/miniz.c +646 -0
  231. package/thirdparty/miniz/miniz.h +615 -0
  232. package/thirdparty/miniz/miniz.pc.in +13 -0
  233. package/thirdparty/miniz/miniz_common.h +89 -0
  234. package/thirdparty/miniz/miniz_export.h +20 -0
  235. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  236. package/thirdparty/miniz/miniz_tdef.h +199 -0
  237. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  238. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  239. package/thirdparty/miniz/miniz_zip.c +4895 -0
  240. package/thirdparty/miniz/miniz_zip.h +454 -0
  241. package/thirdparty/miniz/readme.md +46 -0
  242. package/thirdparty/miniz/test.sh +36 -0
  243. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  244. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  245. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  246. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  247. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  248. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  249. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  250. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  251. package/thirdparty/miniz/tests/main.cpp +185 -0
  252. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  253. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  254. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  255. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  256. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  257. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  258. package/thirdparty/miniz/tests/timer.cpp +152 -0
  259. package/thirdparty/miniz/tests/timer.h +40 -0
  260. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  261. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  262. package/thirdparty/miniz/tests/zip.dict +9 -0
  263. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  264. package/thirdparty/pugixml/.codecov.yml +7 -0
  265. package/thirdparty/pugixml/.gitattributes +1 -0
  266. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  267. package/thirdparty/pugixml/LICENSE.md +24 -0
  268. package/thirdparty/pugixml/Makefile +98 -0
  269. package/thirdparty/pugixml/README.md +81 -0
  270. package/thirdparty/pugixml/SECURITY.md +9 -0
  271. package/thirdparty/pugixml/appveyor.yml +50 -0
  272. package/thirdparty/pugixml/docs/config.adoc +7 -0
  273. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  274. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  275. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  276. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  277. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  278. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  279. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  280. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  281. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  282. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  283. package/thirdparty/pugixml/docs/manual.html +6395 -0
  284. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  285. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  286. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  287. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  288. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  289. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  290. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  291. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  292. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  293. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  294. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  295. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  296. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  297. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  298. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  299. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  300. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  301. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  302. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  303. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  304. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  305. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  306. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  307. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  308. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  309. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  310. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  311. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  312. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  313. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  314. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  315. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  316. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  317. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  318. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  319. package/thirdparty/pugixml/readme.txt +50 -0
  320. package/thirdparty/pugixml/scripts/archive.py +54 -0
  321. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  322. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  323. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  324. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  325. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  326. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  327. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  328. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  329. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  330. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  331. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  332. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  333. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  334. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  335. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  336. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  337. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  338. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  339. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  340. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  341. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  342. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  343. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  344. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  345. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  346. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  347. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  348. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  349. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  350. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  351. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  352. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  353. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  354. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  355. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  356. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  357. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  358. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  359. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  360. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  361. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  362. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  363. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  364. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  365. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  366. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  367. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  368. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  369. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  370. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  371. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  372. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  373. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  374. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  375. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  376. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  377. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  378. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  379. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  380. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  381. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  382. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  383. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  384. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  385. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  386. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  387. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  388. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  389. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  390. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  391. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  392. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  393. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  394. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  395. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  396. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  397. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  398. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  399. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  400. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  401. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  402. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  403. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  404. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  405. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  406. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  407. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  408. package/thirdparty/pugixml/tests/main.cpp +218 -0
  409. package/thirdparty/pugixml/tests/test.cpp +220 -0
  410. package/thirdparty/pugixml/tests/test.hpp +175 -0
  411. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  412. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  413. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  414. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  415. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  416. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  417. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  418. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  419. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  420. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  421. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  422. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  423. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  424. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  425. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  426. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  427. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  428. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  429. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  430. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  431. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  432. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  433. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  434. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  435. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  436. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  437. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  438. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  439. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  440. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  441. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  442. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  443. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  444. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  445. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  446. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  447. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  448. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  449. package/scripts/prepare-openxlsx.js +0 -126
@@ -0,0 +1,519 @@
1
+ //
2
+ // Created by Kenneth Balslev on 19/08/2020.
3
+ //
4
+
5
+ // ===== External Includes ===== //
6
+ #include <cassert>
7
+ #include <cstring>
8
+
9
+ // ===== OpenXLSX Includes ===== //
10
+ #include "XLCell.hpp"
11
+ #include "XLCellValue.hpp"
12
+ #include "XLException.hpp"
13
+ #include "XLXmlParser.hpp" // pugixml wrapper
14
+
15
+ using namespace OpenXLSX;
16
+
17
+ /**
18
+ * @details Constructor. Default implementation has been used.
19
+ */
20
+ XLCellValue::XLCellValue() = default;
21
+
22
+ /**
23
+ * @details explicit copy constructor.
24
+ * @pre The object to be copied must be valid.
25
+ * @post A valid copy is constructed.
26
+ */
27
+ XLCellValue::XLCellValue(const OpenXLSX::XLCellValue& other)
28
+ : m_value(other.m_value),
29
+ m_type(other.m_type)
30
+ {}
31
+
32
+ /**
33
+ * @details Move constructor. The default implementation will be used.
34
+ */
35
+ XLCellValue::XLCellValue(OpenXLSX::XLCellValue&& other) noexcept = default;
36
+
37
+ /**
38
+ * @details Destructor. The default implementation will be used
39
+ * @pre None.
40
+ * @post The object is destroyed.
41
+ */
42
+ XLCellValue::~XLCellValue() = default;
43
+
44
+ /**
45
+ * @details explicit copy assignment operator
46
+ * @pre The object to be copied must be a valid object.
47
+ * @post A the copied-to object is valid.
48
+ */
49
+ XLCellValue& OpenXLSX::XLCellValue::operator=(const OpenXLSX::XLCellValue& other)
50
+ {
51
+ if (&other != this) {
52
+ XLCellValue temp = other; // copy-construct
53
+ *this = std::move(temp); // move-assign & invalidate temp
54
+ }
55
+ return *this;
56
+ }
57
+
58
+ /**
59
+ * @details Move assignment operator. The default implementation will be used.
60
+ * @pre The object to be moved must be a valid object.
61
+ * @post The moved-to object is valid.
62
+ */
63
+ XLCellValue& OpenXLSX::XLCellValue::operator=(OpenXLSX::XLCellValue&& other) noexcept = default;
64
+
65
+ /**
66
+ * @details Clears the contents of the XLCellValue object. Setting the value to an empty string is not sufficient
67
+ * (as an empty string is still a valid string). The m_type variable must also be set to XLValueType::Empty.
68
+ * @pre
69
+ * @post
70
+ */
71
+ XLCellValue& XLCellValue::clear()
72
+ {
73
+ m_type = XLValueType::Empty;
74
+ m_value = std::string("");
75
+ return *this;
76
+ }
77
+
78
+ /**
79
+ * @details Sets the value type to XLValueType::Error. The value will be set to an empty string.
80
+ * @pre
81
+ * @post
82
+ */
83
+ XLCellValue& XLCellValue::setError(const std::string &error)
84
+ {
85
+ m_type = XLValueType::Error;
86
+ m_value = error;
87
+ return *this;
88
+ }
89
+
90
+ /**
91
+ * @details Get the value type of the current object.
92
+ * @pre
93
+ * @post
94
+ */
95
+ XLValueType XLCellValue::type() const
96
+ {
97
+ return m_type;
98
+ }
99
+
100
+ /**
101
+ * @details Get the value type of the current object, as a string representation
102
+ * @pre
103
+ * @post
104
+ */
105
+ std::string XLCellValue::typeAsString() const
106
+ {
107
+ switch (type()) {
108
+ case XLValueType::Empty:
109
+ return "empty";
110
+ case XLValueType::Boolean:
111
+ return "boolean";
112
+ case XLValueType::Integer:
113
+ return "integer";
114
+ case XLValueType::Float:
115
+ return "float";
116
+ case XLValueType::String:
117
+ return "string";
118
+ default:
119
+ return "error";
120
+ }
121
+ }
122
+
123
+ /**
124
+ * @details Constructor
125
+ * @pre The cell and cellNode pointers must not be nullptr and must point to valid objects.
126
+ * @post A valid XLCellValueProxy has been created.
127
+ */
128
+ XLCellValueProxy::XLCellValueProxy(XLCell* cell, XMLNode* cellNode)
129
+ : m_cell(cell),
130
+ m_cellNode(cellNode)
131
+ {
132
+ assert(cell != nullptr); // NOLINT
133
+ // assert(cellNode); // NOLINT
134
+ // assert(not cellNode->empty()); // NOLINT
135
+ }
136
+
137
+ /**
138
+ * @details Destructor. Default implementation has been used.
139
+ * @pre
140
+ * @post
141
+ */
142
+ XLCellValueProxy::~XLCellValueProxy() = default;
143
+
144
+ /**
145
+ * @details explicit copy constructor
146
+ * @pre
147
+ * @post
148
+ */
149
+ XLCellValueProxy::XLCellValueProxy(const XLCellValueProxy& other)
150
+ : m_cell(other.m_cell),
151
+ m_cellNode(other.m_cellNode)
152
+ {}
153
+
154
+ /**
155
+ * @details Move constructor. Default implementation has been used.
156
+ * @pre
157
+ * @post
158
+ */
159
+ XLCellValueProxy::XLCellValueProxy(XLCellValueProxy&& other) noexcept = default;
160
+
161
+ /**
162
+ * @details Copy assignment operator. The function is implemented in terms of the templated
163
+ * value assignment operators, i.e. it is the XLCellValue that is that is copied,
164
+ * not the object itself.
165
+ * @pre
166
+ * @post
167
+ */
168
+ XLCellValueProxy& XLCellValueProxy::operator=(const XLCellValueProxy& other)
169
+ {
170
+ if (&other != this) {
171
+ *this = other.getValue(); // NOTE to avoid confusion: this invokes the templated operator= with a parameter of type XLCellValue
172
+ }
173
+
174
+ return *this;
175
+ }
176
+
177
+ /**
178
+ * @details Move assignment operator. Default implementation has been used.
179
+ * @pre
180
+ * @post
181
+ */
182
+ XLCellValueProxy& XLCellValueProxy::operator=(XLCellValueProxy&& other) noexcept = default;
183
+
184
+ /**
185
+ * @details Implicitly convert the XLCellValueProxy object to a XLCellValue object.
186
+ * @pre
187
+ * @post
188
+ */
189
+ XLCellValueProxy::operator XLCellValue() const {
190
+ return getValue();
191
+ }
192
+
193
+ /**
194
+ * @details Clear the contents of the cell. This removes all children of the cell node.
195
+ * @pre The m_cellNode must not be null, and must point to a valid XML cell node object.
196
+ * @post The cell node must be valid, but empty.
197
+ */
198
+ XLCellValueProxy& XLCellValueProxy::clear()
199
+ {
200
+ // ===== Check that the m_cellNode is valid.
201
+ assert(m_cellNode != nullptr); // NOLINT
202
+ assert(not m_cellNode->empty()); // NOLINT
203
+
204
+ // ===== Remove the type attribute
205
+ m_cellNode->remove_attribute("t");
206
+
207
+ // ===== Disable space preservation (only relevant for strings).
208
+ m_cellNode->remove_attribute(" xml:space");
209
+
210
+ // ===== Remove the value node.
211
+ m_cellNode->remove_child("v");
212
+
213
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
214
+ m_cellNode->remove_child("is");
215
+
216
+ return *this;
217
+ }
218
+ /**
219
+ * @details Set the cell value to a error state. This will remove all children and attributes, except
220
+ * the type attribute, which is set to "e"
221
+ * @pre The m_cellNode must not be null, and must point to a valid XML cell node object.
222
+ * @post The cell node must be valid.
223
+ */
224
+ XLCellValueProxy& XLCellValueProxy::setError(const std::string &error)
225
+ {
226
+ // ===== Check that the m_cellNode is valid.
227
+ assert(m_cellNode != nullptr); // NOLINT
228
+ assert(not m_cellNode->empty()); // NOLINT
229
+
230
+ // ===== If the cell node doesn't have a type attribute, create it.
231
+ if (!m_cellNode->attribute("t")) m_cellNode->append_attribute("t");
232
+
233
+ // ===== Set the type to "e", i.e. error
234
+ m_cellNode->attribute("t").set_value("e");
235
+
236
+ // ===== If the cell node doesn't have a value child node, create it.
237
+ if (!m_cellNode->child("v")) m_cellNode->append_child("v");
238
+
239
+ // ===== Set the child value to the error
240
+ m_cellNode->child("v").text().set(error.c_str());
241
+
242
+ // ===== Disable space preservation (only relevant for strings).
243
+ m_cellNode->remove_attribute(" xml:space");
244
+
245
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
246
+ m_cellNode->remove_child("is");
247
+
248
+ return *this;
249
+ }
250
+
251
+ /**
252
+ * @details Get the value type for the cell.
253
+ * @pre The m_cellNode must not be null, and must point to a valid XML cell node object.
254
+ * @post No change should be made.
255
+ */
256
+ XLValueType XLCellValueProxy::type() const
257
+ {
258
+ // ===== Check that the m_cellNode is valid.
259
+ assert(m_cellNode != nullptr); // NOLINT
260
+ assert(not m_cellNode->empty()); // NOLINT
261
+
262
+ // ===== If neither a Type attribute or a getValue node is present, the cell is empty.
263
+ if (!m_cellNode->attribute("t") && !m_cellNode->child("v")) return XLValueType::Empty;
264
+
265
+ // ===== If a Type attribute is not present, but a value node is, the cell contains a number.
266
+ if (m_cellNode->attribute("t").empty() || ((strcmp(m_cellNode->attribute("t").value(), "n") == 0) && not m_cellNode->child("v").empty())) {
267
+ if (const std::string numberString = m_cellNode->child("v").text().get();
268
+ numberString.find('.') != std::string::npos || numberString.find("E-") != std::string::npos || numberString.find("e-") != std::string::npos)
269
+ return XLValueType::Float;
270
+ return XLValueType::Integer;
271
+ }
272
+
273
+ // ===== If the cell is of type "s", the cell contains a shared string.
274
+ if (not m_cellNode->attribute("t").empty() && strcmp(m_cellNode->attribute("t").value(), "s") == 0)
275
+ return XLValueType::String; // NOLINT
276
+
277
+ // ===== If the cell is of type "inlineStr", the cell contains an inline string.
278
+ if (not m_cellNode->attribute("t").empty() && strcmp(m_cellNode->attribute("t").value(), "inlineStr") == 0)
279
+ return XLValueType::String;
280
+
281
+ // ===== If the cell is of type "str", the cell contains an ordinary string.
282
+ if (not m_cellNode->attribute("t").empty() && strcmp(m_cellNode->attribute("t").value(), "str") == 0)
283
+ return XLValueType::String;
284
+
285
+ // ===== If the cell is of type "b", the cell contains a boolean.
286
+ if (not m_cellNode->attribute("t").empty() && strcmp(m_cellNode->attribute("t").value(), "b") == 0)
287
+ return XLValueType::Boolean;
288
+
289
+ // ===== Otherwise, the cell contains an error.
290
+ return XLValueType::Error; // the m_typeAttribute has the ValueAsString "e"
291
+ }
292
+
293
+ /**
294
+ * @details Get the value type of the current object, as a string representation.
295
+ * @pre
296
+ * @post
297
+ */
298
+ std::string XLCellValueProxy::typeAsString() const
299
+ {
300
+ switch (type()) {
301
+ case XLValueType::Empty:
302
+ return "empty";
303
+ case XLValueType::Boolean:
304
+ return "boolean";
305
+ case XLValueType::Integer:
306
+ return "integer";
307
+ case XLValueType::Float:
308
+ return "float";
309
+ case XLValueType::String:
310
+ return "string";
311
+ default:
312
+ return "error";
313
+ }
314
+ }
315
+
316
+ /**
317
+ * @details Set cell to an integer value. This is private helper function for setting the cell value
318
+ * directly in the underlying XML file.
319
+ * @pre The m_cellNode must not be null, and must point to a valid XMLNode object.
320
+ * @post The underlying XMLNode has been updated correctly, representing an integer value.
321
+ */
322
+ void XLCellValueProxy::setInteger(int64_t numberValue) // NOLINT
323
+ {
324
+ // ===== Check that the m_cellNode is valid.
325
+ assert(m_cellNode != nullptr); // NOLINT
326
+ assert(not m_cellNode->empty()); // NOLINT
327
+
328
+ // ===== If the cell node doesn't have a value child node, create it.
329
+ if (m_cellNode->child("v").empty()) m_cellNode->append_child("v");
330
+
331
+ // ===== The type ("t") attribute is not required for number values.
332
+ m_cellNode->remove_attribute("t");
333
+
334
+ // ===== Set the text of the value node.
335
+ m_cellNode->child("v").text().set(numberValue);
336
+
337
+ // ===== Disable space preservation (only relevant for strings).
338
+ m_cellNode->child("v").remove_attribute(m_cellNode->child("v").attribute("xml:space"));
339
+
340
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
341
+ m_cellNode->remove_child("is");
342
+ }
343
+
344
+ /**
345
+ * @details Set the cell to a bool value. This is private helper function for setting the cell value
346
+ * directly in the underlying XML file.
347
+ * @pre The m_cellNode must not be null, and must point to a valid XMLNode object.
348
+ * @post The underlying XMLNode has been updated correctly, representing an bool value.
349
+ */
350
+ void XLCellValueProxy::setBoolean(bool numberValue) // NOLINT
351
+ {
352
+ // ===== Check that the m_cellNode is valid.
353
+ assert(m_cellNode != nullptr); // NOLINT
354
+ assert(not m_cellNode->empty()); // NOLINT
355
+
356
+ // ===== If the cell node doesn't have a type child node, create it.
357
+ if (m_cellNode->attribute("t").empty()) m_cellNode->append_attribute("t");
358
+
359
+ // ===== If the cell node doesn't have a value child node, create it.
360
+ if (m_cellNode->child("v").empty()) m_cellNode->append_child("v");
361
+
362
+ // ===== Set the type attribute.
363
+ m_cellNode->attribute("t").set_value("b");
364
+
365
+ // ===== Set the text of the value node.
366
+ m_cellNode->child("v").text().set(numberValue ? 1 : 0);
367
+
368
+ // ===== Disable space preservation (only relevant for strings).
369
+ m_cellNode->child("v").remove_attribute(m_cellNode->child("v").attribute("xml:space"));
370
+
371
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
372
+ m_cellNode->remove_child("is");
373
+ }
374
+
375
+ /**
376
+ * @details Set the cell to a floating point value. This is private helper function for setting the cell value
377
+ * directly in the underlying XML file.
378
+ * @pre The m_cellNode must not be null, and must point to a valid XMLNode object.
379
+ * @post The underlying XMLNode has been updated correctly, representing a floating point value.
380
+ */
381
+ void XLCellValueProxy::setFloat(double numberValue)
382
+ {
383
+ // check for nan / inf
384
+ if (std::isfinite(numberValue)) {
385
+ // ===== Check that the m_cellNode is valid.
386
+ assert(m_cellNode != nullptr); // NOLINT
387
+ assert(not m_cellNode->empty()); // NOLINT
388
+
389
+ // ===== If the cell node doesn't have a value child node, create it.
390
+ if (m_cellNode->child("v").empty()) m_cellNode->append_child("v");
391
+
392
+ // ===== The type ("t") attribute is not required for number values.
393
+ m_cellNode->remove_attribute("t");
394
+
395
+ // ===== Set the text of the value node.
396
+ m_cellNode->child("v").text().set(numberValue);
397
+
398
+ // ===== Disable space preservation (only relevant for strings).
399
+ m_cellNode->child("v").remove_attribute(m_cellNode->child("v").attribute("xml:space"));
400
+
401
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
402
+ m_cellNode->remove_child("is");
403
+ }
404
+ else {
405
+ setError("#NUM!");
406
+ return;
407
+ }
408
+ }
409
+
410
+ /**
411
+ * @details Set the cell to a string value. This is private helper function for setting the cell value
412
+ * directly in the underlying XML file.
413
+ * @pre The m_cellNode must not be null, and must point to a valid XMLNode object.
414
+ * @post The underlying XMLNode has been updated correctly, representing a string value.
415
+ */
416
+ void XLCellValueProxy::setString(const char* stringValue) // NOLINT
417
+ {
418
+ // ===== Check that the m_cellNode is valid.
419
+ assert(m_cellNode != nullptr); // NOLINT
420
+ assert(not m_cellNode->empty()); // NOLINT
421
+
422
+ // ===== If the cell node doesn't have a type child node, create it.
423
+ if (m_cellNode->attribute("t").empty()) m_cellNode->append_attribute("t");
424
+
425
+ // ===== If the cell node doesn't have a value child node, create it.
426
+ if (m_cellNode->child("v").empty()) m_cellNode->append_child("v");
427
+
428
+ // ===== Set the type attribute.
429
+ m_cellNode->attribute("t").set_value("s");
430
+
431
+ // ===== Get or create the index in the XLSharedStrings object.
432
+ const auto index = (m_cell->m_sharedStrings.get().stringExists(stringValue)
433
+ /**/ ? m_cell->m_sharedStrings.get().getStringIndex(stringValue)
434
+ /**/ : m_cell->m_sharedStrings.get().appendString(stringValue));
435
+
436
+ // ===== Set the text of the value node.
437
+ m_cellNode->child("v").text().set(index);
438
+
439
+ // ===== Remove the is node (only relevant in case previous cell type was "inlineStr"). // pull request #188
440
+ m_cellNode->remove_child("is");
441
+
442
+ /* 2024-04-23: NOTE "embedded" strings are "inline strings" in XLSX, using a node like so:
443
+ * <c r="C1" s="3" t="inlineStr"><is><t>An inline string</t></is></c>
444
+ * Those should be not confused with the below "str" type, which is I believe only relevant for the cell display format
445
+ */
446
+ // IMPLEMENTATION FOR EMBEDDED STRINGS:
447
+ // m_cellNode->attribute("t").set_value("str");
448
+ // m_cellNode->child("v").text().set(stringValue);
449
+ //
450
+ // auto s = std::string_view(stringValue);
451
+ // if (s.front() == ' ' || s.back() == ' ') {
452
+ // if (!m_cellNode->attribute("xml:space")) m_cellNode->append_attribute("xml:space");
453
+ // m_cellNode->attribute("xml:space").set_value("preserve");
454
+ // }
455
+ }
456
+
457
+ /**
458
+ * @details Get a copy of the XLCellValue object for the cell. This is private helper function for returning an
459
+ * XLCellValue object corresponding to the cell value.
460
+ * @pre The m_cellNode must not be null, and must point to a valid XMLNode object.
461
+ * @post No changes should be made.
462
+ */
463
+ XLCellValue XLCellValueProxy::getValue() const
464
+ {
465
+ // ===== Check that the m_cellNode is valid.
466
+ assert(m_cellNode != nullptr); // NOLINT
467
+ assert(not m_cellNode->empty()); // NOLINT
468
+
469
+ switch (type()) {
470
+ case XLValueType::Empty:
471
+ return XLCellValue().clear();
472
+
473
+ case XLValueType::Float:
474
+ return XLCellValue { m_cellNode->child("v").text().as_double() };
475
+
476
+ case XLValueType::Integer:
477
+ return XLCellValue { m_cellNode->child("v").text().as_llong() };
478
+
479
+ case XLValueType::String:
480
+ if (strcmp(m_cellNode->attribute("t").value(), "s") == 0)
481
+ return XLCellValue {
482
+ m_cell->m_sharedStrings.get().getString(static_cast<uint32_t>(m_cellNode->child("v").text().as_ullong()))
483
+ };
484
+ else if (strcmp(m_cellNode->attribute("t").value(), "str") == 0)
485
+ return XLCellValue { m_cellNode->child("v").text().get() };
486
+ else if (strcmp(m_cellNode->attribute("t").value(), "inlineStr") == 0)
487
+ return XLCellValue { m_cellNode->child("is").child("t").text().get() };
488
+ else
489
+ throw XLInternalError("Unknown string type");
490
+
491
+ case XLValueType::Boolean:
492
+ return XLCellValue { m_cellNode->child("v").text().as_bool() };
493
+
494
+ case XLValueType::Error:
495
+ return XLCellValue().setError(m_cellNode->child("v").text().as_string());
496
+
497
+ default:
498
+ return XLCellValue().setError("");
499
+ }
500
+ }
501
+
502
+ /**
503
+ * @details
504
+ */
505
+ int32_t XLCellValueProxy::stringIndex() const
506
+ {
507
+ if (strcmp(m_cellNode->attribute("t").value(), "s") != 0) return -1; // cell value is not a shared string
508
+ return m_cellNode->child("v").text().as_ullong(-1); // return the shared string index stored for this cell
509
+ /**/ // if, for whatever reason, the underlying XML has no reference stored, also return -1
510
+ }
511
+
512
+ /**
513
+ * @details
514
+ */
515
+ bool XLCellValueProxy::setStringIndex(int32_t newIndex)
516
+ {
517
+ if (newIndex < 0 || strcmp(m_cellNode->attribute("t").value(), "s") != 0) return false; // cell value is not a shared string
518
+ return m_cellNode->child("v").text().set(newIndex); // set the shared string index directly
519
+ }