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,175 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
____ ____ ___ ____ ____ ____ ___
|
|
4
|
+
6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
|
|
5
|
+
8P Y8 `MM. d' MM 6M' ` `MM. d'
|
|
6
|
+
6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
|
|
7
|
+
MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
|
|
8
|
+
MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
|
|
9
|
+
MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
|
|
10
|
+
MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
|
|
11
|
+
YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
|
|
12
|
+
8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
|
|
13
|
+
YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
|
|
14
|
+
MM
|
|
15
|
+
MM
|
|
16
|
+
_MM_
|
|
17
|
+
|
|
18
|
+
Copyright (c) 2018, Kenneth Troldal Balslev
|
|
19
|
+
|
|
20
|
+
All rights reserved.
|
|
21
|
+
|
|
22
|
+
Redistribution and use in source and binary forms, with or without
|
|
23
|
+
modification, are permitted provided that the following conditions are met:
|
|
24
|
+
- Redistributions of source code must retain the above copyright
|
|
25
|
+
notice, this list of conditions and the following disclaimer.
|
|
26
|
+
- Redistributions in binary form must reproduce the above copyright
|
|
27
|
+
notice, this list of conditions and the following disclaimer in the
|
|
28
|
+
documentation and/or other materials provided with the distribution.
|
|
29
|
+
- Neither the name of the author nor the
|
|
30
|
+
names of any contributors may be used to endorse or promote products
|
|
31
|
+
derived from this software without specific prior written permission.
|
|
32
|
+
|
|
33
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
34
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
35
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
36
|
+
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
37
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
38
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
39
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
40
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
41
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
42
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
43
|
+
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
#ifndef OPENXLSX_XLDATETIME_HPP
|
|
47
|
+
#define OPENXLSX_XLDATETIME_HPP
|
|
48
|
+
|
|
49
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
50
|
+
# pragma warning(push)
|
|
51
|
+
# pragma warning(disable : 4251)
|
|
52
|
+
# pragma warning(disable : 4275)
|
|
53
|
+
#endif // _MSC_VER
|
|
54
|
+
|
|
55
|
+
// ===== External Includes ===== //
|
|
56
|
+
#include <ctime>
|
|
57
|
+
|
|
58
|
+
// ===== OpenXLSX Includes ===== //
|
|
59
|
+
#include "OpenXLSX-Exports.hpp"
|
|
60
|
+
#include "XLException.hpp"
|
|
61
|
+
|
|
62
|
+
// ========== CLASS AND ENUM TYPE DEFINITIONS ========== //
|
|
63
|
+
namespace OpenXLSX
|
|
64
|
+
{
|
|
65
|
+
class OPENXLSX_EXPORT XLDateTime
|
|
66
|
+
{
|
|
67
|
+
public:
|
|
68
|
+
/**
|
|
69
|
+
* @brief Constructor.
|
|
70
|
+
*/
|
|
71
|
+
XLDateTime();
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @brief Constructor taking an Excel time point serial number as an argument.
|
|
75
|
+
* @param serial Excel time point serial number.
|
|
76
|
+
*/
|
|
77
|
+
explicit XLDateTime(double serial);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @brief Constructor taking a std::tm struct as an argument.
|
|
81
|
+
* @param timepoint A std::tm struct.
|
|
82
|
+
*/
|
|
83
|
+
explicit XLDateTime(const std::tm& timepoint);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @brief Constructor taking a unixtime format (seconds since 1/1/1970) as an argument.
|
|
87
|
+
* @param unixtime A time_t number.
|
|
88
|
+
*/
|
|
89
|
+
explicit XLDateTime(time_t unixtime);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @brief Copy constructor.
|
|
93
|
+
* @param other Object to be copied.
|
|
94
|
+
*/
|
|
95
|
+
XLDateTime(const XLDateTime& other);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @brief Move constructor.
|
|
99
|
+
* @param other Object to be moved.
|
|
100
|
+
*/
|
|
101
|
+
XLDateTime(XLDateTime&& other) noexcept;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @brief Destructor
|
|
105
|
+
*/
|
|
106
|
+
~XLDateTime();
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @brief Copy assignment operator.
|
|
110
|
+
* @param other Object to be copied.
|
|
111
|
+
* @return Reference to the copied-to object.
|
|
112
|
+
*/
|
|
113
|
+
XLDateTime& operator=(const XLDateTime& other);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @brief Move assignment operator.
|
|
117
|
+
* @param other Object to be moved.
|
|
118
|
+
* @return Reference to the moved-to object.
|
|
119
|
+
*/
|
|
120
|
+
XLDateTime& operator=(XLDateTime&& other) noexcept;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @brief Assignment operator taking an Excel date/time serial number as an argument.
|
|
124
|
+
* @param serial A floating point value with the serial number.
|
|
125
|
+
* @return Reference to the copied-to object.
|
|
126
|
+
*/
|
|
127
|
+
XLDateTime& operator=(double serial);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @brief Assignment operator taking a std::tm object as an argument.
|
|
131
|
+
* @param timepoint std::tm object with the time point
|
|
132
|
+
* @return Reference to the copied-to object.
|
|
133
|
+
*/
|
|
134
|
+
XLDateTime& operator=(const std::tm& timepoint);
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @brief Implicit conversion to Excel date/time serial number (any floating point type).
|
|
138
|
+
* @tparam T Type to convert to (any floating point type).
|
|
139
|
+
* @return Excel date/time serial number.
|
|
140
|
+
*/
|
|
141
|
+
template<typename T,
|
|
142
|
+
typename = std::enable_if_t<std::is_floating_point_v<T>>>
|
|
143
|
+
operator T() const // NOLINT
|
|
144
|
+
{
|
|
145
|
+
return serial();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* @brief Implicit conversion to std::tm object.
|
|
150
|
+
* @return std::tm object.
|
|
151
|
+
*/
|
|
152
|
+
operator std::tm() const; // NOLINT
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @brief Get the date/time in the form of an Excel date/time serial number.
|
|
156
|
+
* @return A double with the serial number.
|
|
157
|
+
*/
|
|
158
|
+
double serial() const;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @brief Get the date/time in the form of a std::tm struct.
|
|
162
|
+
* @return A std::tm struct with the time point.
|
|
163
|
+
*/
|
|
164
|
+
std::tm tm() const;
|
|
165
|
+
|
|
166
|
+
private:
|
|
167
|
+
double m_serial { 1.0 }; /**< */
|
|
168
|
+
};
|
|
169
|
+
} // namespace OpenXLSX
|
|
170
|
+
|
|
171
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
172
|
+
# pragma warning(pop)
|
|
173
|
+
#endif // _MSC_VER
|
|
174
|
+
|
|
175
|
+
#endif // OPENXLSX_XLDATETIME_HPP
|
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
____ ____ ___ ____ ____ ____ ___
|
|
4
|
+
6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
|
|
5
|
+
8P Y8 `MM. d' MM 6M' ` `MM. d'
|
|
6
|
+
6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
|
|
7
|
+
MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
|
|
8
|
+
MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
|
|
9
|
+
MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
|
|
10
|
+
MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
|
|
11
|
+
YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
|
|
12
|
+
8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
|
|
13
|
+
YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
|
|
14
|
+
MM
|
|
15
|
+
MM
|
|
16
|
+
_MM_
|
|
17
|
+
|
|
18
|
+
Copyright (c) 2018, Kenneth Troldal Balslev
|
|
19
|
+
|
|
20
|
+
All rights reserved.
|
|
21
|
+
|
|
22
|
+
Redistribution and use in source and binary forms, with or without
|
|
23
|
+
modification, are permitted provided that the following conditions are met:
|
|
24
|
+
- Redistributions of source code must retain the above copyright
|
|
25
|
+
notice, this list of conditions and the following disclaimer.
|
|
26
|
+
- Redistributions in binary form must reproduce the above copyright
|
|
27
|
+
notice, this list of conditions and the following disclaimer in the
|
|
28
|
+
documentation and/or other materials provided with the distribution.
|
|
29
|
+
- Neither the name of the author nor the
|
|
30
|
+
names of any contributors may be used to endorse or promote products
|
|
31
|
+
derived from this software without specific prior written permission.
|
|
32
|
+
|
|
33
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
34
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
35
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
36
|
+
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
37
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
38
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
39
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
40
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
41
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
42
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
43
|
+
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
#ifndef OPENXLSX_XLDOCUMENT_HPP
|
|
47
|
+
#define OPENXLSX_XLDOCUMENT_HPP
|
|
48
|
+
|
|
49
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
50
|
+
# pragma warning(push)
|
|
51
|
+
# pragma warning(disable : 4251)
|
|
52
|
+
# pragma warning(disable : 4275)
|
|
53
|
+
#endif // _MSC_VER
|
|
54
|
+
|
|
55
|
+
// ===== External Includes ===== //
|
|
56
|
+
#include <algorithm> // std::find_if
|
|
57
|
+
#include <list>
|
|
58
|
+
#include <string>
|
|
59
|
+
|
|
60
|
+
// ===== OpenXLSX Includes ===== //
|
|
61
|
+
#include "IZipArchive.hpp"
|
|
62
|
+
#include "OpenXLSX-Exports.hpp"
|
|
63
|
+
#include "XLCommandQuery.hpp"
|
|
64
|
+
#include "XLComments.hpp"
|
|
65
|
+
#include "XLContentTypes.hpp"
|
|
66
|
+
#include "XLDrawing.hpp"
|
|
67
|
+
#include "XLProperties.hpp"
|
|
68
|
+
#include "XLRelationships.hpp"
|
|
69
|
+
#include "XLSharedStrings.hpp"
|
|
70
|
+
#include "XLStyles.hpp"
|
|
71
|
+
#include "XLTables.hpp"
|
|
72
|
+
#include "XLWorkbook.hpp"
|
|
73
|
+
#include "XLXmlData.hpp"
|
|
74
|
+
#include "XLZipArchive.hpp"
|
|
75
|
+
|
|
76
|
+
namespace OpenXLSX
|
|
77
|
+
{
|
|
78
|
+
extern const unsigned int pugi_parse_settings; // defined in XLDocument.cpp
|
|
79
|
+
|
|
80
|
+
constexpr const bool XLForceOverwrite = true; // readability constant for 2nd parameter of XLDocument::saveAs
|
|
81
|
+
constexpr const bool XLDoNotOverwrite = false; // "
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @brief The XLDocumentProperties class is an enumeration of the possible properties (metadata) that can be set
|
|
85
|
+
* for a XLDocument object (and .xlsx file)
|
|
86
|
+
*/
|
|
87
|
+
enum class XLProperty {
|
|
88
|
+
Title,
|
|
89
|
+
Subject,
|
|
90
|
+
Creator,
|
|
91
|
+
Keywords,
|
|
92
|
+
Description,
|
|
93
|
+
LastModifiedBy,
|
|
94
|
+
LastPrinted,
|
|
95
|
+
CreationDate,
|
|
96
|
+
ModificationDate,
|
|
97
|
+
Category,
|
|
98
|
+
Application,
|
|
99
|
+
DocSecurity,
|
|
100
|
+
ScaleCrop,
|
|
101
|
+
Manager,
|
|
102
|
+
Company,
|
|
103
|
+
LinksUpToDate,
|
|
104
|
+
SharedDoc,
|
|
105
|
+
HyperlinkBase,
|
|
106
|
+
HyperlinksChanged,
|
|
107
|
+
AppVersion
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @brief This class encapsulates the concept of an excel file. It is different from the XLWorkbook, in that an
|
|
112
|
+
* XLDocument holds an XLWorkbook together with its metadata, as well as methods for opening,
|
|
113
|
+
* closing and saving the document.\n<b><em>The XLDocument is the entrypoint for clients
|
|
114
|
+
* using the RapidXLSX library.</em></b>
|
|
115
|
+
*/
|
|
116
|
+
class OPENXLSX_EXPORT XLDocument final
|
|
117
|
+
{
|
|
118
|
+
//----- Friends
|
|
119
|
+
friend class XLXmlFile;
|
|
120
|
+
friend class XLWorkbook;
|
|
121
|
+
friend class XLSheet;
|
|
122
|
+
friend class XLXmlData;
|
|
123
|
+
|
|
124
|
+
//---------- Public Member Functions
|
|
125
|
+
public:
|
|
126
|
+
/**
|
|
127
|
+
* @brief Constructor. The default constructor with no arguments.
|
|
128
|
+
*/
|
|
129
|
+
explicit XLDocument(const IZipArchive& zipArchive = XLZipArchive());
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @brief Constructor. An alternative constructor, taking the path to the .xlsx file as an argument.
|
|
133
|
+
* @param docPath A std::string with the path to the .xlsx file.
|
|
134
|
+
* @param zipArchive
|
|
135
|
+
*/
|
|
136
|
+
explicit XLDocument(const std::string& docPath, const IZipArchive& zipArchive = XLZipArchive());
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @brief Copy constructor
|
|
140
|
+
* @param other XLDocument to copy
|
|
141
|
+
* @note Copy constructor explicitly deleted.
|
|
142
|
+
*/
|
|
143
|
+
XLDocument(const XLDocument& other) = delete;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @brief Move constructor
|
|
147
|
+
* @param other XLDocument to construct from
|
|
148
|
+
*/
|
|
149
|
+
XLDocument(XLDocument&& other) noexcept;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @brief Destructor
|
|
153
|
+
*/
|
|
154
|
+
~XLDocument();
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @brief
|
|
158
|
+
* @param other
|
|
159
|
+
* @return
|
|
160
|
+
*/
|
|
161
|
+
XLDocument& operator=(const XLDocument& other) = delete;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @brief move assignment operator
|
|
165
|
+
* @param other
|
|
166
|
+
* @return
|
|
167
|
+
*/
|
|
168
|
+
XLDocument& operator=(XLDocument&& other) noexcept;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @brief ensure that warnings are shown (default setting)
|
|
172
|
+
*/
|
|
173
|
+
void showWarnings();
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @brief ensure that warnings are suppressed where this parameter is supported (currently only XLStyles)
|
|
177
|
+
*/
|
|
178
|
+
void suppressWarnings();
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @brief Open the .xlsx file with the given path
|
|
182
|
+
* @param fileName The path of the .xlsx file to open
|
|
183
|
+
*/
|
|
184
|
+
void open(const std::string& fileName);
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @brief Create a new .xlsx file with the given name.
|
|
188
|
+
* @param fileName The path of the new .xlsx file.
|
|
189
|
+
* @param forceOverwrite If not true (XLForceOverwrite) and fileName exists, create will throw an exception
|
|
190
|
+
* @throw XLException (OpenXLSX failed checks)
|
|
191
|
+
* @throw ZipRuntimeError (zippy failed archive / file access)
|
|
192
|
+
*/
|
|
193
|
+
void create(const std::string& fileName, bool forceOverwrite);
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @brief Create a new .xlsx file with the given name. Legacy interface, invokes create( fileName, XLForceOverwrite )
|
|
197
|
+
* @param fileName The path of the new .xlsx file.
|
|
198
|
+
* @deprecated use instead void create(const std::string& fileName, bool forceOverwrite)
|
|
199
|
+
* @warning Overwriting an existing file is retained as legacy behavior, but can lead to data loss!
|
|
200
|
+
*/
|
|
201
|
+
[[deprecated]] void create(const std::string& fileName);
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @brief Close the current document
|
|
205
|
+
*/
|
|
206
|
+
void close();
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* @brief Save the current document using the current filename, overwriting the existing file.
|
|
210
|
+
* @throw XLException (OpenXLSX failed checks)
|
|
211
|
+
* @throw ZipRuntimeError (zippy failed archive / file access)
|
|
212
|
+
*/
|
|
213
|
+
void save();
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @brief Save the document with a new name. If a file exists with that name, it will be overwritten.
|
|
217
|
+
* @param fileName The path of the file
|
|
218
|
+
* @param forceOverwrite If not true (XLForceOverwrite) and fileName exists, saveAs will throw an exception
|
|
219
|
+
* @throw XLException (OpenXLSX failed checks)
|
|
220
|
+
* @throw ZipRuntimeError (zippy failed archive / file access)
|
|
221
|
+
*/
|
|
222
|
+
void saveAs(const std::string& fileName, bool forceOverwrite);
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* @brief Save the document with a new name. Legacy interface, invokes saveAs( fileName, XLForceOverwrite )
|
|
226
|
+
* @param fileName The path of the file
|
|
227
|
+
* @deprecated use instead void saveAs(const std::string& fileName, bool forceOverwrite)
|
|
228
|
+
* @warning Overwriting an existing file is retained as legacy behavior, but can lead to data loss!
|
|
229
|
+
*/
|
|
230
|
+
[[deprecated]] void saveAs(const std::string& fileName);
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @brief Get the filename of the current document, e.g. "spreadsheet.xlsx".
|
|
234
|
+
* @return A std::string with the filename.
|
|
235
|
+
* @note 2024-06-03: function can't return as reference to const because filename as a substr of m_filePath can be a temporary
|
|
236
|
+
* @note 2024-07-28: Removed const from return type
|
|
237
|
+
*/
|
|
238
|
+
std::string name() const;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @brief Get the full path of the current document, e.g. "drive/blah/spreadsheet.xlsx"
|
|
242
|
+
* @return A std::string with the path.
|
|
243
|
+
*/
|
|
244
|
+
const std::string& path() const;
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* @brief Get the underlying workbook object, as a const object.
|
|
248
|
+
* @return A const pointer to the XLWorkbook object.
|
|
249
|
+
*/
|
|
250
|
+
XLWorkbook workbook() const;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* @brief Get the requested document property.
|
|
254
|
+
* @param prop The name of the property to get.
|
|
255
|
+
* @return The property as a string
|
|
256
|
+
*/
|
|
257
|
+
std::string property(XLProperty prop) const;
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* @brief Set a property
|
|
261
|
+
* @param prop The property to set.
|
|
262
|
+
* @param value The getValue of the property, as a string
|
|
263
|
+
*/
|
|
264
|
+
void setProperty(XLProperty prop, const std::string& value);
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @brief Delete the property from the document
|
|
268
|
+
* @param theProperty The property to delete from the document
|
|
269
|
+
*/
|
|
270
|
+
void deleteProperty(XLProperty theProperty);
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @brief
|
|
274
|
+
* @return
|
|
275
|
+
*/
|
|
276
|
+
explicit operator bool() const;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* @brief
|
|
280
|
+
* @return
|
|
281
|
+
*/
|
|
282
|
+
bool isOpen() const;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @brief return a handle on the workbook's styles
|
|
286
|
+
* @return a reference to m_styles
|
|
287
|
+
*/
|
|
288
|
+
XLStyles& styles();
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @brief determine whether a worksheet relationships file exists for sheetXmlNo
|
|
292
|
+
* @param sheetXmlNo check for this sheet number # (xl/worksheets/_reals/sheet#.xml.rels)
|
|
293
|
+
* @return true if relationships file exists
|
|
294
|
+
*/
|
|
295
|
+
bool hasSheetRelationships(uint16_t sheetXmlNo) const;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* @brief determine whether a worksheet vml drawing file exists for sheetXmlNo
|
|
299
|
+
* @param sheetXmlNo check for this sheet number # (xl/drawings/vmlDrawing#.xml)
|
|
300
|
+
* @return true if vml drawing file exists
|
|
301
|
+
*/
|
|
302
|
+
bool hasSheetVmlDrawing(uint16_t sheetXmlNo) const;
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* @brief determine whether a worksheet comments file exists for sheetXmlNo
|
|
306
|
+
* @param sheetXmlNo check for this sheet number # (xl/comments#.xml)
|
|
307
|
+
* @return true if comments file exists
|
|
308
|
+
*/
|
|
309
|
+
bool hasSheetComments(uint16_t sheetXmlNo) const;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @brief determine whether a worksheet table(s) file exists for sheetXmlNo
|
|
313
|
+
* @param sheetXmlNo check for this sheet number # (xl/tables/table#.xml)
|
|
314
|
+
* @return true if table(s) file exists
|
|
315
|
+
*/
|
|
316
|
+
bool hasSheetTables(uint16_t sheetXmlNo) const;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @brief fetch the worksheet relationships for sheetXmlNo, create the file if it does not exist
|
|
320
|
+
* @param sheetXmlNo fetch for this sheet #
|
|
321
|
+
* @return an XLRelationships object initialized with the sheet relationships
|
|
322
|
+
*/
|
|
323
|
+
XLRelationships sheetRelationships(uint16_t sheetXmlNo);
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* @brief fetch the worksheet VML drawing for sheetXmlNo, create the file if it does not exist
|
|
327
|
+
* @param sheetXmlNo fetch for this sheet #
|
|
328
|
+
* @return an XLVmlDrawing object initialized with the sheet drawing
|
|
329
|
+
*/
|
|
330
|
+
XLVmlDrawing sheetVmlDrawing(uint16_t sheetXmlNo);
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* @brief fetch the worksheet comments for sheetXmlNo, create the file if it does not exist
|
|
334
|
+
* @param sheetXmlNo fetch for this sheet #
|
|
335
|
+
* @return an XLComments object initialized with the sheet comments
|
|
336
|
+
*/
|
|
337
|
+
XLComments sheetComments(uint16_t sheetXmlNo);
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @brief fetch the worksheet tables for sheetXmlNo, create the file if it does not exist
|
|
341
|
+
* @param sheetXmlNo fetch for this sheet #
|
|
342
|
+
* @return an XLTables object initialized with the sheet tables
|
|
343
|
+
*/
|
|
344
|
+
XLTables sheetTables(uint16_t sheetXmlNo);
|
|
345
|
+
|
|
346
|
+
public:
|
|
347
|
+
/**
|
|
348
|
+
* @brief validate whether sheetName is a valid Excel worksheet name
|
|
349
|
+
* @param sheetName the desired name
|
|
350
|
+
* @param throwOnInvalid (default: false) if true, invalid sheetName will throw exception
|
|
351
|
+
* @return true if sheetName can be used, otherwise false
|
|
352
|
+
*/
|
|
353
|
+
bool validateSheetName(std::string sheetName, bool throwOnInvalid = false);
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* @brief
|
|
357
|
+
* @param command
|
|
358
|
+
* @return for XLCommandType::SetSheetActive: execution success, otherwise always true
|
|
359
|
+
*/
|
|
360
|
+
bool execCommand(const XLCommand& command);
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* @brief
|
|
364
|
+
* @param query
|
|
365
|
+
* @return
|
|
366
|
+
*/
|
|
367
|
+
XLQuery execQuery(const XLQuery& query) const;
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* @brief
|
|
371
|
+
* @param query
|
|
372
|
+
* @return
|
|
373
|
+
*/
|
|
374
|
+
XLQuery execQuery(const XLQuery& query);
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* @brief configure an alternative XML saving declaration to be used with pugixml
|
|
378
|
+
* @param savingDeclaration An XLXmlSavingDeclaration object with the configuration to use
|
|
379
|
+
* @return
|
|
380
|
+
*/
|
|
381
|
+
void setSavingDeclaration(XLXmlSavingDeclaration const& savingDeclaration);
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* @brief
|
|
385
|
+
* @return
|
|
386
|
+
*/
|
|
387
|
+
const XLSharedStrings& sharedStrings() const { return m_sharedStrings; }
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* @brief rewrite the shared strings cache (and update all cells referencing an index from the shared strings), dropping unused strings
|
|
391
|
+
* @note potentially time-intensive (on documents with many strings or many cells referring shared strings)
|
|
392
|
+
*/
|
|
393
|
+
void cleanupSharedStrings();
|
|
394
|
+
|
|
395
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
396
|
+
// Protected Member Functions
|
|
397
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
398
|
+
|
|
399
|
+
protected:
|
|
400
|
+
/**
|
|
401
|
+
* @brief Get an XML file from the .xlsx archive.
|
|
402
|
+
* @param path The relative path of the file.
|
|
403
|
+
* @return A std::string with the content of the file
|
|
404
|
+
*/
|
|
405
|
+
std::string extractXmlFromArchive(const std::string& path);
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* @brief fetch the XLXmlData object as stored in m_data, throw XLInternalError if path is not found
|
|
409
|
+
* @param path The relative path of the file.
|
|
410
|
+
* @param doNotThrow if true, will return a nullptr if path is not found
|
|
411
|
+
* @return a pointer to the XLXmlData object stored in m_data (or nullptr, see doNotThrow)
|
|
412
|
+
*/
|
|
413
|
+
XLXmlData* getXmlData(const std::string& path, bool doNotThrow = false);
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* @brief const overload of getXmlData
|
|
417
|
+
* @param path
|
|
418
|
+
* @param doNotThrow
|
|
419
|
+
* @return
|
|
420
|
+
*/
|
|
421
|
+
const XLXmlData* getXmlData(const std::string& path, bool doNotThrow = false) const;
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* @brief
|
|
425
|
+
* @param path
|
|
426
|
+
* @return
|
|
427
|
+
*/
|
|
428
|
+
bool hasXmlData(const std::string& path) const;
|
|
429
|
+
|
|
430
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
431
|
+
// Private Member Variables
|
|
432
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
433
|
+
|
|
434
|
+
private:
|
|
435
|
+
bool m_suppressWarnings {true}; /**< If true, will suppress output of warnings where supported */
|
|
436
|
+
|
|
437
|
+
std::string m_filePath {}; /**< The path to the original file*/
|
|
438
|
+
|
|
439
|
+
XLXmlSavingDeclaration m_xmlSavingDeclaration; /**< The xml saving declaration that will be passed to pugixml before generating the XML output data*/
|
|
440
|
+
|
|
441
|
+
mutable std::list<XLXmlData> m_data {}; /**< */
|
|
442
|
+
mutable std::deque<std::string> m_sharedStringCache {}; /**< */
|
|
443
|
+
mutable XLSharedStrings m_sharedStrings {}; /**< */
|
|
444
|
+
|
|
445
|
+
XLRelationships m_docRelationships {}; /**< A pointer to the document relationships object*/
|
|
446
|
+
XLRelationships m_wbkRelationships {}; /**< A pointer to the document relationships object*/
|
|
447
|
+
XLContentTypes m_contentTypes {}; /**< A pointer to the content types object*/
|
|
448
|
+
XLAppProperties m_appProperties {}; /**< A pointer to the App properties object */
|
|
449
|
+
XLProperties m_coreProperties {}; /**< A pointer to the Core properties object*/
|
|
450
|
+
XLStyles m_styles {}; /**< A pointer to the document styles object*/
|
|
451
|
+
XLWorkbook m_workbook {}; /**< A pointer to the workbook object */
|
|
452
|
+
IZipArchive m_archive {}; /**< */
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
457
|
+
// Global utility functions
|
|
458
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* @brief Get a hexadecimal representation of size bytes, starting at data
|
|
462
|
+
* @param data A pointer to the data bytes to format
|
|
463
|
+
* @param size The amount of data bytes to format
|
|
464
|
+
* @return A string with the base-16 representation of the data bytes
|
|
465
|
+
* @note 2024-08-18 BUGFIX: replaced char array with std::string, as ISO C++ standard does not permit variable size arrays
|
|
466
|
+
*/
|
|
467
|
+
OPENXLSX_EXPORT std::string BinaryAsHexString(const void *data, const size_t size);
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* @brief Calculate the two-byte XLSX password hash for password
|
|
471
|
+
* @param password the string to hash
|
|
472
|
+
* @return the two byte value calculated according to the XLSX password hashing algorithm
|
|
473
|
+
*/
|
|
474
|
+
OPENXLSX_EXPORT uint16_t ExcelPasswordHash (std::string password);
|
|
475
|
+
/**
|
|
476
|
+
* @brief Same as ExcelPasswordHash but format the output as a 4-digit hexadecimal string
|
|
477
|
+
* @param password the string to hash
|
|
478
|
+
* @return a string that can be stored in OOXML as a password hash
|
|
479
|
+
*/
|
|
480
|
+
OPENXLSX_EXPORT std::string ExcelPasswordHashAsString (std::string password);
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* @brief eliminate from pathA leading subdirectories shared with pathB and find a path from pathB to pathA destination
|
|
484
|
+
* @param pathA return a relative path to here
|
|
485
|
+
* @param pathB escape this path via "../" until the common branch with pathA is reached
|
|
486
|
+
* @return a string that leads via a relative path from pathA to pathB
|
|
487
|
+
* @throw XLInternalError if pathA and pathB have no common leading (sub)directory
|
|
488
|
+
*/
|
|
489
|
+
std::string getPathARelativeToPathB(std::string const& pathA, std::string const& pathB);
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* @brief eliminate from path any . and .. subdirectories by ignoring them (.) or escaping to the parent directory (..)
|
|
493
|
+
* @param path the path to normalize in this way
|
|
494
|
+
* @return a normalized path (no longer contains . or .. entries)
|
|
495
|
+
* @throw XLInternalError upon invalid path - e.g. containing "//" or trying to escape via ".." beyond the context of path
|
|
496
|
+
*/
|
|
497
|
+
std::string eliminateDotAndDotDotFromPath(const std::string& path);
|
|
498
|
+
|
|
499
|
+
} // namespace OpenXLSX
|
|
500
|
+
|
|
501
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
502
|
+
# pragma warning(pop)
|
|
503
|
+
#endif // _MSC_VER
|
|
504
|
+
|
|
505
|
+
#endif // OPENXLSX_XLDOCUMENT_HPP
|