openscad-cpp-evaluator 1.49.9__tar.gz → 1.50.1__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.49.9 → openscad_cpp_evaluator-1.50.1}/CLAUDE.md +37 -0
  2. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/CMakeLists.txt +2 -1
  3. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/PKG-INFO +1 -1
  4. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/lexer.l +11 -1
  5. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_lexical.cpp +16 -0
  6. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/pyproject.toml +1 -1
  7. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/CMakeLists.txt +7 -0
  8. openscad_cpp_evaluator-1.50.1/src/builtins/alpha_wrap.cpp +593 -0
  9. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/builtins.hpp +5 -0
  10. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/function_builtins.cpp +1 -0
  11. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/registry.cpp +3 -0
  12. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/CMakeLists.txt +1 -0
  13. openscad_cpp_evaluator-1.50.1/tests/test_alpha_wrap.cpp +120 -0
  14. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_feature_detection.cpp +1 -1
  15. openscad_cpp_evaluator-1.50.1/third_party/predicates/predicates.c +4130 -0
  16. openscad_cpp_evaluator-1.50.1/third_party/predicates/predicates.h +22 -0
  17. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.github/workflows/ci.yml +0 -0
  18. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.github/workflows/wheels.yml +0 -0
  19. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.gitignore +0 -0
  20. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.gitmodules +0 -0
  21. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/LICENSE +0 -0
  22. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/README.md +0 -0
  23. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/CMakeLists.txt +0 -0
  24. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/ast_to_py.cpp +0 -0
  25. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/module.cpp +0 -0
  26. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/cmake/embed_font.cmake +0 -0
  27. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/cmake/patch_manifold.cmake +0 -0
  28. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/CMakeLists.txt +0 -0
  29. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/eval_perf_benchmark.cpp +0 -0
  30. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/manifold_cache_reuse.cpp +0 -0
  31. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/minimal_debugger.cpp +0 -0
  32. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
  33. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/.gitignore +0 -0
  34. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/CLAUDE.md +0 -0
  35. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
  36. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/LICENSE +0 -0
  37. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/README.md +0 -0
  38. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
  39. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
  40. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
  41. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
  42. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
  43. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
  44. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
  45. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
  46. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
  47. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
  48. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
  49. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
  50. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
  51. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
  52. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
  53. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
  54. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/.DS_Store +0 -0
  55. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
  56. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/api.cpp +0 -0
  57. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
  58. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
  59. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
  60. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
  61. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
  62. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
  63. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
  64. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
  65. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/comments.cpp +0 -0
  66. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
  67. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
  68. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
  69. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
  70. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
  71. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
  72. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/position.cpp +0 -0
  73. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
  74. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/scope.cpp +0 -0
  75. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
  76. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
  77. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
  78. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
  79. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
  80. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
  81. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
  82. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
  83. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
  84. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
  85. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
  86. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
  87. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
  88. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
  89. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
  90. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
  91. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
  92. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_profile_time.cpp +0 -0
  93. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
  94. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
  95. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
  96. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
  97. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
  98. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
  99. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
  100. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
  101. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
  102. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
  103. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
  104. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
  105. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
  106. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
  107. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
  108. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
  109. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
  110. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
  111. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
  112. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
  113. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
  114. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
  115. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
  116. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
  117. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
  118. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
  119. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
  120. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/export.hpp +0 -0
  121. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
  122. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
  123. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
  124. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
  125. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
  126. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
  127. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
  128. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
  129. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
  130. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
  131. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/profile.hpp +0 -0
  132. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/reassign.hpp +0 -0
  133. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
  134. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/segments.hpp +0 -0
  135. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
  136. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
  137. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
  138. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/value.hpp +0 -0
  139. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
  140. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/python/openscad_cpp_evaluator/__init__.py +0 -0
  141. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LICENSE +0 -0
  142. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Bold.ttf +0 -0
  143. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
  144. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Italic.ttf +0 -0
  145. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Regular.ttf +0 -0
  146. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/booleans.cpp +0 -0
  147. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/call_args.cpp +0 -0
  148. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/color.cpp +0 -0
  149. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/control.cpp +0 -0
  150. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/dxf_dim.cpp +0 -0
  151. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/extrude.cpp +0 -0
  152. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/import.cpp +0 -0
  153. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/modifiers.cpp +0 -0
  154. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/primitives_2d.cpp +0 -0
  155. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/primitives_3d.cpp +0 -0
  156. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/profile_time.cpp +0 -0
  157. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/roof.cpp +0 -0
  158. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/segments.cpp +0 -0
  159. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/surface.cpp +0 -0
  160. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/text.cpp +0 -0
  161. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/topology.cpp +0 -0
  162. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/transforms.cpp +0 -0
  163. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/bytecode_compiler.cpp +0 -0
  164. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/bytecode_vm.cpp +0 -0
  165. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/colored_body.cpp +0 -0
  166. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/coverage.cpp +0 -0
  167. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/csg_generate.cpp +0 -0
  168. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/csg_resolve.cpp +0 -0
  169. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/css_colors.cpp +0 -0
  170. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/debug/debug_repl.cpp +0 -0
  171. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/debug_profile.cpp +0 -0
  172. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_context.cpp +0 -0
  173. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_error.cpp +0 -0
  174. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_use.cpp +0 -0
  175. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/export.cpp +0 -0
  176. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/expr_eval.cpp +0 -0
  177. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/format_closure.cpp +0 -0
  178. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/dxf_import.cpp +0 -0
  179. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/mesh_import.cpp +0 -0
  180. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/scene_import.cpp +0 -0
  181. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/surface_load.cpp +0 -0
  182. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/svg_import.cpp +0 -0
  183. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/manifold_cache.cpp +0 -0
  184. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/measure_geometry.cpp +0 -0
  185. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/mesh_check.cpp +0 -0
  186. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/stmt_eval.cpp +0 -0
  187. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/font_match.cpp +0 -0
  188. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/freetype_font_provider.cpp +0 -0
  189. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/text_metrics.cpp +0 -0
  190. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/user_calls.cpp +0 -0
  191. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/utf8.cpp +0 -0
  192. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/value.cpp +0 -0
  193. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/xkcd_colors.cpp +0 -0
  194. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/xkcd_colors.hpp +0 -0
  195. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/zip_stored.cpp +0 -0
  196. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_booleans.cpp +0 -0
  197. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_bytecode_compiler.cpp +0 -0
  198. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_children_separate.cpp +0 -0
  199. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_cli.cpp +0 -0
  200. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_control_flow.cpp +0 -0
  201. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_coverage.cpp +0 -0
  202. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_csg_tree.cpp +0 -0
  203. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_debug_hooks.cpp +0 -0
  204. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_discretizer.cpp +0 -0
  205. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_dxf_svg_import.cpp +0 -0
  206. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_eval_context.cpp +0 -0
  207. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_export.cpp +0 -0
  208. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_expr_eval.cpp +0 -0
  209. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_extrude_roof.cpp +0 -0
  210. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_function_builtins.cpp +0 -0
  211. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_helpers.hpp +0 -0
  212. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_import_export.cpp +0 -0
  213. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_include_cache.cpp +0 -0
  214. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_manifold_cache.cpp +0 -0
  215. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_mesh_check.cpp +0 -0
  216. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_multi_color_merge.cpp +0 -0
  217. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_openscad_parity.cpp +0 -0
  218. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_primitives.cpp +0 -0
  219. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_profile_time.cpp +0 -0
  220. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_profiling.cpp +0 -0
  221. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_python_bindings.py +0 -0
  222. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_render_expr.cpp +0 -0
  223. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_scope_trail.cpp +0 -0
  224. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_scoping.cpp +0 -0
  225. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_surface.cpp +0 -0
  226. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_tail_calls.cpp +0 -0
  227. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_text.cpp +0 -0
  228. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_transforms.cpp +0 -0
  229. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_undef_args.cpp +0 -0
  230. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_unexpected_args.cpp +0 -0
  231. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_use.cpp +0 -0
  232. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_value.cpp +0 -0
  233. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_viewport_params.cpp +0 -0
  234. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_zip_stored.cpp +0 -0
  235. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/CMakeLists.txt +0 -0
  236. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/cli_lib.cpp +0 -0
  237. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/cli_lib.hpp +0 -0
  238. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/main.cpp +0 -0
  239. {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/uv.lock +0 -0
@@ -1970,3 +1970,40 @@ is evaluated before the clock starts. Times under 1 ms print in microseconds (`f
1970
1970
  after the body, which a tail step would not wait for.
1971
1971
  - `PROFILE:` lines go straight to `echoFn_`, not through `emitWarning`, so the ManifoldCache never
1972
1972
  stores or replays them (a replay would print a stale time as if it were current).
1973
+
1974
+ ## `alpha_wrap()`
1975
+
1976
+ `alpha_wrap(alpha, offset) { ... }` shrink-wraps its children in a closed, manifold skin
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
1979
+ `offset` outside the input. Defaults are CGAL's: alpha 1/20 of the bounding-box diagonal, offset
1980
+ alpha/30. All Normal 3D children are wrapped together into one body taking the first one's colour,
1981
+ **including an open `polyhedron()`'s raw triangles** (`ColoredBody::rawMesh`) -- wrapping geometry
1982
+ too broken for Manifold is half the point. 2D children and `%`/`#` bodies pass through (2D with a
1983
+ warning). A non-positive or non-numeric `alpha`/`offset` warns and leaves the children as they were.
1984
+
1985
+ ### Implementation notes
1986
+
1987
+ - `src/builtins/alpha_wrap.cpp`, written **from the paper** (Portaneri et al., "Alpha Wrapping with
1988
+ an Offset", SIGGRAPH 2022) and CGAL's user manual -- **not** from CGAL's `Alpha_wrap_3` source,
1989
+ which is GPL and cannot be carried into this MIT project. Keep it that way: do not paste from CGAL.
1990
+ - Delaunay is our own Bowyer-Watson insertion over **Shewchuk's exact predicates**
1991
+ (`third_party/predicates/`, public domain, the original file minus its `random()` test helpers,
1992
+ which MSVC lacks). They are K&R C, so the project enables `C`; `predicates.c` is compiled with
1993
+ warnings off and must never see fast-math. `exactinit()` runs once (`std::call_once`).
1994
+ - Four far "super" vertices stand in for the infinite vertex; a cell using one is outside and never
1995
+ entered. The loose box's 8 corners are jittered by 1e-9 of the diagonal so no four are
1996
+ cospherical; Steiner points are not jittered, and a tie (`insphere == 0`) counts as no conflict.
1997
+ - Gates are ordered by the smallest empty sphere through the face (its centre on the dual Voronoi
1998
+ edge, nearest the face's circumcentre). Rule 1 finds where the Voronoi edge first meets the offset
1999
+ surface by **sphere tracing** -- the distance to the input is 1-Lipschitz, so stepping by
2000
+ `distance - offset` cannot overshoot. Rule 2 projects the circumcentre of a cell that overlaps the
2001
+ input (separating-axis tet/triangle test over a BVH) onto the offset surface.
2002
+ - The skin is built as `MeshGL64`: rounding Steiner points to float can fold the thin triangles a
2003
+ small offset produces. Input is read from each body's float `MeshGL`.
2004
+ - `checkCancel()` every 256 gates; a 5M-Steiner-point runaway guard warns and returns the children.
2005
+ - Measured: a 242-triangle bracket wraps in 5 ms at alpha 3 (362 faces) and 137 ms at alpha 0.5
2006
+ (11.9k faces); extruded text, 2,468 triangles, 0.7 s at alpha 0.5 and 4 s at alpha 0.2 (102k
2007
+ faces). Time follows OUTPUT size. Not done: CGAL's manifold post-pass for very thin features
2008
+ (no failure seen yet), and the same input scaled can differ by a near-tie or two (same shape,
2009
+ volume within 0.2%), which is why `DefaultsScaleWithTheModel` compares within tolerances.
@@ -11,7 +11,8 @@ if(NOT _oscad_pyproject MATCHES "\nversion = \"([0-9]+)\.([0-9]+)\.([0-9]+)\"")
11
11
  endif()
12
12
  set(OSCAD_EVAL_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
13
13
 
14
- project(openscad_cpp_evaluator VERSION ${OSCAD_EVAL_VERSION} LANGUAGES CXX)
14
+ # C for third_party/predicates (Shewchuk's robust predicates, used by alpha_wrap).
15
+ project(openscad_cpp_evaluator VERSION ${OSCAD_EVAL_VERSION} LANGUAGES C CXX)
15
16
 
16
17
  # On Apple Silicon, warn (don't fail -- a universal or intentionally-x86_64
17
18
  # build is legitimate) if the effective target architecture is x86_64 while
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscad_cpp_evaluator
3
- Version: 1.49.9
3
+ Version: 1.50.1
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.49.9"
7
+ version = "1.50.1"
8
8
  description = "C++ OpenSCAD evaluator with Python bindings"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -47,6 +47,8 @@ add_library(openscad_cpp_evaluator STATIC
47
47
  builtins/function_builtins.cpp
48
48
  builtins/import.cpp
49
49
  builtins/topology.cpp
50
+ builtins/alpha_wrap.cpp
51
+ ../third_party/predicates/predicates.c
50
52
  builtins/extrude.cpp
51
53
  builtins/roof.cpp
52
54
  builtins/surface.cpp
@@ -73,6 +75,11 @@ target_compile_options(openscad_cpp_evaluator PRIVATE
73
75
  $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall;-Wextra>
74
76
  )
75
77
 
78
+ # Shewchuk's predicates are 1996 K&R C, kept as published: quiet, and never
79
+ # with fast-math, which would break their exact arithmetic.
80
+ set_source_files_properties(../third_party/predicates/predicates.c PROPERTIES
81
+ COMPILE_OPTIONS "$<IF:$<C_COMPILER_ID:MSVC>,/w,-w>")
82
+
76
83
  # -Wall -Wextra above is about OUR code, but two TUs pull a vendored header
77
84
  # in wholesale and inherit its warnings: 27 from Boost.Polygon's voronoi
78
85
  # headers and 9 from stb_image_write's implementation, against 5 that were