openscad-cpp-evaluator 1.50.0__tar.gz → 1.50.2__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 (239) hide show
  1. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/CLAUDE.md +6 -1
  2. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/PKG-INFO +1 -1
  3. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/lexer.l +11 -1
  4. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_lexical.cpp +16 -0
  5. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/pyproject.toml +1 -1
  6. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/alpha_wrap.cpp +8 -1
  7. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_alpha_wrap.cpp +10 -0
  8. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/.github/workflows/ci.yml +0 -0
  9. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/.github/workflows/wheels.yml +0 -0
  10. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/.gitignore +0 -0
  11. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/.gitmodules +0 -0
  12. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/CMakeLists.txt +0 -0
  13. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/LICENSE +0 -0
  14. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/README.md +0 -0
  15. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/bindings/CMakeLists.txt +0 -0
  16. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/bindings/ast_to_py.cpp +0 -0
  17. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/bindings/module.cpp +0 -0
  18. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/cmake/embed_font.cmake +0 -0
  19. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/cmake/patch_manifold.cmake +0 -0
  20. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/examples/CMakeLists.txt +0 -0
  21. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/examples/eval_perf_benchmark.cpp +0 -0
  22. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/examples/manifold_cache_reuse.cpp +0 -0
  23. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/examples/minimal_debugger.cpp +0 -0
  24. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  25. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/.gitignore +0 -0
  26. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  27. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  28. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/LICENSE +0 -0
  29. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/README.md +0 -0
  30. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  31. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  32. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  33. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  34. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  35. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  36. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  37. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  38. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  39. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  40. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  41. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  42. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  43. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
  44. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  45. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  46. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/.DS_Store +0 -0
  47. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  48. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/api.cpp +0 -0
  49. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  50. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  51. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  52. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  53. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  54. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  55. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  56. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  57. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  58. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  59. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  60. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  61. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  62. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  63. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  64. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/position.cpp +0 -0
  65. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  66. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  67. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  68. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  69. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  70. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  71. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  72. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  73. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  74. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
  75. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  76. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  77. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  78. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  79. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  80. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  81. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  82. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  83. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  84. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_profile_time.cpp +0 -0
  85. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
  86. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  87. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  88. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  89. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  90. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
  91. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  92. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  93. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  94. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  95. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  96. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  97. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  98. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  99. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  100. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  101. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
  102. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  103. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  104. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  105. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  106. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  107. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  108. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  109. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  110. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  111. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  112. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/export.hpp +0 -0
  113. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  114. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  115. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
  116. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  117. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  118. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  119. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  120. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  121. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  122. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  123. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  124. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/reassign.hpp +0 -0
  125. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  126. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  127. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  128. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  129. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
  130. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/value.hpp +0 -0
  131. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  132. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/python/openscad_cpp_evaluator/__init__.py +0 -0
  133. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/resources/fonts/LICENSE +0 -0
  134. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/resources/fonts/LiberationSans-Bold.ttf +0 -0
  135. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
  136. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/resources/fonts/LiberationSans-Italic.ttf +0 -0
  137. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  138. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/CMakeLists.txt +0 -0
  139. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/booleans.cpp +0 -0
  140. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/builtins.hpp +0 -0
  141. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/call_args.cpp +0 -0
  142. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/color.cpp +0 -0
  143. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/control.cpp +0 -0
  144. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/dxf_dim.cpp +0 -0
  145. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/extrude.cpp +0 -0
  146. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/function_builtins.cpp +0 -0
  147. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/import.cpp +0 -0
  148. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/modifiers.cpp +0 -0
  149. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/primitives_2d.cpp +0 -0
  150. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/primitives_3d.cpp +0 -0
  151. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/profile_time.cpp +0 -0
  152. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/registry.cpp +0 -0
  153. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/roof.cpp +0 -0
  154. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/segments.cpp +0 -0
  155. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/surface.cpp +0 -0
  156. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/text.cpp +0 -0
  157. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/topology.cpp +0 -0
  158. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/builtins/transforms.cpp +0 -0
  159. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/bytecode_compiler.cpp +0 -0
  160. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/bytecode_vm.cpp +0 -0
  161. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/colored_body.cpp +0 -0
  162. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/coverage.cpp +0 -0
  163. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/csg_generate.cpp +0 -0
  164. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/csg_resolve.cpp +0 -0
  165. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/css_colors.cpp +0 -0
  166. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/debug/debug_repl.cpp +0 -0
  167. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/debug_profile.cpp +0 -0
  168. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/eval_context.cpp +0 -0
  169. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/eval_error.cpp +0 -0
  170. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/eval_use.cpp +0 -0
  171. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/export.cpp +0 -0
  172. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/expr_eval.cpp +0 -0
  173. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/format_closure.cpp +0 -0
  174. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/import/dxf_import.cpp +0 -0
  175. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/import/mesh_import.cpp +0 -0
  176. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/import/scene_import.cpp +0 -0
  177. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/import/surface_load.cpp +0 -0
  178. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/import/svg_import.cpp +0 -0
  179. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/manifold_cache.cpp +0 -0
  180. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/measure_geometry.cpp +0 -0
  181. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/mesh_check.cpp +0 -0
  182. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/stmt_eval.cpp +0 -0
  183. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/text/font_match.cpp +0 -0
  184. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/text/freetype_font_provider.cpp +0 -0
  185. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/text/text_metrics.cpp +0 -0
  186. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/user_calls.cpp +0 -0
  187. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/utf8.cpp +0 -0
  188. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/value.cpp +0 -0
  189. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/xkcd_colors.cpp +0 -0
  190. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/xkcd_colors.hpp +0 -0
  191. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/src/zip_stored.cpp +0 -0
  192. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/CMakeLists.txt +0 -0
  193. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_booleans.cpp +0 -0
  194. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_bytecode_compiler.cpp +0 -0
  195. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_children_separate.cpp +0 -0
  196. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_cli.cpp +0 -0
  197. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_control_flow.cpp +0 -0
  198. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_coverage.cpp +0 -0
  199. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_csg_tree.cpp +0 -0
  200. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_debug_hooks.cpp +0 -0
  201. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_discretizer.cpp +0 -0
  202. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_dxf_svg_import.cpp +0 -0
  203. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_eval_context.cpp +0 -0
  204. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_export.cpp +0 -0
  205. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_expr_eval.cpp +0 -0
  206. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_extrude_roof.cpp +0 -0
  207. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_feature_detection.cpp +0 -0
  208. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_function_builtins.cpp +0 -0
  209. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_helpers.hpp +0 -0
  210. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_import_export.cpp +0 -0
  211. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_include_cache.cpp +0 -0
  212. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_manifold_cache.cpp +0 -0
  213. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_mesh_check.cpp +0 -0
  214. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_multi_color_merge.cpp +0 -0
  215. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_openscad_parity.cpp +0 -0
  216. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_primitives.cpp +0 -0
  217. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_profile_time.cpp +0 -0
  218. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_profiling.cpp +0 -0
  219. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_python_bindings.py +0 -0
  220. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_render_expr.cpp +0 -0
  221. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_scope_trail.cpp +0 -0
  222. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_scoping.cpp +0 -0
  223. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_surface.cpp +0 -0
  224. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_tail_calls.cpp +0 -0
  225. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_text.cpp +0 -0
  226. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_transforms.cpp +0 -0
  227. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_undef_args.cpp +0 -0
  228. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_unexpected_args.cpp +0 -0
  229. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_use.cpp +0 -0
  230. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_value.cpp +0 -0
  231. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_viewport_params.cpp +0 -0
  232. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tests/test_zip_stored.cpp +0 -0
  233. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/third_party/predicates/predicates.c +0 -0
  234. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/third_party/predicates/predicates.h +0 -0
  235. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tools/cli/CMakeLists.txt +0 -0
  236. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tools/cli/cli_lib.cpp +0 -0
  237. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tools/cli/cli_lib.hpp +0 -0
  238. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/tools/cli/main.cpp +0 -0
  239. {openscad_cpp_evaluator-1.50.0 → openscad_cpp_evaluator-1.50.2}/uv.lock +0 -0
@@ -1975,7 +1975,9 @@ is evaluated before the clock starts. Times under 1 ms print in microseconds (`f
1975
1975
 
1976
1976
  `alpha_wrap(alpha, offset) { ... }` shrink-wraps its children in a closed, manifold skin
1977
1977
  (BelfrySCAD #941; `supported_feature("alpha-wrap")` is 1). The skin follows any concavity a ball
1978
- of radius `alpha` can enter and bridges any gap or hole narrower than that; every point of it lies
1978
+ of radius `alpha` can enter and bridges any gap or hole that ball cannot pass, i.e. narrower than about
1979
+ `2*alpha` (not a sharp cut-off: from ~1.5x alpha to 2x alpha + offset a gap may be bridged only
1980
+ partly, leaving strands, which CGAL's own Alpha_wrap_3 does too -- BelfrySCAD #941); every point of it lies
1979
1981
  `offset` outside the input. Defaults are CGAL's: alpha 1/20 of the bounding-box diagonal, offset
1980
1982
  alpha/30. All Normal 3D children are wrapped together into one body taking the first one's colour,
1981
1983
  **including an open `polyhedron()`'s raw triangles** (`ColoredBody::rawMesh`) -- wrapping geometry
@@ -2001,6 +2003,9 @@ warning). A non-positive or non-numeric `alpha`/`offset` warns and leaves the ch
2001
2003
  input (separating-axis tet/triangle test over a BVH) onto the offset surface.
2002
2004
  - The skin is built as `MeshGL64`: rounding Steiner points to float can fold the thin triangles a
2003
2005
  small offset produces. Input is read from each body's float `MeshGL`.
2006
+ - The finished skin is `Simplify(offset / 100)`ed: its points all lie on the offset surface, so its
2007
+ flat sides are many coplanar triangles. Measured 1.05-3.3x fewer triangles (two cubes 7,284 ->
2008
+ 2,238; bracket at alpha 0.5 11,858 -> 4,134), volume within 0.001%, no measurable time (#941).
2004
2009
  - `checkCancel()` every 256 gates; a 5M-Steiner-point runaway guard warns and returns the children.
2005
2010
  - Measured: a 242-triangle bracket wraps in 5 ms at alpha 3 (362 faces) and 137 ms at alpha 0.5
2006
2011
  (11.9k faces); extruded text, 2,468 triangles, 0.7 s at alpha 0.5 and 4 s at alpha 0.2 (102k
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 1.50.0
3
+ Version: 1.50.2
4
4
  Summary: C++ OpenSCAD evaluator with Python bindings
5
5
  Author: NeuSCAD Contributors
6
6
  License-Expression: MIT AND OFL-1.1
@@ -88,7 +88,17 @@ NUMLIT 0[xX][0-9A-Fa-f]+|[0-9]+([.][0-9]*)?([eE][+-]?[0-9]+)?|[.][0-9]+([eE][+-
88
88
  // U+FEFF (EF BB BF, a byte-order mark, anywhere in the file) and a bare
89
89
  // A0, Latin-1's no-break space.
90
90
  }
91
- "//"[^\n]* { /* skip line comment */ }
91
+ \xe2\x80\xa8|\xe2\x80\xa9|\xc2\x85 {
92
+ // U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR and U+0085 NEXT
93
+ // LINE: line breaks to look at, so whitespace that also ends a `//`
94
+ // comment (below). Qt's editor types U+2028 for Shift+Enter, and it
95
+ // shows as a new line (BelfrySCAD #949). It does NOT count as a line:
96
+ // the editor numbers its lines by block and a U+2028 sits inside one,
97
+ // so every line and column after it still matches the editor's.
98
+ // OpenSCAD's lexer rejects all three.
99
+ }
100
+ /* A line comment ends at a newline or at any separator above. */
101
+ "//"([^\n\xe2\xc2]|\xe2[^\x80\n]|\xe2\x80[^\xa8\xa9\n]|\xc2[^\x85\n])* { /* skip line comment */ }
92
102
  "/*"([^*]|\*+[^*/])*\*+"/" { /* skip block comment */ }
93
103
 
94
104
  {IDENT} {
@@ -483,6 +483,22 @@ TEST(LexicalWhitespace, NoBreakSpaceByteOrderMarkAndLatin1A0) {
483
483
  }
484
484
  }
485
485
 
486
+ // U+2028/U+2029/U+0085 are whitespace that ends a line comment, without
487
+ // counting as a line (BelfrySCAD's editor numbers lines by block, and a
488
+ // U+2028 sits inside one).
489
+ TEST(LexicalWhitespace, UnicodeLineSeparatorsEndACommentButNotALine) {
490
+ for (const char* sep : {"\xe2\x80\xa8", "\xe2\x80\xa9", "\xc2\x85"}) {
491
+ const std::string src = std::string("a = 1;") + sep + "b = 2; // note" + sep + "c = 3;\nd = 4;";
492
+ auto ast = parseSrc(src);
493
+ ASSERT_EQ(ast.size(), 4u) << "the comment swallowed c = 3";
494
+ EXPECT_EQ(ast[2]->position().line, 1);
495
+ EXPECT_EQ(size_t(ast[2]->position().start_offset), src.find("c = 3"));
496
+ EXPECT_EQ(ast[3]->position().line, 2);
497
+ }
498
+ // Other multi-byte characters stay inside the comment.
499
+ EXPECT_EQ(parseSrc("a = 1; // \xe2\x80\x94 \xc2\xa0 \xe2\x82\xac c = 3;\nb = 2;").size(), 2u);
500
+ }
501
+
486
502
  // The message quotes a whole character, and names a byte that starts none,
487
503
  // so it is always valid UTF-8.
488
504
  TEST(LexicalWhitespace, UnexpectedCharacterMessageIsValidUtf8) {
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "openscad_cpp_evaluator"
7
- version = "1.50.0"
7
+ version = "1.50.2"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -2,7 +2,7 @@
2
2
  // manifold skin. A BelfrySCAD extension (BelfrySCAD #941).
3
3
  //
4
4
  // The skin follows any concavity a ball of radius `alpha` can enter and
5
- // bridges any gap or hole narrower than that, and every point of it lies
5
+ // bridges any gap or hole that ball cannot pass (about 2*alpha wide), and every point of it lies
6
6
  // `offset` outside the input. So it is also a robust rounded outward offset,
7
7
  // and a way to wrap geometry too broken for Manifold to accept: an open
8
8
  // polyhedron()'s raw triangles are wrapped like any other.
@@ -56,6 +56,11 @@ constexpr double kDefaultOffsetFraction = 1.0 / 30.0;
56
56
  // A runaway guard, not a quality knob: a tiny alpha on a big model asks for
57
57
  // tens of millions of points, which would exhaust memory long before ending.
58
58
  constexpr size_t kMaxSteinerPoints = 5'000'000;
59
+ // The skin's flat sides are cut into many small coplanar triangles, its
60
+ // points all lying on the offset surface. Merging at a tolerance this small
61
+ // next to the offset leaves the rounded edges' shape and the volume alone
62
+ // while cutting the triangle count by up to ~3x (#941).
63
+ constexpr double kMergeFraction = 1.0 / 100.0;
59
64
 
60
65
  using V3 = std::array<double, 3>;
61
66
  V3 operator+(V3 a, V3 b) { return {a[0] + b[0], a[1] + b[1], a[2] + b[2]}; }
@@ -583,6 +588,8 @@ std::vector<ColoredBody> generateAlphaWrap(Evaluator& ev, const CSGParams& param
583
588
  manifold::Manifold body(wrap.skin());
584
589
  if (body.Status() != manifold::Manifold::Error::NoError) {
585
590
  ev.warn("alpha_wrap: the skin is not manifold", &node.position());
591
+ } else {
592
+ body = body.Simplify(kMergeFraction * *offset);
586
593
  }
587
594
  ColoredBody cb = ev.tagGenerated(std::move(body), node, Value{});
588
595
  cb.color = color;
@@ -40,6 +40,16 @@ TEST(AlphaWrap, BridgesGapsNarrowerThanAlpha) {
40
40
  EXPECT_EQ(soleBody(narrow).Genus(), 2);
41
41
  }
42
42
 
43
+ TEST(AlphaWrap, FlatSidesAreMerged) {
44
+ // Two cubes: without the merge the skin was 7,282 triangles; merged at
45
+ // offset/100 it is ~2.2k, with the volume unchanged (#941).
46
+ const std::string two = "{ cube(10); translate([11,0,0]) cube(5); }";
47
+ Evaluated w = evalSrc("alpha_wrap(0.5, 0.01) " + two);
48
+ EXPECT_EQ(soleBody(w).Status(), manifold::Manifold::Error::NoError);
49
+ EXPECT_LT(soleBody(w).NumTri(), 3000u);
50
+ EXPECT_NEAR(soleBody(w).Volume(), 1132.51, 0.01);
51
+ }
52
+
43
53
  TEST(AlphaWrap, SkinSitsOffsetOutsideTheInput) {
44
54
  Evaluated w = evalSrc(std::string("alpha_wrap(0.5, 0.1) ") + kBracket + ";");
45
55
  const manifold::Box bb = soleBody(w).BoundingBox();