ranger-compiler 3.5.1 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1064 -20
- package/LICENSE +3 -1
- package/README.md +123 -28
- package/dist/Lang.rgr +1188 -290
- package/dist/api.d.ts +2343 -879
- package/dist/api.js +79923 -56921
- package/dist/lib/JSON.rgr +102 -91
- package/dist/lib/Shell.rgr +4 -4
- package/dist/lib/apple/AppleToolchain.rgr +4 -4
- package/dist/lib/apple/README.md +5 -4
- package/dist/lib/apple/apple_test.rgr +1 -1
- package/dist/lib/core/README.md +1 -1
- package/dist/lib/evg/EVG.rgr +12 -0
- package/dist/lib/evg/EVGA11yFromTree.rgr +302 -0
- package/dist/lib/evg/EVGA11yTree.rgr +894 -0
- package/dist/lib/evg/EVGBox.rgr +267 -0
- package/dist/lib/evg/EVGBoxShorthandTest.rgr +220 -0
- package/dist/lib/evg/EVGCodepoint.rgr +316 -0
- package/dist/lib/evg/EVGColor.rgr +700 -0
- package/dist/lib/evg/EVGCommands.rgr +177 -0
- package/dist/lib/evg/EVGComponent.rgr +331 -0
- package/dist/lib/evg/EVGComponentTest.rgr +387 -0
- package/dist/lib/evg/EVGConnector.rgr +541 -0
- package/dist/lib/evg/EVGConnectorTest.rgr +306 -0
- package/dist/lib/evg/EVGDisplayList.rgr +4186 -0
- package/dist/lib/evg/EVGEasing.rgr +370 -0
- package/dist/lib/evg/EVGEffectTest.rgr +253 -0
- package/dist/lib/evg/EVGElement.rgr +4914 -0
- package/dist/lib/evg/EVGFixedTest.rgr +289 -0
- package/dist/lib/evg/EVGFlexRulesTest.rgr +317 -0
- package/dist/lib/evg/EVGFlexWrapTest.rgr +246 -0
- package/dist/lib/evg/EVGFling.rgr +244 -0
- package/dist/lib/evg/EVGFocus.rgr +400 -0
- package/dist/lib/evg/EVGFocusTest.rgr +399 -0
- package/dist/lib/evg/EVGGradient.rgr +322 -0
- package/dist/lib/evg/EVGGrapheme.rgr +190 -0
- package/dist/lib/evg/EVGGrid.rgr +975 -0
- package/dist/lib/evg/EVGHitTest.rgr +208 -0
- package/dist/lib/evg/EVGHoles.rgr +294 -0
- package/dist/lib/evg/EVGHostMeasurerTest.rgr +281 -0
- package/dist/lib/evg/EVGHostTextMeasurer.rgr +331 -0
- package/dist/lib/evg/EVGHostTree.rgr +834 -0
- package/dist/lib/evg/EVGHostTreeTest.rgr +447 -0
- package/dist/lib/evg/EVGImageDecode.rgr +117 -0
- package/dist/lib/evg/EVGImageMeasurer.rgr +86 -0
- package/dist/lib/evg/EVGInspect.rgr +883 -0
- package/dist/lib/evg/EVGInvalidateTest.rgr +432 -0
- package/dist/lib/evg/EVGJsonTest.rgr +535 -0
- package/dist/lib/evg/EVGLayout.rgr +4220 -0
- package/dist/lib/evg/EVGMeasure.rgr +1267 -0
- package/dist/lib/evg/EVGOverlayTest.rgr +626 -0
- package/dist/lib/evg/EVGPatch.rgr +1721 -0
- package/dist/lib/evg/EVGPatchTest.rgr +692 -0
- package/dist/lib/evg/EVGPopoverTest.rgr +395 -0
- package/dist/lib/evg/EVGReconcile.rgr +226 -0
- package/dist/lib/evg/EVGReconcileTest.rgr +421 -0
- package/dist/lib/evg/EVGReject.rgr +126 -0
- package/dist/lib/evg/EVGRelayoutTest.rgr +375 -0
- package/dist/lib/evg/EVGRtlLayoutTest.rgr +319 -0
- package/dist/lib/evg/EVGRuler.rgr +232 -0
- package/dist/lib/evg/EVGRulerTest.rgr +172 -0
- package/dist/lib/evg/EVGSelectChrome.rgr +178 -0
- package/dist/lib/evg/EVGStyleCacheTest.rgr +419 -0
- package/dist/lib/evg/EVGStyleSheet.rgr +2148 -0
- package/dist/lib/evg/EVGStyleStateTest.rgr +407 -0
- package/dist/lib/evg/EVGStyleVarTest.rgr +471 -0
- package/dist/lib/evg/EVGText.rgr +105 -0
- package/dist/lib/evg/EVGTextEngine.rgr +536 -0
- package/dist/lib/evg/EVGTextMeasurer.rgr +720 -0
- package/dist/lib/evg/EVGTimingTest.rgr +1417 -0
- package/dist/lib/evg/EVGToolbar.rgr +1369 -0
- package/dist/lib/evg/EVGTransition.rgr +728 -0
- package/dist/lib/evg/EVGTreeJson.rgr +721 -0
- package/dist/lib/evg/EVGUnit.rgr +554 -0
- package/dist/lib/evg/EVGViewportUnitTest.rgr +236 -0
- package/dist/lib/evg/EvgApp.rgr +189 -0
- package/dist/lib/evg/EvgBitmapTracer.rgr +4277 -0
- package/dist/lib/evg/EvgBitmapTracerTest.rgr +2119 -0
- package/dist/lib/evg/EvgHost.rgr +451 -0
- package/dist/lib/evg/EvgTest.rgr +91 -0
- package/dist/lib/evg/EvgTraceColor.rgr +236 -0
- package/dist/lib/evg/EvgTraceCurve.rgr +648 -0
- package/dist/lib/evg/EvgTraceFit.rgr +767 -0
- package/dist/lib/evg/EvgTracePath.rgr +435 -0
- package/dist/lib/evg/EvgTraceTypes.rgr +559 -0
- package/dist/lib/evg/EvgViewport.rgr +313 -0
- package/dist/lib/evg/FxDemoDoc.rgr +185 -0
- package/dist/lib/evg/HOSTS.md +227 -0
- package/dist/lib/evg/ISSUES.md +835 -0
- package/dist/lib/evg/PLAN_ACCESSIBILITY.md +650 -0
- package/dist/lib/evg/PLAN_CSS_LAYOUT_AND_FONTS.md +1124 -0
- package/dist/lib/evg/PLAN_EFFECTS.md +431 -0
- package/dist/lib/evg/PLAN_EVG.md +518 -0
- package/dist/lib/evg/PLAN_EVG_RENDERER.md +1674 -0
- package/dist/lib/evg/PLAN_INSPECTOR.md +788 -0
- package/dist/lib/evg/PLAN_LINKS_AND_FORMS.md +157 -0
- package/dist/lib/evg/PLAN_NATIVE_HOSTS.md +671 -0
- package/dist/lib/evg/PLAN_VECTOR_IR.md +664 -0
- package/dist/lib/evg/PLAN_VIEW_TRANSFORM.md +322 -0
- package/dist/lib/evg/PathBuilder.rgr +333 -0
- package/dist/lib/evg/README.md +1236 -0
- package/dist/lib/evg/SPEC.md +1252 -0
- package/dist/lib/evg/SVGPathParser.rgr +1199 -0
- package/dist/lib/evg/SvgParser.rgr +1736 -0
- package/dist/lib/evg/TODO_EVG_RENDERER.md +595 -0
- package/dist/lib/evg/VectorShapes.rgr +331 -0
- package/dist/lib/evg/VectorStroke.rgr +107 -0
- package/dist/lib/evg/VectorViewBox.rgr +380 -0
- package/dist/lib/evg/agent/README.md +290 -0
- package/dist/lib/evg/agent/evg_agent.rgr +899 -0
- package/dist/lib/evg/agent/fixtures/broken.evg.json +7 -0
- package/dist/lib/evg/agent/fixtures/card.evg.json +9 -0
- package/dist/lib/evg/agent/fixtures/connector.css +63 -0
- package/dist/lib/evg/agent/fixtures/connector.evg.json +14 -0
- package/dist/lib/evg/agent/fixtures/drawn.evg.json +129 -0
- package/dist/lib/evg/agent/fixtures/gradient.evg.json +4 -0
- package/dist/lib/evg/agent/fixtures/popover.css +99 -0
- package/dist/lib/evg/agent/fixtures/popover.evg.json +30 -0
- package/dist/lib/evg/agent/roundtrip.sh +74 -0
- package/dist/lib/evg/agent/smoke.sh +230 -0
- package/dist/lib/evg/android/README.md +97 -0
- package/dist/lib/evg/android/androidstubs/AndroidStubs.kt +175 -0
- package/dist/lib/evg/android/androidstubs/Annotation.kt +10 -0
- package/dist/lib/evg/android/androidstubs/App.kt +30 -0
- package/dist/lib/evg/android/androidstubs/Content.kt +41 -0
- package/dist/lib/evg/android/androidstubs/ContentRes.kt +12 -0
- package/dist/lib/evg/android/androidstubs/InputMethod.kt +46 -0
- package/dist/lib/evg/android/androidstubs/Net.kt +6 -0
- package/dist/lib/evg/android/androidstubs/Os.kt +30 -0
- package/dist/lib/evg/android/androidstubs/Util.kt +15 -0
- package/dist/lib/evg/android/androidstubs/View.kt +113 -0
- package/dist/lib/evg/android/androidstubs/Widget.kt +16 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidEvgSurface.kt +323 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidTextMeasurer.kt +56 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/RippleEffect.kt +262 -0
- package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtEvgSurface.kt +238 -0
- package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtTextMeasurer.kt +85 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgEngineThread.kt +115 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgPainter.kt +231 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgSurface.kt +117 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/RecordingSurface.kt +94 -0
- package/dist/lib/evg/apple/README.md +128 -0
- package/dist/lib/evg/apple/Sources/CoreGraphicsEvgSurface.swift +329 -0
- package/dist/lib/evg/apple/Sources/CoreTextMeasurer.swift +70 -0
- package/dist/lib/evg/apple/Sources/EvgEngineQueue.swift +105 -0
- package/dist/lib/evg/apple/Sources/EvgPainter.swift +225 -0
- package/dist/lib/evg/apple/Sources/EvgSurface.swift +163 -0
- package/dist/lib/evg/apple/Sources/RecordingSurface.swift +110 -0
- package/dist/lib/evg/bench/EvgLayoutBench.rgr +34 -0
- package/dist/lib/evg/bench/README.md +64 -0
- package/dist/lib/evg/bench/layout-bench.mjs +316 -0
- package/dist/lib/evg/bench/layout-cases.mjs +510 -0
- package/dist/lib/evg/bench/layout-conformance.mjs +254 -0
- package/dist/lib/evg/bin/.gitignore +17 -0
- package/dist/lib/evg/evg_test.rgr +313 -0
- package/dist/lib/evg/gl/README.md +198 -0
- package/dist/lib/evg/gl/a11y-paint-check.mjs +73 -0
- package/dist/lib/evg/gl/blur-check.mjs +399 -0
- package/dist/lib/evg/gl/boxmodel.json +1 -0
- package/dist/lib/evg/gl/demo.html +46 -0
- package/dist/lib/evg/gl/effect-presets.css +285 -0
- package/dist/lib/evg/gl/effect-presets.js +63 -0
- package/dist/lib/evg/gl/effect-shots.mjs +135 -0
- package/dist/lib/evg/gl/evg-a11y.js +566 -0
- package/dist/lib/evg/gl/evg-binary.js +160 -0
- package/dist/lib/evg/gl/evg-engine.js +296 -0
- package/dist/lib/evg/gl/evg-fx.js +237 -0
- package/dist/lib/evg/gl/evg-gestures.js +209 -0
- package/dist/lib/evg/gl/evg-list.js +167 -0
- package/dist/lib/evg/gl/evg-measure.js +186 -0
- package/dist/lib/evg/gl/evg-textinput.js +303 -0
- package/dist/lib/evg/gl/evg-view.js +144 -0
- package/dist/lib/evg/gl/evg-webgl.js +3942 -0
- package/dist/lib/evg/gl/fx-check.mjs +998 -0
- package/dist/lib/evg/gl/fx-demo.html +166 -0
- package/dist/lib/evg/gl/fx-demo.js +2 -0
- package/dist/lib/evg/gl/fx-serve.mjs +47 -0
- package/dist/lib/evg/gl/gestures-check.mjs +189 -0
- package/dist/lib/evg/gl/list-binary-check.mjs +152 -0
- package/dist/lib/evg/gl/measure-check.mjs +135 -0
- package/dist/lib/evg/gl/rotation-check.mjs +207 -0
- package/dist/lib/evg/gl/shift-check.mjs +113 -0
- package/dist/lib/evg/gl/stroke-check.mjs +168 -0
- package/dist/lib/evg/gl/text-snap-check.mjs +139 -0
- package/dist/lib/evg/gl/view-check.mjs +343 -0
- package/dist/lib/evg/gl/view-policy-check.mjs +184 -0
- package/dist/lib/evg/html/evg-dom.js +318 -0
- package/dist/lib/evg/html/evg-html.js +600 -0
- package/dist/lib/evg/inspect/README.md +415 -0
- package/dist/lib/evg/inspect/browser-smoke.mjs +115 -0
- package/dist/lib/evg/inspect/evg-inspect.js +947 -0
- package/dist/lib/evg/inspect/shots/css.png +0 -0
- package/dist/lib/evg/inspect/shots/dashboard.png +0 -0
- package/dist/lib/evg/inspect/shots/pptx-slide.png +0 -0
- package/dist/lib/evg/inspect/shots/state.png +0 -0
- package/dist/lib/evg/inspect/shots.mjs +226 -0
- package/dist/lib/evg/oracle/css-blur.json +576 -0
- package/dist/lib/evg/oracle/css-box.json +157 -0
- package/dist/lib/evg/oracle/css-timing.json +709 -0
- package/dist/lib/evg/oracle/css_blur_oracle.mjs +529 -0
- package/dist/lib/evg/oracle/css_box_oracle.mjs +106 -0
- package/dist/lib/evg/oracle/css_timing_oracle.mjs +389 -0
- package/dist/lib/evg/original/EVGColor.clj +310 -0
- package/dist/lib/evg/original/EVGColorContext.rgr +178 -0
- package/dist/lib/evg/original/SVGPath.rgr +627 -0
- package/dist/lib/evg/original/Vec2.crgr +103 -0
- package/dist/lib/evg/ranger.json +9 -0
- package/dist/lib/evg/showcase/README.md +246 -0
- package/dist/lib/evg/showcase/assets/emblem.svg +30 -0
- package/dist/lib/evg/showcase/assets/rosette.svg +22 -0
- package/dist/lib/evg/showcase/build.mjs +651 -0
- package/dist/lib/evg/showcase/pages/album.tsx +30 -0
- package/dist/lib/evg/showcase/pages/boxmodel.tsx +37 -0
- package/dist/lib/evg/showcase/pages/cards.tsx +41 -0
- package/dist/lib/evg/showcase/pages/chart_api.tsx +170 -0
- package/dist/lib/evg/showcase/pages/charts.tsx +219 -0
- package/dist/lib/evg/showcase/pages/drawing.tsx +160 -0
- package/dist/lib/evg/showcase/pages/emoji.tsx +91 -0
- package/dist/lib/evg/showcase/pages/flex.tsx +46 -0
- package/dist/lib/evg/showcase/pages/more.tsx +332 -0
- package/dist/lib/evg/showcase/pages/plots.tsx +262 -0
- package/dist/lib/evg/showcase/pages/svg.tsx +63 -0
- package/dist/lib/evg/showcase/pages/tables.tsx +209 -0
- package/dist/lib/evg/showcase/pages/typography.tsx +43 -0
- package/dist/lib/evg/showcase/pages/units.tsx +35 -0
- package/dist/lib/evg/showcase/pages/variants.tsx +233 -0
- package/dist/lib/evg/showcase/pages/vector.tsx +75 -0
- package/dist/lib/evg/showcase/pages/views.tsx +223 -0
- package/dist/lib/evg/showcase/tests/chart_api_smoke.mjs +339 -0
- package/dist/lib/evg/showcase/tests/gl_smoke.mjs +125 -0
- package/dist/lib/evg/showcase/themes/chart_api-default.css +15 -0
- package/dist/lib/evg/showcase/themes/charts-default.css +29 -0
- package/dist/lib/evg/showcase/themes/drawing-default.css +35 -0
- package/dist/lib/evg/showcase/themes/more-default.css +128 -0
- package/dist/lib/evg/showcase/themes/plots-default.css +18 -0
- package/dist/lib/evg/showcase/themes/showcase.css +508 -0
- package/dist/lib/evg/showcase/themes/tables-default.css +123 -0
- package/dist/lib/evg/showcase/themes/variants-default.css +15 -0
- package/dist/lib/evg/showcase/themes/views-default.css +15 -0
- package/dist/lib/evg/tools/bench_vs_potrace.mjs +290 -0
- package/dist/lib/evg/tools/evg_image_tool.rgr +488 -0
- package/dist/lib/evg/tools/evg_trace_bench.rgr +114 -0
- package/dist/lib/evg/tools/evg_trace_cli.rgr +662 -0
- package/dist/lib/evg/tools/evg_trace_cpp_bench.rgr +83 -0
- package/dist/lib/evg/tools/run_trace_bench.sh +74 -0
- package/dist/lib/evg/tools/run_trace_cli_smoke.sh +128 -0
- package/dist/lib/evg/web/responsive/EvgResponsiveCheck.rgr +271 -0
- package/dist/lib/evg/web/responsive/EvgResponsiveDemo.rgr +531 -0
- package/dist/lib/evg/web/responsive/README.md +97 -0
- package/dist/lib/evg/web/responsive/build.mjs +90 -0
- package/dist/lib/evg/web/responsive/dom-check.mjs +169 -0
- package/dist/lib/evg/web/responsive/index.html +177 -0
- package/dist/lib/evg/web/responsive/smoke.mjs +221 -0
- package/dist/lib/evg/web/tools/assets-client.mjs +95 -0
- package/dist/lib/evg/web/tools/boot-bench.mjs +189 -0
- package/dist/lib/evg/web/tools/inline-assets.mjs +119 -0
- package/dist/lib/evg/web/tools/minify.mjs +60 -0
- package/dist/lib/evg/web/tracer/build.mjs +87 -0
- package/dist/lib/evg/web/tracer/index.html +2805 -0
- package/dist/lib/evg/web/tracer/sample.png +0 -0
- package/dist/lib/evg/web/tracer/smoke.mjs +1162 -0
- package/dist/lib/evgr/Cargo.lock +21 -0
- package/dist/lib/evgr/Cargo.toml +19 -0
- package/dist/lib/evgr/README.md +140 -0
- package/dist/lib/evgr/bench/NativeBench.rgr +246 -0
- package/dist/lib/evgr/bench/compare.mjs +252 -0
- package/dist/lib/evgr/bench/speed.mjs +277 -0
- package/dist/lib/evgr/bin/.gitignore +3 -0
- package/dist/lib/evgr/src/bin/bench.rs +106 -0
- package/dist/lib/evgr/src/bin/smoke.rs +13 -0
- package/dist/lib/evgr/src/grid.rs +730 -0
- package/dist/lib/evgr/src/lib.rs +1003 -0
- package/dist/lib/evgr/src/style.rs +468 -0
- package/dist/lib/evgr/src/text.rs +83 -0
- package/dist/lib/image/BitReader.rgr +171 -0
- package/dist/lib/image/Buffer.rgr +173 -0
- package/dist/lib/image/DCT.rgr +283 -0
- package/dist/lib/image/Deflate.rgr +339 -0
- package/dist/lib/image/HuffmanDecoder.rgr +181 -0
- package/dist/lib/image/ImageBuffer.rgr +706 -0
- package/dist/lib/image/JPEGDecoder.rgr +808 -0
- package/dist/lib/image/PNGDecoder.rgr +544 -0
- package/dist/lib/image/PNGEncoder.rgr +388 -0
- package/dist/lib/image/PPMImage.rgr +224 -0
- package/dist/lib/image/ProgressiveJPEGDecoder.rgr +1154 -0
- package/dist/lib/image/README.md +33 -0
- package/dist/lib/image/RasterBuffer.rgr +294 -0
- package/dist/lib/image/VP8BoolDecoder.rgr +163 -0
- package/dist/lib/image/WebPDecoder.rgr +433 -0
- package/dist/lib/image/WebPLossless.rgr +1035 -0
- package/dist/lib/image/WebPLossy.rgr +1929 -0
- package/dist/lib/image/ranger.json +9 -0
- package/dist/lib/image/testdata/webp/anim_2f_24x16.webp +0 -0
- package/dist/lib/image/testdata/webp/fixtures.txt +33 -0
- package/dist/lib/image/testdata/webp/gen_fixtures.py +261 -0
- package/dist/lib/image/testdata/webp/ll_1x1.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_alpha_29x21.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_gradient_64x64.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_meta_32x32.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_noise_17x9.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal11_23x11.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal2_19x7.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal40_16x16.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal4_13x5.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_photo_40x30.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_predictors_64x32.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_1x1.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f0_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f1_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f2_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f3_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f0_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f1_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f2_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f3_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alpha_33x17.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_exif_15x11.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_i16_96x80.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_nofilter_24x20.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_odd_17x9.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_photo_48x40.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_q100_20x18.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_sharp_40x36.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_simple_filter_33x31.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_vpx_parts8_37x45.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_vpx_skip_96x80.webp +0 -0
- package/dist/lib/image/tests/WebPDecodeTool.rgr +81 -0
- package/dist/lib/image/tests/WebPDecoderTest.rgr +1162 -0
- package/dist/lib/image/tests/run_webp_tests.sh +39 -0
- package/dist/lib/rust/RsJson.rgr +468 -0
- package/dist/lib/rust/RsPrelude.rgr +1663 -0
- package/dist/lib/shell_test.rgr +7 -7
- package/dist/lib/stdlib.rgr +21 -5
- package/dist/lib/zip/ranger.json +6 -0
- package/dist/rgrc.js +87318 -67610
- package/package.json +1010 -1040
- package/dist/README.md +0 -117
- package/dist/package.json +0 -47
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
; SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
; ==============================================================================
|
|
4
|
+
; EvgTraceColor.rgr — perceptual color distance for the tracer
|
|
5
|
+
; ==============================================================================
|
|
6
|
+
;
|
|
7
|
+
; The posterizer decides everything by asking "how far apart are these two
|
|
8
|
+
; colors": which swatches k-means keeps, which of them merge, and which one a
|
|
9
|
+
; pixel joins. Asked in RGB that question has a known wrong answer — the space
|
|
10
|
+
; is not perceptually uniform, so a step across a dark blue counts for far less
|
|
11
|
+
; than the same step across a mid green, and the palette is spent accordingly.
|
|
12
|
+
; EvgBitmapTracer's own metric adds a luma term to patch the worst of it
|
|
13
|
+
; (a dark ink line must not collapse into a mid-tone of the same hue), which
|
|
14
|
+
; helps but does not make the space uniform.
|
|
15
|
+
;
|
|
16
|
+
; OKLab (Björn Ottosson, 2020) is a space where plain Euclidean distance does
|
|
17
|
+
; approximate perceived difference. This file converts into it and measures
|
|
18
|
+
; there.
|
|
19
|
+
;
|
|
20
|
+
; Scale: `dist2` is multiplied so that black against white reads 390150 —
|
|
21
|
+
; exactly what the legacy metric gives for the same pair at the default
|
|
22
|
+
; lumaWeight (3·255² + 3·255²). Every threshold already tuned against that
|
|
23
|
+
; metric therefore keeps its meaning, and only the *shape* of the space
|
|
24
|
+
; changes. See EvgBitmapTracer.dist2Limit.
|
|
25
|
+
;
|
|
26
|
+
; No pow/exp/log: the Ranger operator set has sqrt and nothing above it, so the
|
|
27
|
+
; two fractional powers OKLab needs (the sRGB transfer curve's 2.4 and the
|
|
28
|
+
; cube root) are Newton iterations seeded from a chain of square roots. Both
|
|
29
|
+
; are integer-free and identical on every target.
|
|
30
|
+
; ==============================================================================
|
|
31
|
+
|
|
32
|
+
; One color in OKLab. A mutable holder rather than a returned triple: the
|
|
33
|
+
; distance is asked once per palette entry per pixel, and an allocation there
|
|
34
|
+
; costs more than the arithmetic does.
|
|
35
|
+
class EvgOklab {
|
|
36
|
+
def l:double 0.0
|
|
37
|
+
def a:double 0.0
|
|
38
|
+
def b:double 0.0
|
|
39
|
+
|
|
40
|
+
Constructor () {
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
; `lin` is the 256-entry sRGB → linear-light table from
|
|
44
|
+
; EvgTraceColor.buildLinearTable().
|
|
45
|
+
; `blue` rather than `b`, which is the field this writes.
|
|
46
|
+
fn setFrom:void (lin:[double] red:int green:int blue:int) {
|
|
47
|
+
def lr:double (itemAt lin red)
|
|
48
|
+
def lg:double (itemAt lin green)
|
|
49
|
+
def lb:double (itemAt lin blue)
|
|
50
|
+
|
|
51
|
+
def cl:double ((((0.4122214708 * lr) + (0.5363325363 * lg)) + (0.0514459929 * lb)))
|
|
52
|
+
def cm:double ((((0.2119034982 * lr) + (0.6806995451 * lg)) + (0.1073969566 * lb)))
|
|
53
|
+
def cs:double ((((0.0883024619 * lr) + (0.2817188376 * lg)) + (0.6299787005 * lb)))
|
|
54
|
+
|
|
55
|
+
def l_:double (EvgTraceColor.cbrt(cl))
|
|
56
|
+
def m_:double (EvgTraceColor.cbrt(cm))
|
|
57
|
+
def s_:double (EvgTraceColor.cbrt(cs))
|
|
58
|
+
|
|
59
|
+
l = ((((0.2104542553 * l_) + (0.7936177850 * m_)) - (0.0040720468 * s_)))
|
|
60
|
+
a = ((((1.9779984951 * l_) - (2.4285922050 * m_)) + (0.4505937099 * s_)))
|
|
61
|
+
b = ((((0.0259040371 * l_) + (0.7827717662 * m_)) - (0.8086757660 * s_)))
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
class EvgTraceColor {
|
|
66
|
+
|
|
67
|
+
Constructor () {
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
; Black against white, so a threshold written for the RGB metric still
|
|
71
|
+
; means what it meant. Also the divisor in EvgBitmapTracer.dist2Limit.
|
|
72
|
+
sfn okScale:double () {
|
|
73
|
+
return 390150.0
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
; Cube root by Newton on y³ = a, seeded with a^(3/8) — three square roots,
|
|
77
|
+
; which is within a few percent of the answer everywhere in [0,1], so the
|
|
78
|
+
; iteration is converged long before it runs out.
|
|
79
|
+
sfn cbrt:double (a:double) {
|
|
80
|
+
if (a <= 0.0) {
|
|
81
|
+
return 0.0
|
|
82
|
+
}
|
|
83
|
+
def s1:double (sqrt a)
|
|
84
|
+
def s2:double (sqrt s1)
|
|
85
|
+
def s3:double (sqrt s2)
|
|
86
|
+
def y:double (s2 * s3)
|
|
87
|
+
def i:int 0
|
|
88
|
+
while (i < 8) {
|
|
89
|
+
def y2:double (y * y)
|
|
90
|
+
def q:double (a / y2)
|
|
91
|
+
y = (((2.0 * y) + q) / 3.0)
|
|
92
|
+
i = (i + 1)
|
|
93
|
+
}
|
|
94
|
+
return y
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
; Fifth root by Newton on y⁵ = a, seeded with a^(3/16) (3/16 = 0.1875
|
|
98
|
+
; against the 0.2 wanted). Only the 256-entry table calls this.
|
|
99
|
+
sfn root5:double (a:double) {
|
|
100
|
+
if (a <= 0.0) {
|
|
101
|
+
return 0.0
|
|
102
|
+
}
|
|
103
|
+
def s1:double (sqrt a)
|
|
104
|
+
def s2:double (sqrt s1)
|
|
105
|
+
def s3:double (sqrt s2)
|
|
106
|
+
def s4:double (sqrt s3)
|
|
107
|
+
def y:double (s3 * s4)
|
|
108
|
+
def i:int 0
|
|
109
|
+
while (i < 10) {
|
|
110
|
+
def y2:double (y * y)
|
|
111
|
+
def y4:double (y2 * y2)
|
|
112
|
+
def q:double (a / y4)
|
|
113
|
+
def step:double ((q - y) / 5.0)
|
|
114
|
+
y = (y + step)
|
|
115
|
+
i = (i + 1)
|
|
116
|
+
}
|
|
117
|
+
return y
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
; x^2.4 for x in [0,1] — the sRGB transfer curve's exponent, written as
|
|
121
|
+
; x² · (x^(1/5))².
|
|
122
|
+
sfn pow24:double (x:double) {
|
|
123
|
+
if (x <= 0.0) {
|
|
124
|
+
return 0.0
|
|
125
|
+
}
|
|
126
|
+
def r5:double (EvgTraceColor.root5(x))
|
|
127
|
+
def t:double (r5 * r5)
|
|
128
|
+
def sq:double (x * x)
|
|
129
|
+
return (sq * t)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
; sRGB 0..255 → linear light 0..1, one entry per channel value. Built once
|
|
133
|
+
; and shared by every conversion; 256 fifth roots, paid at most once per
|
|
134
|
+
; trace.
|
|
135
|
+
sfn buildLinearTable:[double] () {
|
|
136
|
+
def t:[double]
|
|
137
|
+
def i:int 0
|
|
138
|
+
while (i < 256) {
|
|
139
|
+
def c:double ((to_double i) / 255.0)
|
|
140
|
+
if (c <= 0.04045) {
|
|
141
|
+
def lo:double (c / 12.92)
|
|
142
|
+
push t lo
|
|
143
|
+
} {
|
|
144
|
+
def u:double ((c + 0.055) / 1.055)
|
|
145
|
+
def hi:double (EvgTraceColor.pow24(u))
|
|
146
|
+
push t hi
|
|
147
|
+
}
|
|
148
|
+
i = (i + 1)
|
|
149
|
+
}
|
|
150
|
+
return t
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
; Squared OKLab distance, scaled onto the legacy metric's range.
|
|
154
|
+
sfn dist2:double (p:EvgOklab q:EvgOklab) {
|
|
155
|
+
def dl:double ((p.l) - (q.l))
|
|
156
|
+
def da:double ((p.a) - (q.a))
|
|
157
|
+
def db:double ((p.b) - (q.b))
|
|
158
|
+
def raw:double ((((dl * dl) + (da * da)) + (db * db)))
|
|
159
|
+
def s:double (EvgTraceColor.okScale())
|
|
160
|
+
return (raw * s)
|
|
161
|
+
}
|
|
162
|
+
; --- OKLab → sRGB -------------------------------------------------------
|
|
163
|
+
;
|
|
164
|
+
; The way back, so a palette can be moved in OKLab and written out as a
|
|
165
|
+
; color again. Only the palette goes through here — a swatch or two per
|
|
166
|
+
; layer, not a pixel per pixel — so the Newton iteration below is free.
|
|
167
|
+
|
|
168
|
+
; y such that y^2.4 = x, i.e. the sRGB transfer curve's exponent inverted.
|
|
169
|
+
; Newton on pow24, whose derivative is 2.4·y^1.4 = 2.4·pow24(y)/y, seeded
|
|
170
|
+
; with sqrt(x) — 1/2.4 is 0.417, so the square root is already close.
|
|
171
|
+
sfn pow24inv:double (x:double) {
|
|
172
|
+
if (x <= 0.0) {
|
|
173
|
+
return 0.0
|
|
174
|
+
}
|
|
175
|
+
def y:double (sqrt x)
|
|
176
|
+
def i:int 0
|
|
177
|
+
while (i < 12) {
|
|
178
|
+
def f:double (EvgTraceColor.pow24(y))
|
|
179
|
+
if (f <= 0.0) {
|
|
180
|
+
return y
|
|
181
|
+
}
|
|
182
|
+
def num:double ((f - x) * y)
|
|
183
|
+
def den:double (2.4 * f)
|
|
184
|
+
y = (y - (num / den))
|
|
185
|
+
if (y <= 0.0) {
|
|
186
|
+
return 0.0
|
|
187
|
+
}
|
|
188
|
+
i = (i + 1)
|
|
189
|
+
}
|
|
190
|
+
return y
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
; Linear light 0..1 → an sRGB channel 0..255, clamped.
|
|
194
|
+
sfn linearToSrgb:int (v:double) {
|
|
195
|
+
def c:double v
|
|
196
|
+
if (c <= 0.0) {
|
|
197
|
+
return 0
|
|
198
|
+
}
|
|
199
|
+
if (c >= 1.0) {
|
|
200
|
+
return 255
|
|
201
|
+
}
|
|
202
|
+
def enc:double 0.0
|
|
203
|
+
if (c <= 0.0031308) {
|
|
204
|
+
enc = (12.92 * c)
|
|
205
|
+
} {
|
|
206
|
+
def e:double (EvgTraceColor.pow24inv(c))
|
|
207
|
+
enc = ((1.055 * e) - 0.055)
|
|
208
|
+
}
|
|
209
|
+
def n:int (to_int ((enc * 255.0) + 0.5))
|
|
210
|
+
if (n < 0) {
|
|
211
|
+
return 0
|
|
212
|
+
}
|
|
213
|
+
if (n > 255) {
|
|
214
|
+
return 255
|
|
215
|
+
}
|
|
216
|
+
return n
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
; One OKLab triple back to an sRGB [r g b].
|
|
220
|
+
sfn srgbOf:[int] (l:double a:double b:double) {
|
|
221
|
+
def l_:double (((l + (0.3963377774 * a)) + (0.2158037573 * b)))
|
|
222
|
+
def m_:double (((l - (0.1055613458 * a)) - (0.0638541728 * b)))
|
|
223
|
+
def s_:double (((l - (0.0894841775 * a)) - (1.2914855480 * b)))
|
|
224
|
+
def L:double ((l_ * l_) * l_)
|
|
225
|
+
def M:double ((m_ * m_) * m_)
|
|
226
|
+
def S:double ((s_ * s_) * s_)
|
|
227
|
+
def lr:double ((((4.0767416621 * L) - (3.3077115913 * M)) + (0.2309699292 * S)))
|
|
228
|
+
def lg:double (((((0.0 - 1.2684380046) * L) + (2.6097574011 * M)) - (0.3413193965 * S)))
|
|
229
|
+
def lb:double (((((0.0 - 0.0041960863) * L) - (0.7034186147 * M)) + (1.7076147010 * S)))
|
|
230
|
+
def out:[int]
|
|
231
|
+
push out (EvgTraceColor.linearToSrgb(lr))
|
|
232
|
+
push out (EvgTraceColor.linearToSrgb(lg))
|
|
233
|
+
push out (EvgTraceColor.linearToSrgb(lb))
|
|
234
|
+
return out
|
|
235
|
+
}
|
|
236
|
+
}
|