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.
Files changed (185) hide show
  1. {pycadkit-0.3.7 → pycadkit-0.4.0}/Cargo.lock +138 -10
  2. {pycadkit-0.3.7 → pycadkit-0.4.0}/Cargo.toml +12 -8
  3. {pycadkit-0.3.7 → pycadkit-0.4.0}/PKG-INFO +1 -1
  4. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/doc_ops.rs +13 -15
  5. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/geom_ops.rs +4 -4
  6. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/model.rs +4 -4
  7. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/ops.rs +4 -4
  8. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/polygon.rs +13 -16
  9. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/svg.rs +23 -22
  10. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/text.rs +11 -10
  11. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/examples/raster_structure.rs +9 -11
  12. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/cfb.rs +19 -12
  13. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/mod.rs +7 -7
  14. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/v8.rs +13 -14
  15. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/decode_v8.rs +1 -1
  16. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/v7.rs +1 -1
  17. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/text.rs +5 -3
  18. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/container.rs +18 -16
  19. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/mod.rs +15 -15
  20. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster_builtin.rs +4 -2
  21. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster_template.rs +4 -2
  22. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/seed_prepare.rs +30 -32
  23. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tables.rs +12 -16
  24. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/examples/dwgdump.rs +4 -5
  25. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/bits.rs +1 -1
  26. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r2004.rs +6 -1
  27. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r2007.rs +3 -1
  28. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/handles.rs +4 -4
  29. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/mapping/mod.rs +2 -3
  30. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/mod.rs +1 -1
  31. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/corpus.rs +25 -24
  32. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/entities.rs +4 -4
  33. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/mod.rs +16 -16
  34. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/entities.rs +16 -15
  35. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/mod.rs +33 -35
  36. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/export.rs +13 -12
  37. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/geometry.rs +8 -9
  38. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/lib.rs +5 -6
  39. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/validate.rs +13 -14
  40. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/roundtrip.rs +13 -15
  41. {pycadkit-0.3.7 → pycadkit-0.4.0}/LICENSE-APACHE +0 -0
  42. {pycadkit-0.3.7 → pycadkit-0.4.0}/LICENSE-MIT +0 -0
  43. {pycadkit-0.3.7 → pycadkit-0.4.0}/NOTICE +0 -0
  44. {pycadkit-0.3.7 → pycadkit-0.4.0}/README.md +0 -0
  45. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/Cargo.toml +0 -0
  46. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/LICENSE-APACHE +0 -0
  47. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/LICENSE-MIT +0 -0
  48. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/NOTICE +0 -0
  49. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/README.md +0 -0
  50. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/examples/interchange.rs +0 -0
  51. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/src/lib.rs +0 -0
  52. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit/src/prelude.rs +0 -0
  53. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/Cargo.toml +0 -0
  54. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/LICENSE-APACHE +0 -0
  55. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/LICENSE-MIT +0 -0
  56. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/NOTICE +0 -0
  57. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/README.md +0 -0
  58. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/aci.rs +0 -0
  59. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/bytes.rs +0 -0
  60. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/error.rs +0 -0
  61. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/export.rs +0 -0
  62. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/geom.rs +0 -0
  63. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/lib.rs +0 -0
  64. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/options.rs +0 -0
  65. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-core/src/units.rs +0 -0
  66. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/Cargo.toml +0 -0
  67. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/LICENSE-APACHE +0 -0
  68. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/LICENSE-MIT +0 -0
  69. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/NOTICE +0 -0
  70. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/README.md +0 -0
  71. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/examples/dgn_summary.rs +0 -0
  72. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/budget.rs +0 -0
  73. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/fuzz_tests.rs +0 -0
  74. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/le.rs +0 -0
  75. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/level_names.rs +0 -0
  76. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/lib.rs +0 -0
  77. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/map/v7.rs +0 -0
  78. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/element.rs +0 -0
  79. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/linkage.rs +0 -0
  80. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/mod.rs +0 -0
  81. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/native/v8.rs +0 -0
  82. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/palette.rs +0 -0
  83. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/encode.rs +0 -0
  84. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/named.rs +0 -0
  85. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/polyline.rs +0 -0
  86. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/raster.rs +0 -0
  87. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/application.rs +0 -0
  88. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/dictionary.rs +0 -0
  89. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/microstation.rs +0 -0
  90. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/raster.rs +0 -0
  91. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/raster_template.rs +0 -0
  92. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/regressions.rs +0 -0
  93. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests/text.rs +0 -0
  94. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/tests.rs +0 -0
  95. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/writer/text.rs +0 -0
  96. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/src/zlib.rs +0 -0
  97. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/common/mod.rs +0 -0
  98. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/private_corpus.rs +0 -0
  99. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/private_dictionary.rs +0 -0
  100. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/robustness.rs +0 -0
  101. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v7_corpus.rs +0 -0
  102. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_oracle.rs +0 -0
  103. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_public.rs +0 -0
  104. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dgn/tests/v8_range.rs +0 -0
  105. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/Cargo.toml +0 -0
  106. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/LICENSE-APACHE +0 -0
  107. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/LICENSE-MIT +0 -0
  108. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/NOTICE +0 -0
  109. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/README.md +0 -0
  110. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/examples/docsummary.rs +0 -0
  111. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/classes.rs +0 -0
  112. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/codepage.rs +0 -0
  113. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/lz77_r2004.rs +0 -0
  114. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/lz77_r2007.rs +0 -0
  115. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/mod.rs +0 -0
  116. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/r13.rs +0 -0
  117. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/container/reed_solomon.rs +0 -0
  118. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/crc.rs +0 -0
  119. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/header.rs +0 -0
  120. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/lib.rs +0 -0
  121. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/mapping/entity.rs +0 -0
  122. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/native/entities.rs +0 -0
  123. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/native/mod.rs +0 -0
  124. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/annotation.rs +0 -0
  125. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/curves.rs +0 -0
  126. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/entities.rs +0 -0
  127. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/hatch.rs +0 -0
  128. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/misc.rs +0 -0
  129. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/registry.rs +0 -0
  130. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/object/tables.rs +0 -0
  131. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/reader.rs +0 -0
  132. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/src/version.rs +0 -0
  133. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/oracle.rs +0 -0
  134. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dwg/tests/robustness.rs +0 -0
  135. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/Cargo.toml +0 -0
  136. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/LICENSE-APACHE +0 -0
  137. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/LICENSE-MIT +0 -0
  138. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/NOTICE +0 -0
  139. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/README.md +0 -0
  140. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/examples/dump.rs +0 -0
  141. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/lib.rs +0 -0
  142. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/native/mod.rs +0 -0
  143. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/native/text.rs +0 -0
  144. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/ocs.rs +0 -0
  145. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/common.rs +0 -0
  146. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/hatch.rs +0 -0
  147. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/records.rs +0 -0
  148. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/reader/tables.rs +0 -0
  149. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/curves.rs +0 -0
  150. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/src/writer/out.rs +0 -0
  151. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/ascii_vs_binary.rs +0 -0
  152. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/common/mod.rs +0 -0
  153. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/compare_reader_with_ezdxf.py +0 -0
  154. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/review_fixes.rs +0 -0
  155. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/robustness.rs +0 -0
  156. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/roundtrip.rs +0 -0
  157. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/synthetic_read.rs +0 -0
  158. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/synthetic_write.rs +0 -0
  159. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-dxf/tests/validate_with_ezdxf.py +0 -0
  160. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/Cargo.toml +0 -0
  161. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/LICENSE-APACHE +0 -0
  162. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/LICENSE-MIT +0 -0
  163. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/NOTICE +0 -0
  164. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/README.md +0 -0
  165. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/curves.rs +0 -0
  166. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/mapping.rs +0 -0
  167. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/native.rs +0 -0
  168. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/tkgm.rs +0 -0
  169. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/src/xml.rs +0 -0
  170. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/support/export_cases.rs +0 -0
  171. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-gml/tests/support/tkgm_cases.rs +0 -0
  172. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/Cargo.toml +0 -0
  173. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/LICENSE-APACHE +0 -0
  174. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/LICENSE-MIT +0 -0
  175. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/NOTICE +0 -0
  176. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/README.md +0 -0
  177. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/src/lib.rs +0 -0
  178. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/conftest.py +0 -0
  179. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/test_cadkit.py +0 -0
  180. {pycadkit-0.3.7 → pycadkit-0.4.0}/crates/cadkit-py/tests/test_citygml.py +0 -0
  181. {pycadkit-0.3.7 → pycadkit-0.4.0}/pyproject.toml +0 -0
  182. {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/__init__.py +0 -0
  183. {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/__init__.pyi +0 -0
  184. {pycadkit-0.3.7 → pycadkit-0.4.0}/python/cadkit/_cadkit.pyi +0 -0
  185. {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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
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.3.7"
7
+ version = "0.4.0"
8
8
  edition = "2024"
9
- rust-version = "1.85"
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-core = { path = "crates/cadkit-core", version = "0.3.7" }
18
- cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.3.7", default-features = false }
19
- cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.3.7" }
20
- cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.3.7" }
21
- cadkit-gml = { path = "crates/cadkit-gml", version = "0.3.7" }
22
- cadkit = { path = "crates/cadkit", version = "0.3.7" }
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycadkit
3
- Version: 0.3.7
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -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
- if let Some(last) = vertices.last() {
880
- out.push(Vertex {
881
- bulge: 0.0,
882
- ..*last
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
- if let Some(l) = inherited_layer {
909
- e.layer = Some(l.to_owned());
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
- if let Some(st) = disp.style.as_deref() {
961
- styles.insert(st);
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
- if first.distance_to(last) > 1e-12 {
860
- pts.push(first);
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
- if !children.is_empty() {
137
- stack.push(children);
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
- if let Some(arc) = segment_arc(a, b, normal, tf) {
811
- arc.extend_bbox(bb);
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
- return Err(invalid("polygon ring intersects itself"));
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
- return Err(invalid("polygon boundaries intersect"));
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
- if inside(project(p), other, &project, work)?
136
- || inside(project(q), hole, &project, work)?
137
- {
138
- return Err(invalid("polygon holes overlap"));
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
- if let (Some(&tip), Some(&from)) = (v.first(), v.get(1)) {
1173
- let (dx, dy) = (from.0 - tip.0, from.1 - tip.1);
1174
- let seg_len = dx.hypot(dy);
1175
- if seg_len > 1e-9 {
1176
- let alen = (self.cross * 2.5).min(seg_len * 0.45);
1177
- let (ux, uy) = (dx / seg_len, dy / seg_len);
1178
- let (px, py) = (-uy, ux);
1179
- let hw = alen * 0.35;
1180
- let w1 = (tip.0 + ux * alen + px * hw, tip.1 + uy * alen + py * hw);
1181
- let w2 = (tip.0 + ux * alen - px * hw, tip.1 + uy * alen - py * hw);
1182
- pb.move_to(w1);
1183
- pb.line_to(tip);
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 && options.expand_blocks && options.text && !doc.blocks.is_empty() {
1648
- if let Some(m) = doc.models.get(options.model) {
1649
- let mut stack = Vec::new();
1650
- r.render_expanded_insert_attributes(&m.entities, &WalkContext::root(), &mut stack, cap);
1651
- if r.layers.bytes > cap {
1652
- truncated = true;
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
- if let Some(Ok(c)) = char::decode_utf16([unit as u16, low as u16]).next() {
441
- decoded = Some((c.to_string(), 14));
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 && kind == Some(b'M') {
449
- if let (Some(n), Some(code)) = (bytes.get(i + 3).copied(), hex4(bytes, i + 4)) {
450
- let pair = [(code >> 8) as u8, code as u8];
451
- if let Some(text) = mbcs(n, pair).filter(|t| !t.is_empty()) {
452
- decoded = Some((text, 8));
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().chunks_exact(8).enumerate().skip(4) {
90
- if let Ok(bytes) = <[u8; 8]>::try_from(b) {
91
- if let Some(kind) = kinds.get(&u64::from_le_bytes(bytes)) {
92
- *counts
93
- .entry(format!(
94
- "type={} possible_id_at={:x} target_type={kind}",
95
- r.type_code(),
96
- off * 8
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
- .chunks_exact(DIR_ENTRY_LEN)
188
- .map(parse_dir_entry)
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
- .chunks_exact(4)
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
- if root.start <= MAX_REGSECT && root.size > 0 {
211
- cf.mini_stream = cf.read_chain(root.start, Some(root.size))?;
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
- if out.len() as u64 >= s {
359
- break;
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
- .chunks_exact(2)
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
- if let Some(attrs) = self.pending_tags.remove(&id) {
454
- e.attributes = attrs
455
- .into_iter()
456
- .map(|(_, a)| relative_to_owner(a, &e))
457
- .collect();
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
  }