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,247 @@
1
+ /*
2
+
3
+ ____ ____ ___ ____ ____ ____ ___
4
+ 6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
5
+ 8P Y8 `MM. d' MM 6M' ` `MM. d'
6
+ 6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
7
+ MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
8
+ MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
9
+ MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
10
+ MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
11
+ YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
12
+ 8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
13
+ YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
14
+ MM
15
+ MM
16
+ _MM_
17
+
18
+ Copyright (c) 2018, Kenneth Troldal Balslev
19
+
20
+ All rights reserved.
21
+
22
+ Redistribution and use in source and binary forms, with or without
23
+ modification, are permitted provided that the following conditions are met:
24
+ - Redistributions of source code must retain the above copyright
25
+ notice, this list of conditions and the following disclaimer.
26
+ - Redistributions in binary form must reproduce the above copyright
27
+ notice, this list of conditions and the following disclaimer in the
28
+ documentation and/or other materials provided with the distribution.
29
+ - Neither the name of the author nor the
30
+ names of any contributors may be used to endorse or promote products
31
+ derived from this software without specific prior written permission.
32
+
33
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
34
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
37
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
+
44
+ */
45
+
46
+ // ===== External Includes ===== //
47
+ #include <sstream>
48
+
49
+ // ===== OpenXLSX Includes ===== //
50
+ #include "XLDocument.hpp"
51
+ #include "XLXmlData.hpp"
52
+ #include "XLXmlParser.hpp" // pugixml wrapper
53
+
54
+ using namespace OpenXLSX;
55
+
56
+
57
+ // ===== XLXmlSavingDeclaration
58
+
59
+ /**
60
+ * @details
61
+ */
62
+ XLXmlSavingDeclaration::XLXmlSavingDeclaration()
63
+ : m_version(XLXmlDefaultVersion),
64
+ m_encoding(XLXmlDefaultEncoding),
65
+ m_standalone(XLXmlNotStandalone)
66
+ {}
67
+
68
+ /**
69
+ * @details
70
+ */
71
+ XLXmlSavingDeclaration::XLXmlSavingDeclaration(std::string version, std::string encoding, bool standalone)
72
+ : m_version(version),
73
+ m_encoding(encoding),
74
+ m_standalone(standalone)
75
+ {}
76
+
77
+ /**
78
+ * @details Copy constructor
79
+ */
80
+ XLXmlSavingDeclaration::XLXmlSavingDeclaration(const XLXmlSavingDeclaration& other) = default;
81
+
82
+ /**
83
+ * @details Move constructor
84
+ */
85
+ XLXmlSavingDeclaration::XLXmlSavingDeclaration(XLXmlSavingDeclaration&& other) noexcept = default;
86
+
87
+ /**
88
+ * @details
89
+ */
90
+ XLXmlSavingDeclaration::~XLXmlSavingDeclaration() = default;
91
+
92
+ /**
93
+ * @details Copy assignment operator
94
+ */
95
+ XLXmlSavingDeclaration& XLXmlSavingDeclaration::operator=(const XLXmlSavingDeclaration& other) = default;
96
+
97
+ /**
98
+ * @details Move assignment operator
99
+ */
100
+ XLXmlSavingDeclaration& XLXmlSavingDeclaration::operator=(XLXmlSavingDeclaration&& other) noexcept = default;
101
+
102
+
103
+ // ===== XLXmlData
104
+
105
+ /**
106
+ * @details
107
+ */
108
+ XLXmlData::XLXmlData() = default;
109
+
110
+ /**
111
+ * @details
112
+ */
113
+ XLXmlData::XLXmlData(XLDocument* parentDoc, const std::string& xmlPath, const std::string& xmlId, XLContentType xmlType)
114
+ : m_parentDoc(parentDoc),
115
+ m_xmlPath(xmlPath),
116
+ m_xmlID(xmlId),
117
+ m_xmlType(xmlType),
118
+ m_xmlDoc(std::make_unique<XMLDocument>())
119
+ {
120
+ m_xmlDoc->reset();
121
+ }
122
+
123
+ /**
124
+ * @details
125
+ */
126
+ XLXmlData::XLXmlData(XLXmlData&& other) noexcept = default;
127
+
128
+ /**
129
+ * @details
130
+ */
131
+ XLXmlData::~XLXmlData() = default;
132
+
133
+ /**
134
+ * @details
135
+ */
136
+ XLXmlData& XLXmlData::operator=(XLXmlData&& other) noexcept = default;
137
+
138
+ /**
139
+ * @details
140
+ */
141
+ void XLXmlData::setRawData(const std::string& data) // NOLINT
142
+ {
143
+ m_xmlDoc->load_string(data.c_str(), pugi_parse_settings);
144
+ }
145
+
146
+ /**
147
+ * @details
148
+ * @note Default encoding for pugixml xml_document::save is pugi::encoding_auto, becomes pugi::encoding_utf8
149
+ */
150
+ std::string XLXmlData::getRawData(XLXmlSavingDeclaration savingDeclaration) const
151
+ {
152
+ XMLDocument *doc = const_cast<XMLDocument *>(getXmlDocument());
153
+
154
+ // ===== 2024-07-08: ensure that the default encoding UTF-8 is explicitly written to the XML document with a custom saving declaration
155
+ XMLNode saveDeclaration = doc->first_child();
156
+ if (saveDeclaration.empty() || saveDeclaration.type() != pugi::node_declaration) { // if saving declaration node does not exist
157
+ doc->prepend_child(pugi::node_pcdata).set_value("\n"); // prepend a line break
158
+ saveDeclaration = doc->prepend_child(pugi::node_declaration); // prepend a saving declaration
159
+ }
160
+
161
+ // ===== If a node_declaration could be fetched or created
162
+ if (not saveDeclaration.empty()) {
163
+ // ===== Fetch or create saving declaration attributes
164
+ XMLAttribute attrVersion = saveDeclaration.attribute("version");
165
+ if (attrVersion.empty())
166
+ attrVersion = saveDeclaration.append_attribute("version");
167
+ XMLAttribute attrEncoding = saveDeclaration.attribute("encoding");
168
+ if (attrEncoding.empty())
169
+ attrEncoding = saveDeclaration.append_attribute("encoding");
170
+ XMLAttribute attrStandalone = saveDeclaration.attribute("standalone");
171
+ if (attrStandalone.empty() && savingDeclaration.standalone_as_bool()) // only if standalone is set in passed savingDeclaration
172
+ attrStandalone = saveDeclaration.append_attribute("standalone"); // then make sure it exists
173
+
174
+ // ===== Set saving declaration attribute values (potentially overwriting existing values)
175
+ attrVersion = savingDeclaration.version().c_str(); // version="1.0" is XML default
176
+ attrEncoding = savingDeclaration.encoding().c_str(); // encoding="UTF-8" is XML default
177
+
178
+ if (not attrStandalone.empty()) // only save standalone attribute if previously existing or newly set to standalone="yes"
179
+ attrStandalone = savingDeclaration.standalone().c_str(); // standalone="no" is XML default
180
+ }
181
+
182
+ std::ostringstream ostr;
183
+ doc->save(ostr, "", pugi::format_raw);
184
+ return ostr.str();
185
+ }
186
+
187
+ /**
188
+ * @details
189
+ */
190
+ XLDocument* XLXmlData::getParentDoc()
191
+ {
192
+ return m_parentDoc;
193
+ }
194
+
195
+ /**
196
+ * @details
197
+ */
198
+ const XLDocument* XLXmlData::getParentDoc() const
199
+ {
200
+ return m_parentDoc;
201
+ }
202
+
203
+ /**
204
+ * @details
205
+ */
206
+ std::string XLXmlData::getXmlPath() const
207
+ {
208
+ return m_xmlPath;
209
+ }
210
+
211
+ /**
212
+ * @details
213
+ */
214
+ std::string XLXmlData::getXmlID() const
215
+ {
216
+ return m_xmlID;
217
+ }
218
+
219
+ /**
220
+ * @details
221
+ */
222
+ XLContentType XLXmlData::getXmlType() const
223
+ {
224
+ return m_xmlType;
225
+ }
226
+
227
+ /**
228
+ * @details
229
+ */
230
+ XMLDocument* XLXmlData::getXmlDocument()
231
+ {
232
+ if (!m_xmlDoc->document_element())
233
+ m_xmlDoc->load_string(m_parentDoc->extractXmlFromArchive(m_xmlPath).c_str(), pugi_parse_settings);
234
+
235
+ return m_xmlDoc.get();
236
+ }
237
+
238
+ /**
239
+ * @details
240
+ */
241
+ const XMLDocument* XLXmlData::getXmlDocument() const
242
+ {
243
+ if (!m_xmlDoc->document_element())
244
+ m_xmlDoc->load_string(m_parentDoc->extractXmlFromArchive(m_xmlPath).c_str(), pugi_parse_settings);
245
+
246
+ return m_xmlDoc.get();
247
+ }
@@ -0,0 +1,160 @@
1
+ /*
2
+
3
+ ____ ____ ___ ____ ____ ____ ___
4
+ 6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
5
+ 8P Y8 `MM. d' MM 6M' ` `MM. d'
6
+ 6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
7
+ MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
8
+ MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
9
+ MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
10
+ MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
11
+ YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
12
+ 8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
13
+ YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
14
+ MM
15
+ MM
16
+ _MM_
17
+
18
+ Copyright (c) 2018, Kenneth Troldal Balslev
19
+
20
+ All rights reserved.
21
+
22
+ Redistribution and use in source and binary forms, with or without
23
+ modification, are permitted provided that the following conditions are met:
24
+ - Redistributions of source code must retain the above copyright
25
+ notice, this list of conditions and the following disclaimer.
26
+ - Redistributions in binary form must reproduce the above copyright
27
+ notice, this list of conditions and the following disclaimer in the
28
+ documentation and/or other materials provided with the distribution.
29
+ - Neither the name of the author nor the
30
+ names of any contributors may be used to endorse or promote products
31
+ derived from this software without specific prior written permission.
32
+
33
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
34
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
37
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
+
44
+ */
45
+
46
+ // ===== External Includes ===== //
47
+
48
+ // ===== OpenXLSX Includes ===== //
49
+ #include "XLDocument.hpp"
50
+ #include "XLXmlFile.hpp"
51
+ #include "XLXmlParser.hpp" // pugixml wrapper
52
+
53
+ using namespace OpenXLSX;
54
+
55
+ /**
56
+ * @details Default constructor
57
+ */
58
+ XLXmlFile::XLXmlFile() = default;
59
+
60
+ /**
61
+ * @details The constructor creates a new object with the parent XLDocument and the file path as input, with
62
+ * an optional input being a std::string with the XML data. If the XML data is provided by a string, any file with
63
+ * the same path in the .zip file will be overwritten upon saving of the document. If no xmlData is provided,
64
+ * the data will be read from the .zip file, using the given path.
65
+ */
66
+ XLXmlFile::XLXmlFile(XLXmlData* xmlData) : m_xmlData(xmlData) {}
67
+
68
+ /**
69
+ * @details Copy constructor
70
+ */
71
+ XLXmlFile::XLXmlFile(const XLXmlFile& other) = default;
72
+
73
+ /**
74
+ * @details Move constructor
75
+ */
76
+ XLXmlFile::XLXmlFile(XLXmlFile&& other) noexcept = default;
77
+
78
+ /**
79
+ * @details
80
+ */
81
+ XLXmlFile::~XLXmlFile() = default;
82
+
83
+ /**
84
+ * @details Copy assignment operator
85
+ */
86
+ XLXmlFile& XLXmlFile::operator=(const XLXmlFile& other) = default;
87
+
88
+ /**
89
+ * @details Move assignment operator
90
+ */
91
+ XLXmlFile& XLXmlFile::operator=(XLXmlFile&& other) noexcept = default;
92
+
93
+ /**
94
+ * @details This method sets the XML data with a std::string as input. The underlying XMLDocument reads the data.
95
+ * When envoking the load_string method in PugiXML, the flag 'parse_ws_pcdata' is passed along with the default flags.
96
+ * This will enable parsing of whitespace characters. If not set, Excel cells with only spaces will be returned as
97
+ * empty strings, which is not what we want. The downside is that whitespace characters such as \\n and \\t in the
98
+ * input xml file may mess up the parsing.
99
+ */
100
+ void XLXmlFile::setXmlData(const std::string& xmlData) // NOLINT
101
+ {
102
+ m_xmlData->setRawData(xmlData);
103
+ }
104
+
105
+ /**
106
+ * @details This method retrieves the underlying XML data as a std::string.
107
+ */
108
+ std::string XLXmlFile::xmlData() const
109
+ {
110
+ return m_xmlData->getRawData();
111
+ }
112
+
113
+ /**
114
+ * @details
115
+ */
116
+ const XLDocument& XLXmlFile::parentDoc() const
117
+ {
118
+ return *m_xmlData->getParentDoc();
119
+ }
120
+
121
+ /**
122
+ * @details
123
+ */
124
+ XLDocument& XLXmlFile::parentDoc()
125
+ {
126
+ return *m_xmlData->getParentDoc();
127
+ }
128
+
129
+ /**
130
+ * @details
131
+ */
132
+ std::string XLXmlFile::relationshipID() const
133
+ {
134
+ return m_xmlData->getXmlID();
135
+ }
136
+
137
+ /**
138
+ * @details This method returns a pointer to the underlying XMLDocument resource.
139
+ */
140
+ XMLDocument& XLXmlFile::xmlDocument()
141
+ {
142
+ return const_cast<XMLDocument&>(static_cast<const XLXmlFile*>(this)->xmlDocument()); // NOLINT
143
+ // return *m_xmlData->getXmlDocument(); // <- why not this easy version?
144
+ }
145
+
146
+ /**
147
+ * @details This method returns a pointer to the underlying XMLDocument resource as const.
148
+ */
149
+ const XMLDocument& XLXmlFile::xmlDocument() const
150
+ {
151
+ return *m_xmlData->getXmlDocument();
152
+ }
153
+
154
+ /**
155
+ * @details provide access to the underlying XLXmlData::getXmlPath() function
156
+ */
157
+ std::string XLXmlFile::getXmlPath() const
158
+ {
159
+ return m_xmlData == nullptr ? "" : m_xmlData->getXmlPath();
160
+ }
@@ -0,0 +1,261 @@
1
+ /*
2
+
3
+ ____ ____ ___ ____ ____ ____ ___
4
+ 6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
5
+ 8P Y8 `MM. d' MM 6M' ` `MM. d'
6
+ 6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
7
+ MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
8
+ MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
9
+ MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
10
+ MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
11
+ YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
12
+ 8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
13
+ YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
14
+ MM
15
+ MM
16
+ _MM_
17
+
18
+ Copyright (c) 2018, Kenneth Troldal Balslev
19
+
20
+ All rights reserved.
21
+
22
+ Redistribution and use in source and binary forms, with or without
23
+ modification, are permitted provided that the following conditions are met:
24
+ - Redistributions of source code must retain the above copyright
25
+ notice, this list of conditions and the following disclaimer.
26
+ - Redistributions in binary form must reproduce the above copyright
27
+ notice, this list of conditions and the following disclaimer in the
28
+ documentation and/or other materials provided with the distribution.
29
+ - Neither the name of the author nor the
30
+ names of any contributors may be used to endorse or promote products
31
+ derived from this software without specific prior written permission.
32
+
33
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
34
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
37
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
39
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
+
44
+ */
45
+
46
+ // ===== External Includes ===== //
47
+ #include <cstring> // strlen, memcpy, strcpy
48
+
49
+ // // ===== OpenXLSX Includes ===== //
50
+ #include "XLXmlParser.hpp"
51
+
52
+ namespace OpenXLSX
53
+ {
54
+ bool NO_XML_NS = true; // default: no XML namespaces
55
+ /**
56
+ * @details this function is meaningless when PUGI_AUGMENTED is not defined / used
57
+ */
58
+ bool enable_xml_namespaces()
59
+ {
60
+ # ifdef PUGI_AUGMENTED
61
+ NO_XML_NS = false;
62
+ return true;
63
+ # else
64
+ return false;
65
+ # endif
66
+ }
67
+ /**
68
+ * @details this function is meaningless when PUGI_AUGMENTED is not defined / used
69
+ */
70
+ bool disable_xml_namespaces()
71
+ {
72
+ # ifdef PUGI_AUGMENTED
73
+ NO_XML_NS = true;
74
+ return true;
75
+ # else
76
+ return false;
77
+ # endif
78
+ }
79
+
80
+
81
+ /**
82
+ * @brief provide a PUGIXML_WCHAR_MODE compatible strequal
83
+ * @param src operand
84
+ * @param dst operand
85
+ * @return true if operands are not null and equal
86
+ */
87
+ bool strequal(const pugi::char_t* src, const pugi::char_t* dst)
88
+ {
89
+ if( !src || !dst ) return false;
90
+ #ifdef PUGIXML_WCHAR_MODE
91
+ return wcscmp(src, dst) == 0;
92
+ #else
93
+ return strcmp(src, dst) == 0;
94
+ #endif
95
+ }
96
+
97
+ /**
98
+ * @details return the node name without a potentially(!) existing namespace
99
+ */
100
+ const pugi::char_t* XMLNode::name_without_namespace(const pugi::char_t* name_) const
101
+ {
102
+ if (NO_XML_NS) return name_; // if node namespaces are not stripped: return immediately
103
+ int pos = 0;
104
+ while (name_[pos] && name_[pos] != ':') ++pos; // find namespace delimiter
105
+ if (!name_[pos]) return name_; // if no delimiter found: return unmodified name
106
+ return name_ + pos + 1; // if delimiter was found: return the name minus the namespace
107
+ }
108
+
109
+ /**
110
+ * @details for creation of node children: copy this node's namespace without thread safety, using
111
+ * a static character array to avoid smart pointer performance impact
112
+ */
113
+ const pugi::char_t* XMLNode::namespaced_name_char(const pugi::char_t* name_, bool force_ns) const
114
+ {
115
+ // ===== If node has no namespace: Early pass-through return
116
+ if (!name_begin || force_ns) return name_;
117
+ if( name_begin + strlen(name_) > XLMaxNamespacedNameLen ) {
118
+ using namespace std::literals::string_literals;
119
+ throw XLException("OpenXLSX_xml_node::"s + __func__ + ": strlen of "s + name_ + " exceeds XLMaxNamespacedNameLen "s + std::to_string(XLMaxNamespacedNameLen));
120
+ }
121
+
122
+ static pugi::char_t namespaced_name_[ XLMaxNamespacedNameLen + 1 ]; // static memory allocation for concatenating node namespace and name_
123
+
124
+ // ===== If node has a namespace: create a namespaced version of name_
125
+ memcpy(namespaced_name_, xml_node::name(), name_begin); // copy the node namespace
126
+ strcpy(namespaced_name_ + name_begin, name_); // concatenate the name_ including the terminating zero
127
+ return namespaced_name_;
128
+ }
129
+
130
+ /**
131
+ * @details for creation of node children: copy this node's namespace with thread safety, using
132
+ * smart pointer with a trade-off for ~15-20% performance impact (increased runtime)
133
+ * @note // 2024-08-18: made lambda parameter unnamed to eliminate -Wunused-parameter
134
+ */
135
+ std::shared_ptr<pugi::char_t> XMLNode::namespaced_name_shared_ptr(const pugi::char_t* name_, bool force_ns) const
136
+ {
137
+ // ===== If node has no namespace: Early pass-through return with noop-deleter
138
+ if (!name_begin || force_ns) return std::shared_ptr<pugi::char_t>(const_cast<pugi::char_t*>(name_), [](pugi::char_t*){});
139
+
140
+ // ===== If node has a namespace: allocate memory for concatenation and create a namespaced version of name_
141
+ std::shared_ptr<pugi::char_t> namespaced_name_ (new pugi::char_t[name_begin + strlen(name_) + 1], std::default_delete<pugi::char_t[]>());
142
+ memcpy(namespaced_name_.get(), xml_node::name(), name_begin); // copy the node namespace
143
+ strcpy(namespaced_name_.get() + name_begin, name_); // concatenate the name_ with terminating zero
144
+ return namespaced_name_;
145
+ }
146
+
147
+ /**
148
+ * @details determine the first xml_node child whose xml_node_type matches type_
149
+ * @date 2024-04-25
150
+ */
151
+ XMLNode XMLNode::first_child_of_type(pugi::xml_node_type type_) const
152
+ {
153
+ if (_root) {
154
+ XMLNode x = first_child();
155
+ XMLNode l = last_child();
156
+ while (x != l && x.type() != type_) x = x.next_sibling();
157
+ if (x.type() == type_)
158
+ return XMLNode(x);
159
+ }
160
+ return XMLNode(); // if no node matching type_ was found: return an empty node
161
+ }
162
+
163
+ /**
164
+ * @details determine the last xml_node child whose xml_node_type matches type_
165
+ * @date 2024-04-25
166
+ */
167
+ XMLNode XMLNode::last_child_of_type(pugi::xml_node_type type_) const
168
+ {
169
+ if (_root) {
170
+ XMLNode f = first_child();
171
+ XMLNode x = last_child();
172
+ while (x != f && x.type() != type_) x = x.previous_sibling();
173
+ if (x.type() == type_)
174
+ return XMLNode(x);
175
+ }
176
+ return XMLNode(); // if no node matching type_ was found: return an empty node
177
+ }
178
+
179
+ /**
180
+ * @details determine amount of xml_node children child whose xml_node_type matches type_
181
+ * @date 2024-04-28
182
+ */
183
+ size_t XMLNode::child_count_of_type(pugi::xml_node_type type_) const
184
+ {
185
+ size_t counter = 0;
186
+ if (_root) {
187
+ XMLNode c = first_child_of_type(type_);
188
+ while (!c.empty()) {
189
+ ++counter;
190
+ c = c.next_sibling_of_type(type_);
191
+ }
192
+ }
193
+ return counter;
194
+ }
195
+
196
+ /**
197
+ * @details determine the next xml_node sibling whose xml_node_type matches type_
198
+ * @date 2024-04-26
199
+ */
200
+ XMLNode XMLNode::next_sibling_of_type(pugi::xml_node_type type_) const
201
+ {
202
+ if (_root) {
203
+ XMLNode next = next_sibling();
204
+ while (next && next.type() != type_) next = next.next_sibling();
205
+ if (next)
206
+ return XMLNode(next);
207
+ }
208
+ return XMLNode(); // if no node matching type_ was found: return an empty node
209
+ }
210
+
211
+ /**
212
+ * @details determine the previous xml_node sibling whose xml_node_type matches type_
213
+ * @date 2024-04-26
214
+ */
215
+ XMLNode XMLNode::previous_sibling_of_type(pugi::xml_node_type type_) const
216
+ {
217
+ if (_root) {
218
+ XMLNode prev = previous_sibling();
219
+ while (prev.next_sibling() && prev.type() != type_) prev = prev.previous_sibling();
220
+ if (prev.next_sibling())
221
+ return XMLNode(prev);
222
+ }
223
+ return XMLNode(); // if no node matching type_ was found: return an empty node
224
+ }
225
+
226
+ /**
227
+ * @details determine the next xml_node sibling whose name() matches name_ and xml_node_type matches type_
228
+ * @date 2024-04-26
229
+ */
230
+ XMLNode XMLNode::next_sibling_of_type(const pugi::char_t* name_, pugi::xml_node_type type_) const
231
+ {
232
+ if (_root) {
233
+ for (XMLNode i = next_sibling(); i; i = i.next_sibling())
234
+ {
235
+ const pugi::char_t* iname = i.name();
236
+ if (iname && OpenXLSX::strequal(name_, iname) && i.type() == type_)
237
+ return XMLNode(i);
238
+ }
239
+ }
240
+ return XMLNode(); // if no node matching type_ was found: return an empty node
241
+ }
242
+
243
+ /**
244
+ * @details determine the previous xml_node sibling whose name() matches name_ and xml_node_type matches type_
245
+ * @date 2024-04-26
246
+ */
247
+ XMLNode XMLNode::previous_sibling_of_type(const pugi::char_t* name_, pugi::xml_node_type type_) const
248
+ {
249
+ if (_root) {
250
+ for (XMLNode i = previous_sibling(); i.next_sibling(); i = i.previous_sibling())
251
+ {
252
+ const pugi::char_t* iname = i.name();
253
+ if (iname && OpenXLSX::strequal(name_, iname) && i.type() == type_)
254
+ return XMLNode(i);
255
+ }
256
+ }
257
+ return XMLNode(); // if no node matching type_ was found: return an empty node
258
+ }
259
+
260
+ } // namespace OpenXLSX
261
+