react-native-nitro-xlsx 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NitroXlsx.podspec +26 -27
- package/Package.swift +31 -10
- package/README.md +21 -9
- package/android/CMakeLists.txt +20 -27
- package/cpp/HybridNitroXlsx.cpp +25 -1
- package/cpp/HybridXlsxCellFormat.cpp +46 -146
- package/cpp/HybridXlsxCellFormat.hpp +9 -41
- package/cpp/HybridXlsxConditionalFormat.cpp +4 -1
- package/cpp/HybridXlsxConditionalFormats.cpp +5 -1
- package/cpp/HybridXlsxWorkbook.cpp +38 -8
- package/cpp/HybridXlsxWorkbook.hpp +10 -1
- package/cpp/HybridXlsxWorksheet.cpp +422 -141
- package/cpp/HybridXlsxWorksheet.hpp +4 -1
- package/cpp/XlsxCacheDir.cpp +25 -2
- package/cpp/XlsxCacheDir.hpp +3 -1
- package/cpp/XlsxCellStyle.hpp +360 -0
- package/cpp/XlsxJson.cpp +29 -8
- package/package.json +2 -2
- package/scripts/run-cpp-tests.sh +1 -1
- package/scripts/sync-openxlsx-headers.sh +34 -0
- package/src/__mocks__/react-native-nitro-modules.ts +523 -20
- package/src/__tests__/index.test.ts +124 -16
- package/src/index.ts +13 -13
- 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/IZipArchive.hpp +361 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/OpenXLSX-Exports.hpp +12 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCell.hpp +367 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellIterator.hpp +252 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellRange.hpp +223 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellReference.hpp +317 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellValue.hpp +793 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColor.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColumn.hpp +159 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCommandQuery.hpp +228 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLComments.hpp +270 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLConstants.hpp +18 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLContentTypes.hpp +264 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDateTime.hpp +175 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDocument.hpp +505 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDrawing.hpp +452 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLException.hpp +161 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLFormula.hpp +375 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLIterator.hpp +40 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLMergeCells.hpp +216 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLProperties.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRelationships.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRow.hpp +721 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRowData.hpp +488 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSharedStrings.hpp +204 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSheet.hpp +1640 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLStyles.hpp +2390 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLTables.hpp +132 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLWorkbook.hpp +404 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlData.hpp +283 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlFile.hpp +194 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParser.hpp +282 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParserForwardDeclarations.hpp +85 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLZipArchive.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/LibZip.hpp +447 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/OpenXLSXFileSystemTools.hpp +207 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/Zippy.hpp +1375 -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 +46 -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,27 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <new>
|
|
4
|
+
|
|
5
|
+
// tag::decl[]
|
|
6
|
+
void* custom_allocate(size_t size)
|
|
7
|
+
{
|
|
8
|
+
return new (std::nothrow) char[size];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
void custom_deallocate(void* ptr)
|
|
12
|
+
{
|
|
13
|
+
delete[] static_cast<char*>(ptr);
|
|
14
|
+
}
|
|
15
|
+
// end::decl[]
|
|
16
|
+
|
|
17
|
+
int main()
|
|
18
|
+
{
|
|
19
|
+
// tag::call[]
|
|
20
|
+
pugi::set_memory_management_functions(custom_allocate, custom_deallocate);
|
|
21
|
+
// end::call[]
|
|
22
|
+
|
|
23
|
+
pugi::xml_document doc;
|
|
24
|
+
doc.load_string("<node/>");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// vim:et
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <string.h>
|
|
4
|
+
#include <iostream>
|
|
5
|
+
|
|
6
|
+
// tag::code[]
|
|
7
|
+
bool load_preprocess(pugi::xml_document& doc, const char* path);
|
|
8
|
+
|
|
9
|
+
bool preprocess(pugi::xml_node node)
|
|
10
|
+
{
|
|
11
|
+
for (pugi::xml_node child = node.first_child(); child; )
|
|
12
|
+
{
|
|
13
|
+
if (child.type() == pugi::node_pi && strcmp(child.name(), "include") == 0)
|
|
14
|
+
{
|
|
15
|
+
pugi::xml_node include = child;
|
|
16
|
+
|
|
17
|
+
// load new preprocessed document (note: ideally this should handle relative paths)
|
|
18
|
+
const char* path = include.value();
|
|
19
|
+
|
|
20
|
+
pugi::xml_document doc;
|
|
21
|
+
if (!load_preprocess(doc, path)) return false;
|
|
22
|
+
|
|
23
|
+
// insert the comment marker above include directive
|
|
24
|
+
node.insert_child_before(pugi::node_comment, include).set_value(path);
|
|
25
|
+
|
|
26
|
+
// copy the document above the include directive (this retains the original order!)
|
|
27
|
+
for (pugi::xml_node ic = doc.first_child(); ic; ic = ic.next_sibling())
|
|
28
|
+
{
|
|
29
|
+
node.insert_copy_before(ic, include);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// remove the include node and move to the next child
|
|
33
|
+
child = child.next_sibling();
|
|
34
|
+
|
|
35
|
+
node.remove_child(include);
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
{
|
|
39
|
+
if (!preprocess(child)) return false;
|
|
40
|
+
|
|
41
|
+
child = child.next_sibling();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
bool load_preprocess(pugi::xml_document& doc, const char* path)
|
|
49
|
+
{
|
|
50
|
+
pugi::xml_parse_result result = doc.load_file(path, pugi::parse_default | pugi::parse_pi); // for <?include?>
|
|
51
|
+
|
|
52
|
+
return result ? preprocess(doc) : false;
|
|
53
|
+
}
|
|
54
|
+
// end::code[]
|
|
55
|
+
|
|
56
|
+
int main()
|
|
57
|
+
{
|
|
58
|
+
pugi::xml_document doc;
|
|
59
|
+
if (!load_preprocess(doc, "character.xml")) return -1;
|
|
60
|
+
|
|
61
|
+
doc.print(std::cout);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// vim:et
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
void check_xml(const char* source)
|
|
6
|
+
{
|
|
7
|
+
// tag::code[]
|
|
8
|
+
pugi::xml_document doc;
|
|
9
|
+
pugi::xml_parse_result result = doc.load_string(source);
|
|
10
|
+
|
|
11
|
+
if (result)
|
|
12
|
+
{
|
|
13
|
+
std::cout << "XML [" << source << "] parsed without errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n\n";
|
|
14
|
+
}
|
|
15
|
+
else
|
|
16
|
+
{
|
|
17
|
+
std::cout << "XML [" << source << "] parsed with errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n";
|
|
18
|
+
std::cout << "Error description: " << result.description() << "\n";
|
|
19
|
+
std::cout << "Error offset: " << result.offset << " (error at [..." << (source + result.offset) << "]\n\n";
|
|
20
|
+
}
|
|
21
|
+
// end::code[]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
int main()
|
|
25
|
+
{
|
|
26
|
+
check_xml("<node attr='value'><child>text</child></node>");
|
|
27
|
+
check_xml("<node attr='value'><child>text</chil></node>");
|
|
28
|
+
check_xml("<node attr='value'><child>text</child>");
|
|
29
|
+
check_xml("<node attr='value\"><child>text</child></node>");
|
|
30
|
+
check_xml("<node attr='value'><#tag /></node>");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// vim:et
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
// tag::code[]
|
|
8
|
+
pugi::xml_document doc;
|
|
9
|
+
|
|
10
|
+
pugi::xml_parse_result result = doc.load_file("tree.xml");
|
|
11
|
+
|
|
12
|
+
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
|
13
|
+
// end::code[]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// vim:et
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
#include <cstring>
|
|
5
|
+
|
|
6
|
+
int main()
|
|
7
|
+
{
|
|
8
|
+
// tag::decl[]
|
|
9
|
+
const char source[] = "<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>";
|
|
10
|
+
size_t size = sizeof(source);
|
|
11
|
+
// end::decl[]
|
|
12
|
+
|
|
13
|
+
pugi::xml_document doc;
|
|
14
|
+
|
|
15
|
+
{
|
|
16
|
+
// tag::load_buffer[]
|
|
17
|
+
// You can use load_buffer to load document from immutable memory block:
|
|
18
|
+
pugi::xml_parse_result result = doc.load_buffer(source, size);
|
|
19
|
+
// end::load_buffer[]
|
|
20
|
+
|
|
21
|
+
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
{
|
|
25
|
+
// tag::load_buffer_inplace_begin[]
|
|
26
|
+
// You can use load_buffer_inplace to load document from mutable memory block; the block's lifetime must exceed that of document
|
|
27
|
+
char* buffer = new char[size];
|
|
28
|
+
memcpy(buffer, source, size);
|
|
29
|
+
|
|
30
|
+
// The block can be allocated by any method; the block is modified during parsing
|
|
31
|
+
pugi::xml_parse_result result = doc.load_buffer_inplace(buffer, size);
|
|
32
|
+
// end::load_buffer_inplace_begin[]
|
|
33
|
+
|
|
34
|
+
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
|
35
|
+
|
|
36
|
+
// tag::load_buffer_inplace_end[]
|
|
37
|
+
// You have to destroy the block yourself after the document is no longer used
|
|
38
|
+
delete[] buffer;
|
|
39
|
+
// end::load_buffer_inplace_end[]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
{
|
|
43
|
+
// tag::load_buffer_inplace_own[]
|
|
44
|
+
// You can use load_buffer_inplace_own to load document from mutable memory block and to pass the ownership of this block
|
|
45
|
+
// The block has to be allocated via pugixml allocation function - using i.e. operator new here is incorrect
|
|
46
|
+
char* buffer = static_cast<char*>(pugi::get_memory_allocation_function()(size));
|
|
47
|
+
memcpy(buffer, source, size);
|
|
48
|
+
|
|
49
|
+
// The block will be deleted by the document
|
|
50
|
+
pugi::xml_parse_result result = doc.load_buffer_inplace_own(buffer, size);
|
|
51
|
+
// end::load_buffer_inplace_own[]
|
|
52
|
+
|
|
53
|
+
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
{
|
|
57
|
+
// tag::load_string[]
|
|
58
|
+
// You can use load to load document from null-terminated strings, for example literals:
|
|
59
|
+
pugi::xml_parse_result result = doc.load_string("<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>");
|
|
60
|
+
// end::load_string[]
|
|
61
|
+
|
|
62
|
+
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// vim:et
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
pugi::xml_document doc;
|
|
8
|
+
|
|
9
|
+
// tag::code[]
|
|
10
|
+
const char* source = "<!--comment--><node><</node>";
|
|
11
|
+
|
|
12
|
+
// Parsing with default options; note that comment node is not added to the tree, and entity reference < is expanded
|
|
13
|
+
doc.load_string(source);
|
|
14
|
+
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
|
15
|
+
|
|
16
|
+
// Parsing with additional parse_comments option; comment node is now added to the tree
|
|
17
|
+
doc.load_string(source, pugi::parse_default | pugi::parse_comments);
|
|
18
|
+
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
|
19
|
+
|
|
20
|
+
// Parsing with additional parse_comments option and without the (default) parse_escapes option; < is not expanded
|
|
21
|
+
doc.load_string(source, (pugi::parse_default | pugi::parse_comments) & ~pugi::parse_escapes);
|
|
22
|
+
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
|
23
|
+
|
|
24
|
+
// Parsing with minimal option mask; comment node is not added to the tree, and < is not expanded
|
|
25
|
+
doc.load_string(source, pugi::parse_minimal);
|
|
26
|
+
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
|
27
|
+
// end::code[]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// vim:et
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <fstream>
|
|
4
|
+
#include <iomanip>
|
|
5
|
+
#include <iostream>
|
|
6
|
+
|
|
7
|
+
void print_doc(const char* message, const pugi::xml_document& doc, const pugi::xml_parse_result& result)
|
|
8
|
+
{
|
|
9
|
+
std::cout
|
|
10
|
+
<< message
|
|
11
|
+
<< "\t: load result '" << result.description() << "'"
|
|
12
|
+
<< ", first character of root name: U+" << std::hex << std::uppercase << std::setw(4) << std::setfill('0') << pugi::as_wide(doc.first_child().name())[0]
|
|
13
|
+
<< ", year: " << doc.first_child().first_child().first_child().child_value()
|
|
14
|
+
<< std::endl;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
bool try_imbue(std::wistream& stream, const char* name)
|
|
18
|
+
{
|
|
19
|
+
try
|
|
20
|
+
{
|
|
21
|
+
stream.imbue(std::locale(name));
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (const std::exception&)
|
|
26
|
+
{
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
int main()
|
|
32
|
+
{
|
|
33
|
+
pugi::xml_document doc;
|
|
34
|
+
|
|
35
|
+
{
|
|
36
|
+
// tag::code[]
|
|
37
|
+
std::ifstream stream("weekly-utf-8.xml");
|
|
38
|
+
pugi::xml_parse_result result = doc.load(stream);
|
|
39
|
+
// end::code[]
|
|
40
|
+
|
|
41
|
+
// first character of root name: U+9031, year: 1997
|
|
42
|
+
print_doc("UTF8 file from narrow stream", doc, result);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
{
|
|
46
|
+
std::ifstream stream("weekly-utf-16.xml");
|
|
47
|
+
pugi::xml_parse_result result = doc.load(stream);
|
|
48
|
+
|
|
49
|
+
// first character of root name: U+9031, year: 1997
|
|
50
|
+
print_doc("UTF16 file from narrow stream", doc, result);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
{
|
|
54
|
+
// Since wide streams are treated as UTF-16/32 ones, you can't load the UTF-8 file from a wide stream
|
|
55
|
+
// directly if you have localized characters; you'll have to provide a UTF8 locale (there is no
|
|
56
|
+
// standard one; you can use utf8_codecvt_facet from Boost or codecvt_utf8 from C++0x)
|
|
57
|
+
std::wifstream stream("weekly-utf-8.xml");
|
|
58
|
+
|
|
59
|
+
if (try_imbue(stream, "en_US.UTF-8")) // try Linux encoding
|
|
60
|
+
{
|
|
61
|
+
pugi::xml_parse_result result = doc.load(stream);
|
|
62
|
+
|
|
63
|
+
// first character of root name: U+00E9, year: 1997
|
|
64
|
+
print_doc("UTF8 file from wide stream", doc, result);
|
|
65
|
+
}
|
|
66
|
+
else
|
|
67
|
+
{
|
|
68
|
+
std::cout << "UTF-8 locale is not available\n";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
{
|
|
73
|
+
// Since wide streams are treated as UTF-16/32 ones, you can't load the UTF-16 file from a wide stream without
|
|
74
|
+
// using custom codecvt; you can use codecvt_utf16 from C++0x
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
{
|
|
78
|
+
// Since encoding names are non-standard, you can't load the Shift-JIS (or any other non-ASCII) file
|
|
79
|
+
// from a wide stream portably
|
|
80
|
+
std::wifstream stream("weekly-shift_jis.xml");
|
|
81
|
+
|
|
82
|
+
if (try_imbue(stream, ".932") || // try Microsoft encoding
|
|
83
|
+
try_imbue(stream, "ja_JP.SJIS")) // try Linux encoding; run "localedef -i ja_JP -c -f SHIFT_JIS /usr/lib/locale/ja_JP.SJIS" to get it
|
|
84
|
+
{
|
|
85
|
+
pugi::xml_parse_result result = doc.load(stream);
|
|
86
|
+
|
|
87
|
+
// first character of root name: U+9031, year: 1997
|
|
88
|
+
print_doc("Shift-JIS file from wide stream", doc, result);
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
{
|
|
92
|
+
std::cout << "Shift-JIS locale is not available\n";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// vim:et
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
pugi::xml_document doc;
|
|
8
|
+
|
|
9
|
+
// tag::code[]
|
|
10
|
+
// add node with some name
|
|
11
|
+
pugi::xml_node node = doc.append_child("node");
|
|
12
|
+
|
|
13
|
+
// add description node with text child
|
|
14
|
+
pugi::xml_node descr = node.append_child("description");
|
|
15
|
+
descr.append_child(pugi::node_pcdata).set_value("Simple node");
|
|
16
|
+
|
|
17
|
+
// add param node before the description
|
|
18
|
+
pugi::xml_node param = node.insert_child_before("param", descr);
|
|
19
|
+
|
|
20
|
+
// add attributes to param node
|
|
21
|
+
param.append_attribute("name") = "version";
|
|
22
|
+
param.append_attribute("value") = 1.1;
|
|
23
|
+
param.insert_attribute_after("type", param.attribute("name")) = "float";
|
|
24
|
+
// end::code[]
|
|
25
|
+
|
|
26
|
+
doc.print(std::cout);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// vim:et
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <string.h>
|
|
4
|
+
#include <iostream>
|
|
5
|
+
|
|
6
|
+
int main()
|
|
7
|
+
{
|
|
8
|
+
pugi::xml_document doc;
|
|
9
|
+
if (!doc.load_string("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1;
|
|
10
|
+
|
|
11
|
+
// tag::node[]
|
|
12
|
+
pugi::xml_node node = doc.child("node");
|
|
13
|
+
|
|
14
|
+
// change node name
|
|
15
|
+
std::cout << node.set_name("notnode");
|
|
16
|
+
std::cout << ", new node name: " << node.name() << std::endl;
|
|
17
|
+
|
|
18
|
+
// change comment text
|
|
19
|
+
std::cout << doc.last_child().set_value("useless comment");
|
|
20
|
+
std::cout << ", new comment text: " << doc.last_child().value() << std::endl;
|
|
21
|
+
|
|
22
|
+
// we can't change value of the element or name of the comment
|
|
23
|
+
std::cout << node.set_value("1") << ", " << doc.last_child().set_name("2") << std::endl;
|
|
24
|
+
// end::node[]
|
|
25
|
+
|
|
26
|
+
// tag::attr[]
|
|
27
|
+
pugi::xml_attribute attr = node.attribute("id");
|
|
28
|
+
|
|
29
|
+
// change attribute name/value
|
|
30
|
+
std::cout << attr.set_name("key") << ", " << attr.set_value("345");
|
|
31
|
+
std::cout << ", new attribute: " << attr.name() << "=" << attr.value() << std::endl;
|
|
32
|
+
|
|
33
|
+
// we can use numbers or booleans
|
|
34
|
+
attr.set_value(1.234);
|
|
35
|
+
std::cout << "new attribute value: " << attr.value() << std::endl;
|
|
36
|
+
|
|
37
|
+
// we can also use assignment operators for more concise code
|
|
38
|
+
attr = true;
|
|
39
|
+
std::cout << "final attribute value: " << attr.value() << std::endl;
|
|
40
|
+
// end::attr[]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// vim:et
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
pugi::xml_document doc;
|
|
8
|
+
if (!doc.load_string("<node><description>Simple node</description><param name='id' value='123'/></node>")) return -1;
|
|
9
|
+
|
|
10
|
+
// tag::code[]
|
|
11
|
+
// remove description node with the whole subtree
|
|
12
|
+
pugi::xml_node node = doc.child("node");
|
|
13
|
+
node.remove_child("description");
|
|
14
|
+
|
|
15
|
+
// remove value attribute
|
|
16
|
+
pugi::xml_node param = node.child("param");
|
|
17
|
+
param.remove_attribute("value");
|
|
18
|
+
|
|
19
|
+
// we can also remove nodes/attributes by handles
|
|
20
|
+
pugi::xml_attribute id = param.attribute("name");
|
|
21
|
+
param.remove_attribute(id);
|
|
22
|
+
// end::code[]
|
|
23
|
+
|
|
24
|
+
doc.print(std::cout);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// vim:et
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <string>
|
|
4
|
+
#include <iostream>
|
|
5
|
+
#include <cstring>
|
|
6
|
+
|
|
7
|
+
// tag::code[]
|
|
8
|
+
struct xml_string_writer: pugi::xml_writer
|
|
9
|
+
{
|
|
10
|
+
std::string result;
|
|
11
|
+
|
|
12
|
+
virtual void write(const void* data, size_t size)
|
|
13
|
+
{
|
|
14
|
+
result.append(static_cast<const char*>(data), size);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
// end::code[]
|
|
18
|
+
|
|
19
|
+
struct xml_memory_writer: pugi::xml_writer
|
|
20
|
+
{
|
|
21
|
+
char* buffer;
|
|
22
|
+
size_t capacity;
|
|
23
|
+
|
|
24
|
+
size_t result;
|
|
25
|
+
|
|
26
|
+
xml_memory_writer(): buffer(0), capacity(0), result(0)
|
|
27
|
+
{
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
xml_memory_writer(char* buffer, size_t capacity): buffer(buffer), capacity(capacity), result(0)
|
|
31
|
+
{
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
size_t written_size() const
|
|
35
|
+
{
|
|
36
|
+
return result < capacity ? result : capacity;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
virtual void write(const void* data, size_t size)
|
|
40
|
+
{
|
|
41
|
+
if (result < capacity)
|
|
42
|
+
{
|
|
43
|
+
size_t chunk = (capacity - result < size) ? capacity - result : size;
|
|
44
|
+
|
|
45
|
+
memcpy(buffer + result, data, chunk);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
result += size;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
std::string node_to_string(pugi::xml_node node)
|
|
53
|
+
{
|
|
54
|
+
xml_string_writer writer;
|
|
55
|
+
node.print(writer);
|
|
56
|
+
|
|
57
|
+
return writer.result;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
char* node_to_buffer(pugi::xml_node node, char* buffer, size_t size)
|
|
61
|
+
{
|
|
62
|
+
if (size == 0) return buffer;
|
|
63
|
+
|
|
64
|
+
// leave one character for null terminator
|
|
65
|
+
xml_memory_writer writer(buffer, size - 1);
|
|
66
|
+
node.print(writer);
|
|
67
|
+
|
|
68
|
+
// null terminate
|
|
69
|
+
buffer[writer.written_size()] = 0;
|
|
70
|
+
|
|
71
|
+
return buffer;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
char* node_to_buffer_heap(pugi::xml_node node)
|
|
75
|
+
{
|
|
76
|
+
// first pass: get required memory size
|
|
77
|
+
xml_memory_writer counter;
|
|
78
|
+
node.print(counter);
|
|
79
|
+
|
|
80
|
+
// allocate necessary size (+1 for null termination)
|
|
81
|
+
char* buffer = new char[counter.result + 1];
|
|
82
|
+
|
|
83
|
+
// second pass: actual printing
|
|
84
|
+
xml_memory_writer writer(buffer, counter.result);
|
|
85
|
+
node.print(writer);
|
|
86
|
+
|
|
87
|
+
// null terminate
|
|
88
|
+
buffer[writer.written_size()] = 0;
|
|
89
|
+
|
|
90
|
+
return buffer;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
int main()
|
|
94
|
+
{
|
|
95
|
+
// get a test document
|
|
96
|
+
pugi::xml_document doc;
|
|
97
|
+
doc.load_string("<foo bar='baz'>hey</foo>");
|
|
98
|
+
|
|
99
|
+
// get contents as std::string (single pass)
|
|
100
|
+
std::cout << "contents: [" << node_to_string(doc) << "]\n";
|
|
101
|
+
|
|
102
|
+
// get contents into fixed-size buffer (single pass)
|
|
103
|
+
char large_buf[128];
|
|
104
|
+
std::cout << "contents: [" << node_to_buffer(doc, large_buf, sizeof(large_buf)) << "]\n";
|
|
105
|
+
|
|
106
|
+
// get contents into fixed-size buffer (single pass, shows truncating behavior)
|
|
107
|
+
char small_buf[22];
|
|
108
|
+
std::cout << "contents: [" << node_to_buffer(doc, small_buf, sizeof(small_buf)) << "]\n";
|
|
109
|
+
|
|
110
|
+
// get contents into heap-allocated buffer (two passes)
|
|
111
|
+
char* heap_buf = node_to_buffer_heap(doc);
|
|
112
|
+
std::cout << "contents: [" << heap_buf << "]\n";
|
|
113
|
+
delete[] heap_buf;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// vim:et
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
// tag::code[]
|
|
8
|
+
// get a test document
|
|
9
|
+
pugi::xml_document doc;
|
|
10
|
+
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
|
11
|
+
|
|
12
|
+
// add a custom declaration node
|
|
13
|
+
pugi::xml_node decl = doc.prepend_child(pugi::node_declaration);
|
|
14
|
+
decl.append_attribute("version") = "1.0";
|
|
15
|
+
decl.append_attribute("encoding") = "UTF-8";
|
|
16
|
+
decl.append_attribute("standalone") = "no";
|
|
17
|
+
|
|
18
|
+
// <?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
19
|
+
// <foo bar="baz">
|
|
20
|
+
// <call>hey</call>
|
|
21
|
+
// </foo>
|
|
22
|
+
doc.save(std::cout);
|
|
23
|
+
std::cout << std::endl;
|
|
24
|
+
// end::code[]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// vim:et
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
// get a test document
|
|
8
|
+
pugi::xml_document doc;
|
|
9
|
+
doc.load_string("<foo bar='baz'>hey</foo>");
|
|
10
|
+
|
|
11
|
+
// tag::code[]
|
|
12
|
+
// save document to file
|
|
13
|
+
std::cout << "Saving result: " << doc.save_file("save_file_output.xml") << std::endl;
|
|
14
|
+
// end::code[]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// vim:et
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
// tag::code[]
|
|
8
|
+
// get a test document
|
|
9
|
+
pugi::xml_document doc;
|
|
10
|
+
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
|
11
|
+
|
|
12
|
+
// default options; prints
|
|
13
|
+
// <?xml version="1.0"?>
|
|
14
|
+
// <foo bar="baz">
|
|
15
|
+
// <call>hey</call>
|
|
16
|
+
// </foo>
|
|
17
|
+
doc.save(std::cout);
|
|
18
|
+
std::cout << std::endl;
|
|
19
|
+
|
|
20
|
+
// default options with custom indentation string; prints
|
|
21
|
+
// <?xml version="1.0"?>
|
|
22
|
+
// <foo bar="baz">
|
|
23
|
+
// --<call>hey</call>
|
|
24
|
+
// </foo>
|
|
25
|
+
doc.save(std::cout, "--");
|
|
26
|
+
std::cout << std::endl;
|
|
27
|
+
|
|
28
|
+
// default options without indentation; prints
|
|
29
|
+
// <?xml version="1.0"?>
|
|
30
|
+
// <foo bar="baz">
|
|
31
|
+
// <call>hey</call>
|
|
32
|
+
// </foo>
|
|
33
|
+
doc.save(std::cout, "\t", pugi::format_default & ~pugi::format_indent); // can also pass "" instead of indentation string for the same effect
|
|
34
|
+
std::cout << std::endl;
|
|
35
|
+
|
|
36
|
+
// raw output; prints
|
|
37
|
+
// <?xml version="1.0"?><foo bar="baz"><call>hey</call></foo>
|
|
38
|
+
doc.save(std::cout, "\t", pugi::format_raw);
|
|
39
|
+
std::cout << std::endl << std::endl;
|
|
40
|
+
|
|
41
|
+
// raw output without declaration; prints
|
|
42
|
+
// <foo bar="baz"><call>hey</call></foo>
|
|
43
|
+
doc.save(std::cout, "\t", pugi::format_raw | pugi::format_no_declaration);
|
|
44
|
+
std::cout << std::endl;
|
|
45
|
+
// end::code[]
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// vim:et
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#include "pugixml.hpp"
|
|
2
|
+
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
int main()
|
|
6
|
+
{
|
|
7
|
+
// get a test document
|
|
8
|
+
pugi::xml_document doc;
|
|
9
|
+
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
|
10
|
+
|
|
11
|
+
// tag::code[]
|
|
12
|
+
// save document to standard output
|
|
13
|
+
std::cout << "Document:\n";
|
|
14
|
+
doc.save(std::cout);
|
|
15
|
+
// end::code[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// vim:et
|