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.
- package/NitroXlsx.podspec +26 -27
- package/Package.swift +31 -10
- package/README.md +1 -1
- package/android/CMakeLists.txt +20 -27
- package/package.json +2 -2
- package/scripts/run-cpp-tests.sh +1 -1
- package/thirdparty/OpenXLSX/.clang-format +118 -0
- package/thirdparty/OpenXLSX/.clang-tidy +28 -0
- package/thirdparty/OpenXLSX/.gitignore +130 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
- package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
- package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
- package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
- package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
- package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
- package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
- package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
- package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
- package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
- package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
- package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
- package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
- package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
- package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
- package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
- package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
- package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
- package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
- package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
- package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
- package/thirdparty/OpenXLSX/LICENSE.md +29 -0
- package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
- package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
- package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
- package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
- package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
- package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
- package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
- package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
- package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
- package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
- package/thirdparty/OpenXLSX/README.md +1279 -0
- package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
- package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
- package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
- package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
- package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
- package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
- package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
- package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
- package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
- package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
- package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
- package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
- package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
- package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
- package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
- package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
- package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
- package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
- package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
- package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
- package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
- package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
- package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
- package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
- package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
- package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
- package/thirdparty/OpenXLSX/vcpkg.json +24 -0
- package/thirdparty/README.md +42 -0
- package/thirdparty/miniz/.clang-format +47 -0
- package/thirdparty/miniz/.travis.yml +2 -0
- package/thirdparty/miniz/CMakeLists.txt +333 -0
- package/thirdparty/miniz/CMakePresets.json +31 -0
- package/thirdparty/miniz/ChangeLog.md +272 -0
- package/thirdparty/miniz/Config.cmake.in +1 -0
- package/thirdparty/miniz/LICENSE +22 -0
- package/thirdparty/miniz/amalgamate.sh +57 -0
- package/thirdparty/miniz/examples/example1.c +105 -0
- package/thirdparty/miniz/examples/example2.c +164 -0
- package/thirdparty/miniz/examples/example3.c +269 -0
- package/thirdparty/miniz/examples/example4.c +102 -0
- package/thirdparty/miniz/examples/example5.c +327 -0
- package/thirdparty/miniz/examples/example6.c +189 -0
- package/thirdparty/miniz/meson.build +21 -0
- package/thirdparty/miniz/miniz.c +646 -0
- package/thirdparty/miniz/miniz.h +615 -0
- package/thirdparty/miniz/miniz.pc.in +13 -0
- package/thirdparty/miniz/miniz_common.h +89 -0
- package/thirdparty/miniz/miniz_export.h +20 -0
- package/thirdparty/miniz/miniz_tdef.c +1602 -0
- package/thirdparty/miniz/miniz_tdef.h +199 -0
- package/thirdparty/miniz/miniz_tinfl.c +778 -0
- package/thirdparty/miniz/miniz_tinfl.h +150 -0
- package/thirdparty/miniz/miniz_zip.c +4895 -0
- package/thirdparty/miniz/miniz_zip.h +454 -0
- package/thirdparty/miniz/readme.md +46 -0
- package/thirdparty/miniz/test.sh +36 -0
- package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
- package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
- package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
- package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
- package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
- package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
- package/thirdparty/miniz/tests/fuzz_main.c +55 -0
- package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
- package/thirdparty/miniz/tests/main.cpp +185 -0
- package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
- package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
- package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
- package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
- package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
- package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
- package/thirdparty/miniz/tests/timer.cpp +152 -0
- package/thirdparty/miniz/tests/timer.h +40 -0
- package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
- package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
- package/thirdparty/miniz/tests/zip.dict +9 -0
- package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
- package/thirdparty/pugixml/.codecov.yml +7 -0
- package/thirdparty/pugixml/.gitattributes +1 -0
- package/thirdparty/pugixml/CMakeLists.txt +330 -0
- package/thirdparty/pugixml/LICENSE.md +24 -0
- package/thirdparty/pugixml/Makefile +98 -0
- package/thirdparty/pugixml/README.md +81 -0
- package/thirdparty/pugixml/SECURITY.md +9 -0
- package/thirdparty/pugixml/appveyor.yml +50 -0
- package/thirdparty/pugixml/docs/config.adoc +7 -0
- package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
- package/thirdparty/pugixml/docs/manual.adoc +3326 -0
- package/thirdparty/pugixml/docs/manual.html +6395 -0
- package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
- package/thirdparty/pugixml/docs/quickstart.html +1107 -0
- package/thirdparty/pugixml/docs/samples/character.xml +8 -0
- package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
- package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
- package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
- package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
- package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
- package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
- package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
- package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
- package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
- package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
- package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
- package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
- package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
- package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
- package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
- package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
- package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
- package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
- package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
- package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
- package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
- package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
- package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
- package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
- package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
- package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
- package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
- package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
- package/thirdparty/pugixml/readme.txt +50 -0
- package/thirdparty/pugixml/scripts/archive.py +54 -0
- package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
- package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
- package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
- package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
- package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
- package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
- package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
- package/thirdparty/pugixml/scripts/premake4.lua +92 -0
- package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
- package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
- package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
- package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
- package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
- package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
- package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
- package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
- package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
- package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
- package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
- package/thirdparty/pugixml/tests/allocator.cpp +175 -0
- package/thirdparty/pugixml/tests/allocator.hpp +10 -0
- package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
- package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
- package/thirdparty/pugixml/tests/data/empty.xml +0 -0
- package/thirdparty/pugixml/tests/data/large.xml +1 -0
- package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
- package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
- package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
- package/thirdparty/pugixml/tests/data/small.xml +1 -0
- package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
- package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
- package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
- package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
- package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
- package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
- package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
- package/thirdparty/pugixml/tests/helpers.hpp +114 -0
- package/thirdparty/pugixml/tests/main.cpp +218 -0
- package/thirdparty/pugixml/tests/test.cpp +220 -0
- package/thirdparty/pugixml/tests/test.hpp +175 -0
- package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
- package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
- package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
- package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
- package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
- package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
- package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
- package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
- package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
- package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
- package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
- package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
- package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
- package/thirdparty/pugixml/tests/test_version.cpp +5 -0
- package/thirdparty/pugixml/tests/test_write.cpp +757 -0
- package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
- package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
- package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
- package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
- package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
- package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
- package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
- package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
- package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
- package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
- package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
- 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
|
+
}
|