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,302 @@
|
|
|
1
|
+
; SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
; ==============================================================================
|
|
4
|
+
; EVGA11yFromTree — the accessible tree, derived from the element tree
|
|
5
|
+
; ==============================================================================
|
|
6
|
+
;
|
|
7
|
+
; A canvas contributes one empty graphic to the browser's accessibility tree no
|
|
8
|
+
; matter what was drawn into it, so an EVG app has to publish what the frame
|
|
9
|
+
; MEANS as well as what it looks like. The question is where that second
|
|
10
|
+
; description comes from.
|
|
11
|
+
;
|
|
12
|
+
; `UiHost` writes it by hand: each controller declares a row, and the host turns
|
|
13
|
+
; the rows into nodes. That is right for a controller, which knows things the
|
|
14
|
+
; tree does not — which item is focused, what a key will do next.
|
|
15
|
+
;
|
|
16
|
+
; It is wrong for everything else. An app that builds an element tree and then
|
|
17
|
+
; describes it a second time has two descriptions to keep in step, and the one
|
|
18
|
+
; nobody can see is the one that rots. So this walks the SAME tree the picture
|
|
19
|
+
; came from: an element with a `role` is a node, its rectangle is where it was
|
|
20
|
+
; laid out, and its name is what it says. Nothing is written twice, and an
|
|
21
|
+
; element that moves takes its accessible rectangle with it.
|
|
22
|
+
;
|
|
23
|
+
; The rules, and each one is the browser's:
|
|
24
|
+
;
|
|
25
|
+
; * only an element with a role is in the tree. Boxes are boxes.
|
|
26
|
+
; * a node's parent is the nearest ANCESTOR WITH A ROLE, not its element
|
|
27
|
+
; parent, so the layout boxes in between do not show up as groups.
|
|
28
|
+
; * a name given with `aria-label` wins; otherwise the name is the text of
|
|
29
|
+
; the descendants that have no role of their own. That is why a row of
|
|
30
|
+
; Label + Shortcut announces as "New Tab ⌘ T" and not as three nodes.
|
|
31
|
+
; * an overlay surface is an ordinary child. It never left the tree, which is
|
|
32
|
+
; the entire reason this still works when a menu opens.
|
|
33
|
+
; ==============================================================================
|
|
34
|
+
|
|
35
|
+
Import "EVGElement.rgr"
|
|
36
|
+
Import "EVGA11yTree.rgr"
|
|
37
|
+
|
|
38
|
+
class EVGA11yFromTree {
|
|
39
|
+
def tree:EVGA11yTree
|
|
40
|
+
def unnamed:int 0
|
|
41
|
+
|
|
42
|
+
Constructor () {
|
|
43
|
+
tree = (new EVGA11yTree())
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
; ARIA spelling in, EVGA11yRole out. An unknown role is `none`, which keeps
|
|
47
|
+
; the element out of the tree rather than inventing a meaning for it.
|
|
48
|
+
sfn roleCode:int (name:string) {
|
|
49
|
+
if (name == "group") { return (EVGA11yRole.group()) }
|
|
50
|
+
if (name == "text") { return (EVGA11yRole.text()) }
|
|
51
|
+
if (name == "heading") { return (EVGA11yRole.heading()) }
|
|
52
|
+
if (name == "button") { return (EVGA11yRole.button()) }
|
|
53
|
+
if (name == "checkbox") { return (EVGA11yRole.checkbox()) }
|
|
54
|
+
if (name == "radio") { return (EVGA11yRole.radio()) }
|
|
55
|
+
if (name == "textbox") { return (EVGA11yRole.textField()) }
|
|
56
|
+
if (name == "img") { return (EVGA11yRole.image()) }
|
|
57
|
+
if (name == "link") { return (EVGA11yRole.link()) }
|
|
58
|
+
; A landmark. Missing until a demo used one, and the LINT is what said
|
|
59
|
+
; so — an unrecognised role drops the element AND everything under it,
|
|
60
|
+
; a silent hole with no symptom on screen. FOURTH time this table has
|
|
61
|
+
; been one role short; the `notes` list exists because of the first two.
|
|
62
|
+
; `list`, `listitem` and `separator` were already here, further down.
|
|
63
|
+
;
|
|
64
|
+
; So the fourth time it is completed rather than extended: the whole
|
|
65
|
+
; select family goes in together, not just the `combobox` the profile
|
|
66
|
+
; demo happened to need, because `listbox` and `option` are the two
|
|
67
|
+
; roles that will be wanted the moment that select can be opened and
|
|
68
|
+
; finding out then would be the fifth time.
|
|
69
|
+
if (name == "navigation") { return (EVGA11yRole.navigation()) }
|
|
70
|
+
if (name == "form") { return (EVGA11yRole.form()) }
|
|
71
|
+
; FIFTH time, and the table family is now finished too: a thead and a
|
|
72
|
+
; tbody are `rowgroup`s, and without them the whole body of a table
|
|
73
|
+
; built from roles is missing from the tree while the picture is
|
|
74
|
+
; perfect.
|
|
75
|
+
if (name == "rowgroup") { return (EVGA11yRole.rowGroup()) }
|
|
76
|
+
if (name == "log") { return (EVGA11yRole.log()) }
|
|
77
|
+
if (name == "combobox") { return (EVGA11yRole.comboBox()) }
|
|
78
|
+
if (name == "listbox") { return (EVGA11yRole.listBox()) }
|
|
79
|
+
if (name == "option") { return (EVGA11yRole.option()) }
|
|
80
|
+
if (name == "grid") { return (EVGA11yRole.grid()) }
|
|
81
|
+
if (name == "group") { return (EVGA11yRole.group()) }
|
|
82
|
+
if (name == "tabpanel") { return (EVGA11yRole.tabPanel()) }
|
|
83
|
+
if (name == "tablist") { return (EVGA11yRole.tabList()) }
|
|
84
|
+
if (name == "tab") { return (EVGA11yRole.tab()) }
|
|
85
|
+
if (name == "toolbar") { return (EVGA11yRole.toolbar()) }
|
|
86
|
+
if (name == "menu") { return (EVGA11yRole.menu()) }
|
|
87
|
+
if (name == "menubar") { return (EVGA11yRole.menuBar()) }
|
|
88
|
+
if (name == "menuitem") { return (EVGA11yRole.menuItem()) }
|
|
89
|
+
if (name == "menuitemcheckbox") { return (EVGA11yRole.menuItemCheckbox()) }
|
|
90
|
+
if (name == "menuitemradio") { return (EVGA11yRole.menuItemRadio()) }
|
|
91
|
+
if (name == "separator") { return (EVGA11yRole.separator()) }
|
|
92
|
+
if (name == "dialog") { return (EVGA11yRole.dialog()) }
|
|
93
|
+
if (name == "alertdialog") { return (EVGA11yRole.alertDialog()) }
|
|
94
|
+
if (name == "tooltip") { return (EVGA11yRole.tooltip()) }
|
|
95
|
+
if (name == "status") { return (EVGA11yRole.status()) }
|
|
96
|
+
if (name == "region") { return (EVGA11yRole.region()) }
|
|
97
|
+
if (name == "banner") { return (EVGA11yRole.banner()) }
|
|
98
|
+
if (name == "main") { return (EVGA11yRole.mainContent()) }
|
|
99
|
+
if (name == "paragraph") { return (EVGA11yRole.paragraph()) }
|
|
100
|
+
if (name == "list") { return (EVGA11yRole.list()) }
|
|
101
|
+
if (name == "listitem") { return (EVGA11yRole.listItem()) }
|
|
102
|
+
if (name == "table") { return (EVGA11yRole.table()) }
|
|
103
|
+
if (name == "row") { return (EVGA11yRole.row()) }
|
|
104
|
+
if (name == "columnheader") { return (EVGA11yRole.columnHeader()) }
|
|
105
|
+
if (name == "rowheader") { return (EVGA11yRole.rowHeader()) }
|
|
106
|
+
if (name == "cell") { return (EVGA11yRole.tableCell()) }
|
|
107
|
+
if (name == "gridcell") { return (EVGA11yRole.cell()) }
|
|
108
|
+
if (name == "switch") { return (EVGA11yRole.switchControl()) }
|
|
109
|
+
if (name == "radiogroup") { return (EVGA11yRole.radioGroup()) }
|
|
110
|
+
if (name == "slider") { return (EVGA11yRole.slider()) }
|
|
111
|
+
if (name == "spinbutton") { return (EVGA11yRole.spinButton()) }
|
|
112
|
+
if (name == "progressbar") { return (EVGA11yRole.progressBar()) }
|
|
113
|
+
if (name == "tree") { return (EVGA11yRole.tree()) }
|
|
114
|
+
if (name == "treeitem") { return (EVGA11yRole.treeItem()) }
|
|
115
|
+
return (EVGA11yRole.none())
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
; The text of everything below `el` that has no role of its own, joined with
|
|
119
|
+
; spaces. Stopping at a role is what makes this a NAME and not a transcript
|
|
120
|
+
; of the subtree: a menu's name is its trigger, not every row inside it.
|
|
121
|
+
fn contentText:string (el:EVGElement) {
|
|
122
|
+
def out:string ""
|
|
123
|
+
def i:int 0
|
|
124
|
+
while (i < (array_length el.children)) {
|
|
125
|
+
def kid:EVGElement (itemAt el.children i)
|
|
126
|
+
if (((strlen kid.role) == 0) && ((kid.a11yHidden) == false)) {
|
|
127
|
+
def t:string (trim kid.textContent)
|
|
128
|
+
if ((strlen t) > 0) {
|
|
129
|
+
if ((strlen out) > 0) {
|
|
130
|
+
out = (out + " ")
|
|
131
|
+
}
|
|
132
|
+
out = (out + t)
|
|
133
|
+
}
|
|
134
|
+
def below:string (this.contentText(kid))
|
|
135
|
+
if ((strlen below) > 0) {
|
|
136
|
+
if ((strlen out) > 0) {
|
|
137
|
+
out = (out + " ")
|
|
138
|
+
}
|
|
139
|
+
out = (out + below)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
i = (i + 1)
|
|
143
|
+
}
|
|
144
|
+
return out
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
fn nameOf:string (el:EVGElement) {
|
|
148
|
+
if ((strlen el.a11yLabel) > 0) {
|
|
149
|
+
return el.a11yLabel
|
|
150
|
+
}
|
|
151
|
+
; Name from content is for the things a reader stops ON — a button, a
|
|
152
|
+
; heading, a cell. A landmark or a container is named only by what it
|
|
153
|
+
; was given: a header named after every word inside it, or a main
|
|
154
|
+
; region named after the whole page, is a name that says nothing, and
|
|
155
|
+
; the browser's tree leaves them empty for the same reason.
|
|
156
|
+
if (EVGA11yFromTree.namedOnlyByLabel(el.role)) {
|
|
157
|
+
return ""
|
|
158
|
+
}
|
|
159
|
+
def own:string (trim el.textContent)
|
|
160
|
+
if ((strlen own) > 0) {
|
|
161
|
+
return own
|
|
162
|
+
}
|
|
163
|
+
return (this.contentText(el))
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
sfn namedOnlyByLabel:boolean (role:string) {
|
|
167
|
+
; A combobox is not named from its content either: what is inside
|
|
168
|
+
; it is its VALUE, and a value read out as the name is a select that
|
|
169
|
+
; introduces itself as "vk". Its name is a label, or nothing.
|
|
170
|
+
if (role == "combobox") { return true }
|
|
171
|
+
if (role == "banner") { return true }
|
|
172
|
+
if (role == "main") { return true }
|
|
173
|
+
if (role == "navigation") { return true }
|
|
174
|
+
if (role == "region") { return true }
|
|
175
|
+
if (role == "dialog") { return true }
|
|
176
|
+
if (role == "group") { return true }
|
|
177
|
+
if (role == "list") { return true }
|
|
178
|
+
if (role == "form") { return true }
|
|
179
|
+
if (role == "log") { return true }
|
|
180
|
+
return false
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
; An id is required — a reader keeps its cursor on one, and a tree whose ids
|
|
184
|
+
; change every frame loses it.
|
|
185
|
+
;
|
|
186
|
+
; An element without one is named by its PATH: the parent it hangs off and
|
|
187
|
+
; where it sits under it. Not a running counter, which would renumber every
|
|
188
|
+
; unnamed node in the frame the moment an earlier subtree gained one. Give
|
|
189
|
+
; anything a reader will sit on a real id; this is for the separators.
|
|
190
|
+
fn idOf:string (el:EVGElement parentId:string index:int) {
|
|
191
|
+
if ((strlen el.id) > 0) {
|
|
192
|
+
return el.id
|
|
193
|
+
}
|
|
194
|
+
unnamed = (unnamed + 1)
|
|
195
|
+
return ((((parentId + "/") + el.role) + "@") + (to_string index))
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
fn walk:void (el:EVGElement parentId:string index:int) {
|
|
199
|
+
el.settleShift()
|
|
200
|
+
; Decoration, and everything under it. Not "skip the node but keep the
|
|
201
|
+
; children": `aria-hidden` prunes the whole branch, and a chevron with
|
|
202
|
+
; a label inside it would otherwise put the label back.
|
|
203
|
+
if el.a11yHidden {
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
; `display: none` is not in the accessible tree either — a bar the
|
|
207
|
+
; stylesheet folded away at a breakpoint is not a bar a reader can
|
|
208
|
+
; still press.
|
|
209
|
+
if (el.isHidden()) {
|
|
210
|
+
return
|
|
211
|
+
}
|
|
212
|
+
def nextParent:string parentId
|
|
213
|
+
def code:int (EVGA11yFromTree.roleCode(el.role))
|
|
214
|
+
; A role this builder does not know is REPORTED, not dropped. Dropping
|
|
215
|
+
; it takes the element and everything under it out of the accessible
|
|
216
|
+
; tree, and the audit that follows then passes over the hole — the
|
|
217
|
+
; whole tree demo reduced to one node and called clean. There is no
|
|
218
|
+
; safe silent default here: guessing `group` would invent structure,
|
|
219
|
+
; and skipping is what caused this.
|
|
220
|
+
if ((strlen el.role) > 0) {
|
|
221
|
+
if (code == (EVGA11yRole.none())) {
|
|
222
|
+
def t0:EVGA11yTree (unwrap tree)
|
|
223
|
+
push t0.notes (("role not understood by EVGA11yFromTree: \"" + el.role) + "\" — the element and everything under it is missing from this tree")
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (code != (EVGA11yRole.none())) {
|
|
227
|
+
def id:string (this.idOf(el parentId index))
|
|
228
|
+
def t:EVGA11yTree (unwrap tree)
|
|
229
|
+
def n:EVGA11yNode (t.node(id parentId code))
|
|
230
|
+
n.name = (this.nameOf(el))
|
|
231
|
+
n.roleDescription = el.a11yRoleDescription
|
|
232
|
+
n.description = el.a11yDescription
|
|
233
|
+
n.describedBy = el.a11yDescribedBy
|
|
234
|
+
n.controls = el.a11yControls
|
|
235
|
+
n.labelledBy = el.a11yLabelledBy
|
|
236
|
+
n.hasPopup = el.a11yHasPopup
|
|
237
|
+
n.rowCount = el.a11yRowCount
|
|
238
|
+
n.rowIndex = el.a11yRowIndex
|
|
239
|
+
n.disabled = el.a11yDisabled
|
|
240
|
+
n.checked = el.a11yChecked
|
|
241
|
+
n.pressed = el.a11yPressed
|
|
242
|
+
n.expanded = el.a11yExpanded
|
|
243
|
+
n.sorted = el.a11ySorted
|
|
244
|
+
n.orientation = el.a11yOrientation
|
|
245
|
+
n.current = el.a11yCurrent
|
|
246
|
+
n.value = el.a11yValue
|
|
247
|
+
n.required = el.a11yRequired
|
|
248
|
+
n.invalid = el.a11yInvalid
|
|
249
|
+
n.readOnly = el.a11yReadOnly
|
|
250
|
+
n.hasValueNow = el.a11yHasValue
|
|
251
|
+
n.valueNow = el.a11yValueNow
|
|
252
|
+
n.hasValueRange = el.a11yHasRange
|
|
253
|
+
n.valueMin = el.a11yValueMin
|
|
254
|
+
n.valueMax = el.a11yValueMax
|
|
255
|
+
if (el.a11ySelected == 2) {
|
|
256
|
+
n.selected = true
|
|
257
|
+
}
|
|
258
|
+
n.focusable = el.a11yFocusable
|
|
259
|
+
n.modal = el.a11yModal
|
|
260
|
+
if el.a11yFocusable {
|
|
261
|
+
n.actActivate = true
|
|
262
|
+
}
|
|
263
|
+
if (el.a11yExpanded > 0) {
|
|
264
|
+
n.actExpand = true
|
|
265
|
+
}
|
|
266
|
+
n.posInSet = el.a11yPosInSet
|
|
267
|
+
n.setSize = el.a11ySetSize
|
|
268
|
+
n.level = el.a11yLevel
|
|
269
|
+
t.place(n
|
|
270
|
+
(to_int el.calculatedX)
|
|
271
|
+
(to_int el.calculatedY)
|
|
272
|
+
(to_int el.calculatedWidth)
|
|
273
|
+
(to_int el.calculatedHeight))
|
|
274
|
+
nextParent = id
|
|
275
|
+
}
|
|
276
|
+
def i:int 0
|
|
277
|
+
while (i < (array_length el.children)) {
|
|
278
|
+
this.walk((itemAt el.children i) nextParent i)
|
|
279
|
+
i = (i + 1)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
; `root` must be LAID OUT: the rectangles are what touch exploration, a
|
|
284
|
+
; magnifier and "route the mouse to the focus" all use, and an unlaid tree
|
|
285
|
+
; reports every node at (0,0,0,0).
|
|
286
|
+
fn build:EVGA11yTree (root:EVGElement appName:string generation:int focusId:string) {
|
|
287
|
+
tree = (new EVGA11yTree())
|
|
288
|
+
unnamed = 0
|
|
289
|
+
def t:EVGA11yTree (unwrap tree)
|
|
290
|
+
t.generation = generation
|
|
291
|
+
def rootNode:EVGA11yNode (t.node("root" "" (EVGA11yRole.group())))
|
|
292
|
+
rootNode.name = appName
|
|
293
|
+
t.place(rootNode
|
|
294
|
+
(to_int root.calculatedX)
|
|
295
|
+
(to_int root.calculatedY)
|
|
296
|
+
(to_int root.calculatedWidth)
|
|
297
|
+
(to_int root.calculatedHeight))
|
|
298
|
+
this.walk(root "root" 0)
|
|
299
|
+
t.setFocus(focusId)
|
|
300
|
+
return t
|
|
301
|
+
}
|
|
302
|
+
}
|