pycadkit 0.3.7__tar.gz → 0.4.0__tar.gz
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.
- {pycadkit-0.3.7 → pycadkit-0.4.0}/Cargo.lock +138 -10
- {pycadkit-0.3.7 → pycadkit-0.4.0}/Cargo.toml +12 -8
- {pycadkit-0.3.7 → pycadkit-0.4.0}/PKG-INFO +1 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/doc_ops.rs +13 -15
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/geom_ops.rs +4 -4
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/model.rs +4 -4
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/ops.rs +4 -4
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/polygon.rs +13 -16
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/svg.rs +23 -22
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/text.rs +11 -10
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/examples/raster_structure.rs +9 -11
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/cfb.rs +19 -12
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/mod.rs +7 -7
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/v8.rs +13 -14
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/decode_v8.rs +1 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/v7.rs +1 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/text.rs +5 -3
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/container.rs +18 -16
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/mod.rs +15 -15
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster_builtin.rs +4 -2
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster_template.rs +4 -2
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/seed_prepare.rs +30 -32
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tables.rs +12 -16
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/examples/dwgdump.rs +4 -5
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/bits.rs +1 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r2004.rs +6 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r2007.rs +3 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/handles.rs +4 -4
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/mapping/mod.rs +2 -3
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/mod.rs +1 -1
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/corpus.rs +25 -24
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/entities.rs +4 -4
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/mod.rs +16 -16
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/entities.rs +16 -15
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/mod.rs +33 -35
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/export.rs +13 -12
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/geometry.rs +8 -9
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/lib.rs +5 -6
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/validate.rs +13 -14
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/roundtrip.rs +13 -15
- {pycadkit-0.3.7 → pycadkit-0.4.0}/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/examples/interchange.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/src/prelude.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/aci.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/bytes.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/error.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/export.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/geom.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/options.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/units.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/examples/dgn_summary.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/budget.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/fuzz_tests.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/le.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/level_names.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/v7.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/element.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/linkage.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/v8.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/palette.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/encode.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/named.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/polyline.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/application.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/dictionary.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/microstation.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/raster.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/raster_template.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/regressions.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/text.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/text.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/zlib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/common/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/private_corpus.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/private_dictionary.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/robustness.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v7_corpus.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_oracle.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_public.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_range.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/examples/docsummary.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/classes.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/codepage.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/lz77_r2004.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/lz77_r2007.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r13.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/reed_solomon.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/crc.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/header.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/mapping/entity.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/native/entities.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/native/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/annotation.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/curves.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/entities.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/hatch.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/misc.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/registry.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/tables.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/reader.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/version.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/oracle.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/robustness.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/examples/dump.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/native/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/native/text.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/ocs.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/common.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/hatch.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/records.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/tables.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/curves.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/out.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/ascii_vs_binary.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/common/mod.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/compare_reader_with_ezdxf.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/review_fixes.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/robustness.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/roundtrip.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/synthetic_read.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/synthetic_write.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/validate_with_ezdxf.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/curves.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/mapping.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/native.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/tkgm.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/xml.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/support/export_cases.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/support/tkgm_cases.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/Cargo.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/LICENSE-APACHE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/LICENSE-MIT +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/NOTICE +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/README.md +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/src/lib.rs +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/conftest.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/test_cadkit.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/test_citygml.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/pyproject.toml +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/__init__.py +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/__init__.pyi +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/_cadkit.pyi +0 -0
- {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/py.typed +0 -0
|
@@ -66,7 +66,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
|
66
66
|
|
|
67
67
|
[[package]]
|
|
68
68
|
name = "cadkit"
|
|
69
|
-
version = "0.
|
|
69
|
+
version = "0.4.0"
|
|
70
70
|
dependencies = [
|
|
71
71
|
"cadkit-core",
|
|
72
72
|
"cadkit-dgn",
|
|
@@ -78,7 +78,7 @@ dependencies = [
|
|
|
78
78
|
|
|
79
79
|
[[package]]
|
|
80
80
|
name = "cadkit-capi"
|
|
81
|
-
version = "0.
|
|
81
|
+
version = "0.4.0"
|
|
82
82
|
dependencies = [
|
|
83
83
|
"cadkit",
|
|
84
84
|
"serde",
|
|
@@ -87,7 +87,7 @@ dependencies = [
|
|
|
87
87
|
|
|
88
88
|
[[package]]
|
|
89
89
|
name = "cadkit-cli"
|
|
90
|
-
version = "0.
|
|
90
|
+
version = "0.4.0"
|
|
91
91
|
dependencies = [
|
|
92
92
|
"cadkit",
|
|
93
93
|
"clap",
|
|
@@ -96,7 +96,7 @@ dependencies = [
|
|
|
96
96
|
|
|
97
97
|
[[package]]
|
|
98
98
|
name = "cadkit-core"
|
|
99
|
-
version = "0.
|
|
99
|
+
version = "0.4.0"
|
|
100
100
|
dependencies = [
|
|
101
101
|
"serde",
|
|
102
102
|
"serde_json",
|
|
@@ -105,7 +105,7 @@ dependencies = [
|
|
|
105
105
|
|
|
106
106
|
[[package]]
|
|
107
107
|
name = "cadkit-dgn"
|
|
108
|
-
version = "0.
|
|
108
|
+
version = "0.4.0"
|
|
109
109
|
dependencies = [
|
|
110
110
|
"cadkit-core",
|
|
111
111
|
"cfb",
|
|
@@ -116,7 +116,7 @@ dependencies = [
|
|
|
116
116
|
|
|
117
117
|
[[package]]
|
|
118
118
|
name = "cadkit-dwg"
|
|
119
|
-
version = "0.
|
|
119
|
+
version = "0.4.0"
|
|
120
120
|
dependencies = [
|
|
121
121
|
"cadkit-core",
|
|
122
122
|
"cadkit-dxf",
|
|
@@ -126,16 +126,28 @@ dependencies = [
|
|
|
126
126
|
|
|
127
127
|
[[package]]
|
|
128
128
|
name = "cadkit-dxf"
|
|
129
|
-
version = "0.
|
|
129
|
+
version = "0.4.0"
|
|
130
130
|
dependencies = [
|
|
131
131
|
"cadkit-core",
|
|
132
132
|
"encoding_rs",
|
|
133
133
|
"serde_json",
|
|
134
134
|
]
|
|
135
135
|
|
|
136
|
+
[[package]]
|
|
137
|
+
name = "cadkit-geom"
|
|
138
|
+
version = "0.4.0"
|
|
139
|
+
dependencies = [
|
|
140
|
+
"i_overlay",
|
|
141
|
+
"robust",
|
|
142
|
+
"schemars",
|
|
143
|
+
"serde",
|
|
144
|
+
"serde_json",
|
|
145
|
+
"thiserror",
|
|
146
|
+
]
|
|
147
|
+
|
|
136
148
|
[[package]]
|
|
137
149
|
name = "cadkit-gml"
|
|
138
|
-
version = "0.
|
|
150
|
+
version = "0.4.0"
|
|
139
151
|
dependencies = [
|
|
140
152
|
"cadkit-core",
|
|
141
153
|
"quick-xml",
|
|
@@ -145,7 +157,7 @@ dependencies = [
|
|
|
145
157
|
|
|
146
158
|
[[package]]
|
|
147
159
|
name = "cadkit-py"
|
|
148
|
-
version = "0.
|
|
160
|
+
version = "0.4.0"
|
|
149
161
|
dependencies = [
|
|
150
162
|
"cadkit",
|
|
151
163
|
"pyo3",
|
|
@@ -155,7 +167,7 @@ dependencies = [
|
|
|
155
167
|
|
|
156
168
|
[[package]]
|
|
157
169
|
name = "cadkit-wasm"
|
|
158
|
-
version = "0.
|
|
170
|
+
version = "0.4.0"
|
|
159
171
|
dependencies = [
|
|
160
172
|
"cadkit",
|
|
161
173
|
"js-sys",
|
|
@@ -236,6 +248,12 @@ dependencies = [
|
|
|
236
248
|
"cfg-if",
|
|
237
249
|
]
|
|
238
250
|
|
|
251
|
+
[[package]]
|
|
252
|
+
name = "dyn-clone"
|
|
253
|
+
version = "1.0.20"
|
|
254
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
255
|
+
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
|
|
256
|
+
|
|
239
257
|
[[package]]
|
|
240
258
|
name = "encoding_rs"
|
|
241
259
|
version = "0.8.35"
|
|
@@ -291,6 +309,48 @@ version = "0.5.0"
|
|
|
291
309
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
292
310
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
293
311
|
|
|
312
|
+
[[package]]
|
|
313
|
+
name = "i_float"
|
|
314
|
+
version = "5.0.0"
|
|
315
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
316
|
+
checksum = "9ecaff1ce29bcacd72cdf581ba6fce636ef4c4e0b2da7e7846dd0137d98141e2"
|
|
317
|
+
dependencies = [
|
|
318
|
+
"libm",
|
|
319
|
+
]
|
|
320
|
+
|
|
321
|
+
[[package]]
|
|
322
|
+
name = "i_key_sort"
|
|
323
|
+
version = "0.11.0"
|
|
324
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
325
|
+
checksum = "7c6c58d0c60705e66264ce0f788a69a2f21472aeb8188559e7c8c619dbdc10fa"
|
|
326
|
+
|
|
327
|
+
[[package]]
|
|
328
|
+
name = "i_overlay"
|
|
329
|
+
version = "9.0.0"
|
|
330
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
331
|
+
checksum = "a518dce2d7cf7e3758159747e7175c8b86ccdcd8d333dfcb7dbeb3eac2e324fc"
|
|
332
|
+
dependencies = [
|
|
333
|
+
"i_float",
|
|
334
|
+
"i_key_sort",
|
|
335
|
+
"i_shape",
|
|
336
|
+
"i_tree",
|
|
337
|
+
]
|
|
338
|
+
|
|
339
|
+
[[package]]
|
|
340
|
+
name = "i_shape"
|
|
341
|
+
version = "5.0.0"
|
|
342
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
343
|
+
checksum = "fa1878f91ef7921feaf1b2346253ebc5e661878b22d5715195c1d5dcf0f20ae5"
|
|
344
|
+
dependencies = [
|
|
345
|
+
"i_float",
|
|
346
|
+
]
|
|
347
|
+
|
|
348
|
+
[[package]]
|
|
349
|
+
name = "i_tree"
|
|
350
|
+
version = "0.19.1"
|
|
351
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
352
|
+
checksum = "180cbc5c4af5d8f57b8096c3cf39efdac3642ece00ca54710db44db3536baed4"
|
|
353
|
+
|
|
294
354
|
[[package]]
|
|
295
355
|
name = "is_terminal_polyfill"
|
|
296
356
|
version = "1.70.2"
|
|
@@ -320,6 +380,12 @@ version = "0.2.189"
|
|
|
320
380
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
321
381
|
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
|
|
322
382
|
|
|
383
|
+
[[package]]
|
|
384
|
+
name = "libm"
|
|
385
|
+
version = "0.2.16"
|
|
386
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
387
|
+
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|
388
|
+
|
|
323
389
|
[[package]]
|
|
324
390
|
name = "memchr"
|
|
325
391
|
version = "2.8.3"
|
|
@@ -444,12 +510,63 @@ dependencies = [
|
|
|
444
510
|
"proc-macro2",
|
|
445
511
|
]
|
|
446
512
|
|
|
513
|
+
[[package]]
|
|
514
|
+
name = "ref-cast"
|
|
515
|
+
version = "1.0.27"
|
|
516
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
517
|
+
checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3"
|
|
518
|
+
dependencies = [
|
|
519
|
+
"ref-cast-impl",
|
|
520
|
+
]
|
|
521
|
+
|
|
522
|
+
[[package]]
|
|
523
|
+
name = "ref-cast-impl"
|
|
524
|
+
version = "1.0.27"
|
|
525
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
526
|
+
checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a"
|
|
527
|
+
dependencies = [
|
|
528
|
+
"proc-macro2",
|
|
529
|
+
"quote",
|
|
530
|
+
"syn 3.0.6",
|
|
531
|
+
]
|
|
532
|
+
|
|
533
|
+
[[package]]
|
|
534
|
+
name = "robust"
|
|
535
|
+
version = "1.2.0"
|
|
536
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
537
|
+
checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
|
|
538
|
+
|
|
447
539
|
[[package]]
|
|
448
540
|
name = "rustversion"
|
|
449
541
|
version = "1.0.23"
|
|
450
542
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
451
543
|
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
|
|
452
544
|
|
|
545
|
+
[[package]]
|
|
546
|
+
name = "schemars"
|
|
547
|
+
version = "1.2.3"
|
|
548
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
549
|
+
checksum = "ab508826f74a77ca9d5aba6ff19b522583ee3eaf28a19384ff3d0e5835fadf6e"
|
|
550
|
+
dependencies = [
|
|
551
|
+
"dyn-clone",
|
|
552
|
+
"ref-cast",
|
|
553
|
+
"schemars_derive",
|
|
554
|
+
"serde",
|
|
555
|
+
"serde_json",
|
|
556
|
+
]
|
|
557
|
+
|
|
558
|
+
[[package]]
|
|
559
|
+
name = "schemars_derive"
|
|
560
|
+
version = "1.2.3"
|
|
561
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
562
|
+
checksum = "e1c3a92094fa7d61aa124645844facb6b554dfc797136d0f5fd1f890e2bffc69"
|
|
563
|
+
dependencies = [
|
|
564
|
+
"proc-macro2",
|
|
565
|
+
"quote",
|
|
566
|
+
"serde_derive_internals",
|
|
567
|
+
"syn 3.0.6",
|
|
568
|
+
]
|
|
569
|
+
|
|
453
570
|
[[package]]
|
|
454
571
|
name = "serde"
|
|
455
572
|
version = "1.0.229"
|
|
@@ -480,6 +597,17 @@ dependencies = [
|
|
|
480
597
|
"syn 3.0.6",
|
|
481
598
|
]
|
|
482
599
|
|
|
600
|
+
[[package]]
|
|
601
|
+
name = "serde_derive_internals"
|
|
602
|
+
version = "0.30.0"
|
|
603
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
604
|
+
checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd"
|
|
605
|
+
dependencies = [
|
|
606
|
+
"proc-macro2",
|
|
607
|
+
"quote",
|
|
608
|
+
"syn 3.0.6",
|
|
609
|
+
]
|
|
610
|
+
|
|
483
611
|
[[package]]
|
|
484
612
|
name = "serde_json"
|
|
485
613
|
version = "1.0.151"
|
|
@@ -4,9 +4,9 @@ members = ["crates/*"]
|
|
|
4
4
|
exclude = ["fuzz"]
|
|
5
5
|
|
|
6
6
|
[workspace.package]
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
edition = "2024"
|
|
9
|
-
rust-version = "1.
|
|
9
|
+
rust-version = "1.88"
|
|
10
10
|
license = "MIT OR Apache-2.0"
|
|
11
11
|
repository = "https://github.com/TNYCL/cadkit"
|
|
12
12
|
authors = ["TNYCL"]
|
|
@@ -14,12 +14,16 @@ keywords = ["cad", "dwg", "dgn", "dxf", "citygml"]
|
|
|
14
14
|
categories = ["parser-implementations", "graphics", "encoding", "science::geo"]
|
|
15
15
|
|
|
16
16
|
[workspace.dependencies]
|
|
17
|
-
cadkit-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
cadkit-
|
|
22
|
-
cadkit = { path = "crates/cadkit", version = "0.
|
|
17
|
+
cadkit-geom = { path = "crates/cadkit-geom", version = "0.4.0" }
|
|
18
|
+
i_overlay = "=9.0.0"
|
|
19
|
+
robust = "=1.2.0"
|
|
20
|
+
schemars = "1.2.2"
|
|
21
|
+
cadkit-core = { path = "crates/cadkit-core", version = "0.4.0" }
|
|
22
|
+
cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.4.0", default-features = false }
|
|
23
|
+
cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.4.0" }
|
|
24
|
+
cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.4.0" }
|
|
25
|
+
cadkit-gml = { path = "crates/cadkit-gml", version = "0.4.0" }
|
|
26
|
+
cadkit = { path = "crates/cadkit", version = "0.4.0" }
|
|
23
27
|
serde = { version = "1", features = ["derive"] }
|
|
24
28
|
serde_json = "1"
|
|
25
29
|
thiserror = "2"
|
|
@@ -875,13 +875,11 @@ fn tessellate_entity_in_place(entity: &mut Entity, tolerance: f64) {
|
|
|
875
875
|
out.push(Vertex { bulge: 0.0, ..*a });
|
|
876
876
|
}
|
|
877
877
|
}
|
|
878
|
-
if !*closed {
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
});
|
|
884
|
-
}
|
|
878
|
+
if !*closed && let Some(last) = vertices.last() {
|
|
879
|
+
out.push(Vertex {
|
|
880
|
+
bulge: 0.0,
|
|
881
|
+
..*last
|
|
882
|
+
});
|
|
885
883
|
}
|
|
886
884
|
*vertices = out;
|
|
887
885
|
}
|
|
@@ -904,10 +902,10 @@ fn flatten_list(
|
|
|
904
902
|
out: &mut Vec<Entity>,
|
|
905
903
|
) {
|
|
906
904
|
for mut e in entities {
|
|
907
|
-
if matches!(e.layer.as_deref(), None | Some("0"))
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
905
|
+
if matches!(e.layer.as_deref(), None | Some("0"))
|
|
906
|
+
&& let Some(l) = inherited_layer
|
|
907
|
+
{
|
|
908
|
+
e.layer = Some(l.to_owned());
|
|
911
909
|
}
|
|
912
910
|
if e.color == Color::ByBlock && inherited_color != Color::ByBlock {
|
|
913
911
|
e.color = inherited_color;
|
|
@@ -956,10 +954,10 @@ fn collect_refs<'a>(
|
|
|
956
954
|
if let Some(al) = attr.layer.as_deref() {
|
|
957
955
|
layers.insert(al);
|
|
958
956
|
}
|
|
959
|
-
if let Some(disp) = &attr.display
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
957
|
+
if let Some(disp) = &attr.display
|
|
958
|
+
&& let Some(st) = disp.style.as_deref()
|
|
959
|
+
{
|
|
960
|
+
styles.insert(st);
|
|
963
961
|
}
|
|
964
962
|
}
|
|
965
963
|
match &e.kind {
|
|
@@ -855,10 +855,10 @@ pub fn interpolate_fit_points(
|
|
|
855
855
|
return None;
|
|
856
856
|
}
|
|
857
857
|
let is_loop = if closed {
|
|
858
|
-
if let (Some(&first), Some(&last)) = (pts.first(), pts.last())
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
858
|
+
if let (Some(&first), Some(&last)) = (pts.first(), pts.last())
|
|
859
|
+
&& first.distance_to(last) > 1e-12
|
|
860
|
+
{
|
|
861
|
+
pts.push(first);
|
|
862
862
|
}
|
|
863
863
|
pts.len() >= 4
|
|
864
864
|
} else {
|
|
@@ -132,10 +132,10 @@ impl Document {
|
|
|
132
132
|
while let Some(items) = stack.pop() {
|
|
133
133
|
total = total.saturating_add(items.len());
|
|
134
134
|
for e in items {
|
|
135
|
-
if let EntityKind::Group { children, .. } = &e.kind
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
if let EntityKind::Group { children, .. } = &e.kind
|
|
136
|
+
&& !children.is_empty()
|
|
137
|
+
{
|
|
138
|
+
stack.push(children);
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -806,10 +806,10 @@ fn extend_polyline(
|
|
|
806
806
|
let n = vertices.len();
|
|
807
807
|
let segs = if closed { n } else { n.saturating_sub(1) };
|
|
808
808
|
for i in 0..segs {
|
|
809
|
-
if let (Some(a), Some(b)) = (vertices.get(i), vertices.get((i + 1) % n.max(1)))
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
809
|
+
if let (Some(a), Some(b)) = (vertices.get(i), vertices.get((i + 1) % n.max(1)))
|
|
810
|
+
&& let Some(arc) = segment_arc(a, b, normal, tf)
|
|
811
|
+
{
|
|
812
|
+
arc.extend_bbox(bb);
|
|
813
813
|
}
|
|
814
814
|
}
|
|
815
815
|
}
|
|
@@ -89,16 +89,15 @@ pub fn validate(
|
|
|
89
89
|
charge(work)?;
|
|
90
90
|
if let (Some(a0), Some(a1), Some(b0), Some(b1)) =
|
|
91
91
|
(a.first(), a.get(1), b.first(), b.get(1))
|
|
92
|
-
|
|
93
|
-
if intersects(
|
|
92
|
+
&& intersects(
|
|
94
93
|
project(a0),
|
|
95
94
|
project(a1),
|
|
96
95
|
project(b0),
|
|
97
96
|
project(b1),
|
|
98
97
|
tolerance,
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
)
|
|
99
|
+
{
|
|
100
|
+
return Err(invalid("polygon ring intersects itself"));
|
|
102
101
|
}
|
|
103
102
|
}
|
|
104
103
|
}
|
|
@@ -110,16 +109,15 @@ pub fn validate(
|
|
|
110
109
|
charge(work)?;
|
|
111
110
|
if let (Some(a0), Some(a1), Some(b0), Some(b1)) =
|
|
112
111
|
(ae.first(), ae.get(1), be.first(), be.get(1))
|
|
113
|
-
|
|
114
|
-
if intersects(
|
|
112
|
+
&& intersects(
|
|
115
113
|
project(a0),
|
|
116
114
|
project(a1),
|
|
117
115
|
project(b0),
|
|
118
116
|
project(b1),
|
|
119
117
|
tolerance,
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
)
|
|
119
|
+
{
|
|
120
|
+
return Err(invalid("polygon boundaries intersect"));
|
|
123
121
|
}
|
|
124
122
|
}
|
|
125
123
|
}
|
|
@@ -131,12 +129,11 @@ pub fn validate(
|
|
|
131
129
|
return Err(invalid("polygon hole is outside exterior"));
|
|
132
130
|
}
|
|
133
131
|
for other in interiors.iter().skip(i + 1) {
|
|
134
|
-
if let Some(q) = other.first()
|
|
135
|
-
|
|
136
|
-
|| inside(project(q), hole, &project, work)?
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
132
|
+
if let Some(q) = other.first()
|
|
133
|
+
&& (inside(project(p), other, &project, work)?
|
|
134
|
+
|| inside(project(q), hole, &project, work)?)
|
|
135
|
+
{
|
|
136
|
+
return Err(invalid("polygon holes overlap"));
|
|
140
137
|
}
|
|
141
138
|
}
|
|
142
139
|
}
|
|
@@ -1168,21 +1168,19 @@ impl<'a> Renderer<'a> {
|
|
|
1168
1168
|
.collect();
|
|
1169
1169
|
if v.len() >= 2 {
|
|
1170
1170
|
pb.polyline(&v, false);
|
|
1171
|
-
if *arrowhead {
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
pb.line_to(w2);
|
|
1185
|
-
}
|
|
1171
|
+
if *arrowhead && let (Some(&tip), Some(&from)) = (v.first(), v.get(1)) {
|
|
1172
|
+
let (dx, dy) = (from.0 - tip.0, from.1 - tip.1);
|
|
1173
|
+
let seg_len = dx.hypot(dy);
|
|
1174
|
+
if seg_len > 1e-9 {
|
|
1175
|
+
let alen = (self.cross * 2.5).min(seg_len * 0.45);
|
|
1176
|
+
let (ux, uy) = (dx / seg_len, dy / seg_len);
|
|
1177
|
+
let (px, py) = (-uy, ux);
|
|
1178
|
+
let hw = alen * 0.35;
|
|
1179
|
+
let w1 = (tip.0 + ux * alen + px * hw, tip.1 + uy * alen + py * hw);
|
|
1180
|
+
let w2 = (tip.0 + ux * alen - px * hw, tip.1 + uy * alen - py * hw);
|
|
1181
|
+
pb.move_to(w1);
|
|
1182
|
+
pb.line_to(tip);
|
|
1183
|
+
pb.line_to(w2);
|
|
1186
1184
|
}
|
|
1187
1185
|
}
|
|
1188
1186
|
self.stroke_path(&layer, &pb, e, ctx, color);
|
|
@@ -1644,13 +1642,16 @@ fn render_internal(doc: &Document, options: &SvgOptions, include_hidden_layers:
|
|
|
1644
1642
|
doc.walk_while(options.model, &walk_opts, visit)
|
|
1645
1643
|
};
|
|
1646
1644
|
let mut truncated = stats.truncated;
|
|
1647
|
-
if !truncated
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1645
|
+
if !truncated
|
|
1646
|
+
&& options.expand_blocks
|
|
1647
|
+
&& options.text
|
|
1648
|
+
&& !doc.blocks.is_empty()
|
|
1649
|
+
&& let Some(m) = doc.models.get(options.model)
|
|
1650
|
+
{
|
|
1651
|
+
let mut stack = Vec::new();
|
|
1652
|
+
r.render_expanded_insert_attributes(&m.entities, &WalkContext::root(), &mut stack, cap);
|
|
1653
|
+
if r.layers.bytes > cap {
|
|
1654
|
+
truncated = true;
|
|
1654
1655
|
}
|
|
1655
1656
|
}
|
|
1656
1657
|
|
|
@@ -436,21 +436,22 @@ pub fn decode_escapes(s: &str, mbcs: &dyn Fn(u8, [u8; 2]) -> Option<String>) ->
|
|
|
436
436
|
let low_follows = bytes.get(i + 7) == Some(&b'\\')
|
|
437
437
|
&& matches!(bytes.get(i + 8), Some(b'U' | b'u'))
|
|
438
438
|
&& bytes.get(i + 9) == Some(&b'+');
|
|
439
|
-
if let Some(low) = hex4(bytes, i + 10).filter(|_| low_follows)
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
439
|
+
if let Some(low) = hex4(bytes, i + 10).filter(|_| low_follows)
|
|
440
|
+
&& let Some(Ok(c)) = char::decode_utf16([unit as u16, low as u16]).next()
|
|
441
|
+
{
|
|
442
|
+
decoded = Some((c.to_string(), 14));
|
|
443
443
|
}
|
|
444
444
|
} else if let Some(c) = char::from_u32(unit) {
|
|
445
445
|
decoded = Some((c.to_string(), 7));
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
|
-
} else if escape
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
448
|
+
} else if escape
|
|
449
|
+
&& kind == Some(b'M')
|
|
450
|
+
&& let (Some(n), Some(code)) = (bytes.get(i + 3).copied(), hex4(bytes, i + 4))
|
|
451
|
+
{
|
|
452
|
+
let pair = [(code >> 8) as u8, code as u8];
|
|
453
|
+
if let Some(text) = mbcs(n, pair).filter(|t| !t.is_empty()) {
|
|
454
|
+
decoded = Some((text, 8));
|
|
454
455
|
}
|
|
455
456
|
}
|
|
456
457
|
match decoded {
|
|
@@ -86,17 +86,15 @@ fn scan(
|
|
|
86
86
|
structure.push(',');
|
|
87
87
|
}
|
|
88
88
|
*counts.entry(structure).or_default() += 1;
|
|
89
|
-
for (off, b) in r.primary().
|
|
90
|
-
if let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
.or_default() += 1;
|
|
99
|
-
}
|
|
89
|
+
for (off, b) in r.primary().as_chunks::<8>().0.iter().enumerate().skip(4) {
|
|
90
|
+
if let Some(kind) = kinds.get(&u64::from_le_bytes(*b)) {
|
|
91
|
+
*counts
|
|
92
|
+
.entry(format!(
|
|
93
|
+
"type={} possible_id_at={:x} target_type={kind}",
|
|
94
|
+
r.type_code(),
|
|
95
|
+
off * 8
|
|
96
|
+
))
|
|
97
|
+
.or_default() += 1;
|
|
100
98
|
}
|
|
101
99
|
}
|
|
102
100
|
}
|
|
@@ -184,8 +184,10 @@ impl<'a> CompoundFile<'a> {
|
|
|
184
184
|
|
|
185
185
|
let dir = cf.read_chain(first_dir, None)?;
|
|
186
186
|
let entries: Vec<DirEntry> = dir
|
|
187
|
-
.
|
|
188
|
-
.
|
|
187
|
+
.as_chunks::<DIR_ENTRY_LEN>()
|
|
188
|
+
.0
|
|
189
|
+
.iter()
|
|
190
|
+
.map(|entry| parse_dir_entry(entry))
|
|
189
191
|
.collect();
|
|
190
192
|
if entries.first().map(|e| e.kind) != Some(EntryKind::Root) {
|
|
191
193
|
return Err(Error::invalid(
|
|
@@ -202,14 +204,17 @@ impl<'a> CompoundFile<'a> {
|
|
|
202
204
|
if first_mini_fat <= MAX_REGSECT {
|
|
203
205
|
let mf = cf.read_chain(first_mini_fat, None)?;
|
|
204
206
|
cf.mini_fat = mf
|
|
205
|
-
.
|
|
207
|
+
.as_chunks::<4>()
|
|
208
|
+
.0
|
|
209
|
+
.iter()
|
|
206
210
|
.filter_map(|c| le::u32_at(c, 0))
|
|
207
211
|
.collect();
|
|
208
212
|
}
|
|
209
|
-
if let Some(root) = cf.entries.first().cloned()
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
if let Some(root) = cf.entries.first().cloned()
|
|
214
|
+
&& root.start <= MAX_REGSECT
|
|
215
|
+
&& root.size > 0
|
|
216
|
+
{
|
|
217
|
+
cf.mini_stream = cf.read_chain(root.start, Some(root.size))?;
|
|
213
218
|
}
|
|
214
219
|
Ok(cf)
|
|
215
220
|
}
|
|
@@ -354,10 +359,10 @@ impl<'a> CompoundFile<'a> {
|
|
|
354
359
|
})?;
|
|
355
360
|
out.extend_from_slice(sec);
|
|
356
361
|
count += 1;
|
|
357
|
-
if let Some(s) = size
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
362
|
+
if let Some(s) = size
|
|
363
|
+
&& out.len() as u64 >= s
|
|
364
|
+
{
|
|
365
|
+
break;
|
|
361
366
|
}
|
|
362
367
|
sid = self.fat.get(sid as usize).copied().unwrap_or(ENDOFCHAIN);
|
|
363
368
|
}
|
|
@@ -431,7 +436,9 @@ fn parse_dir_entry(e: &[u8]) -> DirEntry {
|
|
|
431
436
|
let units: Vec<u16> = e
|
|
432
437
|
.get(..name_len.saturating_sub(2))
|
|
433
438
|
.unwrap_or(&[])
|
|
434
|
-
.
|
|
439
|
+
.as_chunks::<2>()
|
|
440
|
+
.0
|
|
441
|
+
.iter()
|
|
435
442
|
.filter_map(|c| le::u16_at(c, 0))
|
|
436
443
|
.collect();
|
|
437
444
|
let kind = match le::u8_at(e, 66).unwrap_or(0) {
|
|
@@ -449,13 +449,13 @@ impl Mapper {
|
|
|
449
449
|
bytes: item.raw.to_vec(),
|
|
450
450
|
});
|
|
451
451
|
}
|
|
452
|
-
if let Some(id) = h.id
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
452
|
+
if let Some(id) = h.id
|
|
453
|
+
&& let Some(attrs) = self.pending_tags.remove(&id)
|
|
454
|
+
{
|
|
455
|
+
e.attributes = attrs
|
|
456
|
+
.into_iter()
|
|
457
|
+
.map(|(_, a)| relative_to_owner(a, &e))
|
|
458
|
+
.collect();
|
|
459
459
|
}
|
|
460
460
|
e
|
|
461
461
|
}
|