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.
Files changed (338) hide show
  1. package/CHANGELOG.md +1064 -20
  2. package/LICENSE +3 -1
  3. package/README.md +123 -28
  4. package/dist/Lang.rgr +1188 -290
  5. package/dist/api.d.ts +2343 -879
  6. package/dist/api.js +79923 -56921
  7. package/dist/lib/JSON.rgr +102 -91
  8. package/dist/lib/Shell.rgr +4 -4
  9. package/dist/lib/apple/AppleToolchain.rgr +4 -4
  10. package/dist/lib/apple/README.md +5 -4
  11. package/dist/lib/apple/apple_test.rgr +1 -1
  12. package/dist/lib/core/README.md +1 -1
  13. package/dist/lib/evg/EVG.rgr +12 -0
  14. package/dist/lib/evg/EVGA11yFromTree.rgr +302 -0
  15. package/dist/lib/evg/EVGA11yTree.rgr +894 -0
  16. package/dist/lib/evg/EVGBox.rgr +267 -0
  17. package/dist/lib/evg/EVGBoxShorthandTest.rgr +220 -0
  18. package/dist/lib/evg/EVGCodepoint.rgr +316 -0
  19. package/dist/lib/evg/EVGColor.rgr +700 -0
  20. package/dist/lib/evg/EVGCommands.rgr +177 -0
  21. package/dist/lib/evg/EVGComponent.rgr +331 -0
  22. package/dist/lib/evg/EVGComponentTest.rgr +387 -0
  23. package/dist/lib/evg/EVGConnector.rgr +541 -0
  24. package/dist/lib/evg/EVGConnectorTest.rgr +306 -0
  25. package/dist/lib/evg/EVGDisplayList.rgr +4186 -0
  26. package/dist/lib/evg/EVGEasing.rgr +370 -0
  27. package/dist/lib/evg/EVGEffectTest.rgr +253 -0
  28. package/dist/lib/evg/EVGElement.rgr +4914 -0
  29. package/dist/lib/evg/EVGFixedTest.rgr +289 -0
  30. package/dist/lib/evg/EVGFlexRulesTest.rgr +317 -0
  31. package/dist/lib/evg/EVGFlexWrapTest.rgr +246 -0
  32. package/dist/lib/evg/EVGFling.rgr +244 -0
  33. package/dist/lib/evg/EVGFocus.rgr +400 -0
  34. package/dist/lib/evg/EVGFocusTest.rgr +399 -0
  35. package/dist/lib/evg/EVGGradient.rgr +322 -0
  36. package/dist/lib/evg/EVGGrapheme.rgr +190 -0
  37. package/dist/lib/evg/EVGGrid.rgr +975 -0
  38. package/dist/lib/evg/EVGHitTest.rgr +208 -0
  39. package/dist/lib/evg/EVGHoles.rgr +294 -0
  40. package/dist/lib/evg/EVGHostMeasurerTest.rgr +281 -0
  41. package/dist/lib/evg/EVGHostTextMeasurer.rgr +331 -0
  42. package/dist/lib/evg/EVGHostTree.rgr +834 -0
  43. package/dist/lib/evg/EVGHostTreeTest.rgr +447 -0
  44. package/dist/lib/evg/EVGImageDecode.rgr +117 -0
  45. package/dist/lib/evg/EVGImageMeasurer.rgr +86 -0
  46. package/dist/lib/evg/EVGInspect.rgr +883 -0
  47. package/dist/lib/evg/EVGInvalidateTest.rgr +432 -0
  48. package/dist/lib/evg/EVGJsonTest.rgr +535 -0
  49. package/dist/lib/evg/EVGLayout.rgr +4220 -0
  50. package/dist/lib/evg/EVGMeasure.rgr +1267 -0
  51. package/dist/lib/evg/EVGOverlayTest.rgr +626 -0
  52. package/dist/lib/evg/EVGPatch.rgr +1721 -0
  53. package/dist/lib/evg/EVGPatchTest.rgr +692 -0
  54. package/dist/lib/evg/EVGPopoverTest.rgr +395 -0
  55. package/dist/lib/evg/EVGReconcile.rgr +226 -0
  56. package/dist/lib/evg/EVGReconcileTest.rgr +421 -0
  57. package/dist/lib/evg/EVGReject.rgr +126 -0
  58. package/dist/lib/evg/EVGRelayoutTest.rgr +375 -0
  59. package/dist/lib/evg/EVGRtlLayoutTest.rgr +319 -0
  60. package/dist/lib/evg/EVGRuler.rgr +232 -0
  61. package/dist/lib/evg/EVGRulerTest.rgr +172 -0
  62. package/dist/lib/evg/EVGSelectChrome.rgr +178 -0
  63. package/dist/lib/evg/EVGStyleCacheTest.rgr +419 -0
  64. package/dist/lib/evg/EVGStyleSheet.rgr +2148 -0
  65. package/dist/lib/evg/EVGStyleStateTest.rgr +407 -0
  66. package/dist/lib/evg/EVGStyleVarTest.rgr +471 -0
  67. package/dist/lib/evg/EVGText.rgr +105 -0
  68. package/dist/lib/evg/EVGTextEngine.rgr +536 -0
  69. package/dist/lib/evg/EVGTextMeasurer.rgr +720 -0
  70. package/dist/lib/evg/EVGTimingTest.rgr +1417 -0
  71. package/dist/lib/evg/EVGToolbar.rgr +1369 -0
  72. package/dist/lib/evg/EVGTransition.rgr +728 -0
  73. package/dist/lib/evg/EVGTreeJson.rgr +721 -0
  74. package/dist/lib/evg/EVGUnit.rgr +554 -0
  75. package/dist/lib/evg/EVGViewportUnitTest.rgr +236 -0
  76. package/dist/lib/evg/EvgApp.rgr +189 -0
  77. package/dist/lib/evg/EvgBitmapTracer.rgr +4277 -0
  78. package/dist/lib/evg/EvgBitmapTracerTest.rgr +2119 -0
  79. package/dist/lib/evg/EvgHost.rgr +451 -0
  80. package/dist/lib/evg/EvgTest.rgr +91 -0
  81. package/dist/lib/evg/EvgTraceColor.rgr +236 -0
  82. package/dist/lib/evg/EvgTraceCurve.rgr +648 -0
  83. package/dist/lib/evg/EvgTraceFit.rgr +767 -0
  84. package/dist/lib/evg/EvgTracePath.rgr +435 -0
  85. package/dist/lib/evg/EvgTraceTypes.rgr +559 -0
  86. package/dist/lib/evg/EvgViewport.rgr +313 -0
  87. package/dist/lib/evg/FxDemoDoc.rgr +185 -0
  88. package/dist/lib/evg/HOSTS.md +227 -0
  89. package/dist/lib/evg/ISSUES.md +835 -0
  90. package/dist/lib/evg/PLAN_ACCESSIBILITY.md +650 -0
  91. package/dist/lib/evg/PLAN_CSS_LAYOUT_AND_FONTS.md +1124 -0
  92. package/dist/lib/evg/PLAN_EFFECTS.md +431 -0
  93. package/dist/lib/evg/PLAN_EVG.md +518 -0
  94. package/dist/lib/evg/PLAN_EVG_RENDERER.md +1674 -0
  95. package/dist/lib/evg/PLAN_INSPECTOR.md +788 -0
  96. package/dist/lib/evg/PLAN_LINKS_AND_FORMS.md +157 -0
  97. package/dist/lib/evg/PLAN_NATIVE_HOSTS.md +671 -0
  98. package/dist/lib/evg/PLAN_VECTOR_IR.md +664 -0
  99. package/dist/lib/evg/PLAN_VIEW_TRANSFORM.md +322 -0
  100. package/dist/lib/evg/PathBuilder.rgr +333 -0
  101. package/dist/lib/evg/README.md +1236 -0
  102. package/dist/lib/evg/SPEC.md +1252 -0
  103. package/dist/lib/evg/SVGPathParser.rgr +1199 -0
  104. package/dist/lib/evg/SvgParser.rgr +1736 -0
  105. package/dist/lib/evg/TODO_EVG_RENDERER.md +595 -0
  106. package/dist/lib/evg/VectorShapes.rgr +331 -0
  107. package/dist/lib/evg/VectorStroke.rgr +107 -0
  108. package/dist/lib/evg/VectorViewBox.rgr +380 -0
  109. package/dist/lib/evg/agent/README.md +290 -0
  110. package/dist/lib/evg/agent/evg_agent.rgr +899 -0
  111. package/dist/lib/evg/agent/fixtures/broken.evg.json +7 -0
  112. package/dist/lib/evg/agent/fixtures/card.evg.json +9 -0
  113. package/dist/lib/evg/agent/fixtures/connector.css +63 -0
  114. package/dist/lib/evg/agent/fixtures/connector.evg.json +14 -0
  115. package/dist/lib/evg/agent/fixtures/drawn.evg.json +129 -0
  116. package/dist/lib/evg/agent/fixtures/gradient.evg.json +4 -0
  117. package/dist/lib/evg/agent/fixtures/popover.css +99 -0
  118. package/dist/lib/evg/agent/fixtures/popover.evg.json +30 -0
  119. package/dist/lib/evg/agent/roundtrip.sh +74 -0
  120. package/dist/lib/evg/agent/smoke.sh +230 -0
  121. package/dist/lib/evg/android/README.md +97 -0
  122. package/dist/lib/evg/android/androidstubs/AndroidStubs.kt +175 -0
  123. package/dist/lib/evg/android/androidstubs/Annotation.kt +10 -0
  124. package/dist/lib/evg/android/androidstubs/App.kt +30 -0
  125. package/dist/lib/evg/android/androidstubs/Content.kt +41 -0
  126. package/dist/lib/evg/android/androidstubs/ContentRes.kt +12 -0
  127. package/dist/lib/evg/android/androidstubs/InputMethod.kt +46 -0
  128. package/dist/lib/evg/android/androidstubs/Net.kt +6 -0
  129. package/dist/lib/evg/android/androidstubs/Os.kt +30 -0
  130. package/dist/lib/evg/android/androidstubs/Util.kt +15 -0
  131. package/dist/lib/evg/android/androidstubs/View.kt +113 -0
  132. package/dist/lib/evg/android/androidstubs/Widget.kt +16 -0
  133. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidEvgSurface.kt +323 -0
  134. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidTextMeasurer.kt +56 -0
  135. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/RippleEffect.kt +262 -0
  136. package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtEvgSurface.kt +238 -0
  137. package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtTextMeasurer.kt +85 -0
  138. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgEngineThread.kt +115 -0
  139. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgPainter.kt +231 -0
  140. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgSurface.kt +117 -0
  141. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/RecordingSurface.kt +94 -0
  142. package/dist/lib/evg/apple/README.md +128 -0
  143. package/dist/lib/evg/apple/Sources/CoreGraphicsEvgSurface.swift +329 -0
  144. package/dist/lib/evg/apple/Sources/CoreTextMeasurer.swift +70 -0
  145. package/dist/lib/evg/apple/Sources/EvgEngineQueue.swift +105 -0
  146. package/dist/lib/evg/apple/Sources/EvgPainter.swift +225 -0
  147. package/dist/lib/evg/apple/Sources/EvgSurface.swift +163 -0
  148. package/dist/lib/evg/apple/Sources/RecordingSurface.swift +110 -0
  149. package/dist/lib/evg/bench/EvgLayoutBench.rgr +34 -0
  150. package/dist/lib/evg/bench/README.md +64 -0
  151. package/dist/lib/evg/bench/layout-bench.mjs +316 -0
  152. package/dist/lib/evg/bench/layout-cases.mjs +510 -0
  153. package/dist/lib/evg/bench/layout-conformance.mjs +254 -0
  154. package/dist/lib/evg/bin/.gitignore +17 -0
  155. package/dist/lib/evg/evg_test.rgr +313 -0
  156. package/dist/lib/evg/gl/README.md +198 -0
  157. package/dist/lib/evg/gl/a11y-paint-check.mjs +73 -0
  158. package/dist/lib/evg/gl/blur-check.mjs +399 -0
  159. package/dist/lib/evg/gl/boxmodel.json +1 -0
  160. package/dist/lib/evg/gl/demo.html +46 -0
  161. package/dist/lib/evg/gl/effect-presets.css +285 -0
  162. package/dist/lib/evg/gl/effect-presets.js +63 -0
  163. package/dist/lib/evg/gl/effect-shots.mjs +135 -0
  164. package/dist/lib/evg/gl/evg-a11y.js +566 -0
  165. package/dist/lib/evg/gl/evg-binary.js +160 -0
  166. package/dist/lib/evg/gl/evg-engine.js +296 -0
  167. package/dist/lib/evg/gl/evg-fx.js +237 -0
  168. package/dist/lib/evg/gl/evg-gestures.js +209 -0
  169. package/dist/lib/evg/gl/evg-list.js +167 -0
  170. package/dist/lib/evg/gl/evg-measure.js +186 -0
  171. package/dist/lib/evg/gl/evg-textinput.js +303 -0
  172. package/dist/lib/evg/gl/evg-view.js +144 -0
  173. package/dist/lib/evg/gl/evg-webgl.js +3942 -0
  174. package/dist/lib/evg/gl/fx-check.mjs +998 -0
  175. package/dist/lib/evg/gl/fx-demo.html +166 -0
  176. package/dist/lib/evg/gl/fx-demo.js +2 -0
  177. package/dist/lib/evg/gl/fx-serve.mjs +47 -0
  178. package/dist/lib/evg/gl/gestures-check.mjs +189 -0
  179. package/dist/lib/evg/gl/list-binary-check.mjs +152 -0
  180. package/dist/lib/evg/gl/measure-check.mjs +135 -0
  181. package/dist/lib/evg/gl/rotation-check.mjs +207 -0
  182. package/dist/lib/evg/gl/shift-check.mjs +113 -0
  183. package/dist/lib/evg/gl/stroke-check.mjs +168 -0
  184. package/dist/lib/evg/gl/text-snap-check.mjs +139 -0
  185. package/dist/lib/evg/gl/view-check.mjs +343 -0
  186. package/dist/lib/evg/gl/view-policy-check.mjs +184 -0
  187. package/dist/lib/evg/html/evg-dom.js +318 -0
  188. package/dist/lib/evg/html/evg-html.js +600 -0
  189. package/dist/lib/evg/inspect/README.md +415 -0
  190. package/dist/lib/evg/inspect/browser-smoke.mjs +115 -0
  191. package/dist/lib/evg/inspect/evg-inspect.js +947 -0
  192. package/dist/lib/evg/inspect/shots/css.png +0 -0
  193. package/dist/lib/evg/inspect/shots/dashboard.png +0 -0
  194. package/dist/lib/evg/inspect/shots/pptx-slide.png +0 -0
  195. package/dist/lib/evg/inspect/shots/state.png +0 -0
  196. package/dist/lib/evg/inspect/shots.mjs +226 -0
  197. package/dist/lib/evg/oracle/css-blur.json +576 -0
  198. package/dist/lib/evg/oracle/css-box.json +157 -0
  199. package/dist/lib/evg/oracle/css-timing.json +709 -0
  200. package/dist/lib/evg/oracle/css_blur_oracle.mjs +529 -0
  201. package/dist/lib/evg/oracle/css_box_oracle.mjs +106 -0
  202. package/dist/lib/evg/oracle/css_timing_oracle.mjs +389 -0
  203. package/dist/lib/evg/original/EVGColor.clj +310 -0
  204. package/dist/lib/evg/original/EVGColorContext.rgr +178 -0
  205. package/dist/lib/evg/original/SVGPath.rgr +627 -0
  206. package/dist/lib/evg/original/Vec2.crgr +103 -0
  207. package/dist/lib/evg/ranger.json +9 -0
  208. package/dist/lib/evg/showcase/README.md +246 -0
  209. package/dist/lib/evg/showcase/assets/emblem.svg +30 -0
  210. package/dist/lib/evg/showcase/assets/rosette.svg +22 -0
  211. package/dist/lib/evg/showcase/build.mjs +651 -0
  212. package/dist/lib/evg/showcase/pages/album.tsx +30 -0
  213. package/dist/lib/evg/showcase/pages/boxmodel.tsx +37 -0
  214. package/dist/lib/evg/showcase/pages/cards.tsx +41 -0
  215. package/dist/lib/evg/showcase/pages/chart_api.tsx +170 -0
  216. package/dist/lib/evg/showcase/pages/charts.tsx +219 -0
  217. package/dist/lib/evg/showcase/pages/drawing.tsx +160 -0
  218. package/dist/lib/evg/showcase/pages/emoji.tsx +91 -0
  219. package/dist/lib/evg/showcase/pages/flex.tsx +46 -0
  220. package/dist/lib/evg/showcase/pages/more.tsx +332 -0
  221. package/dist/lib/evg/showcase/pages/plots.tsx +262 -0
  222. package/dist/lib/evg/showcase/pages/svg.tsx +63 -0
  223. package/dist/lib/evg/showcase/pages/tables.tsx +209 -0
  224. package/dist/lib/evg/showcase/pages/typography.tsx +43 -0
  225. package/dist/lib/evg/showcase/pages/units.tsx +35 -0
  226. package/dist/lib/evg/showcase/pages/variants.tsx +233 -0
  227. package/dist/lib/evg/showcase/pages/vector.tsx +75 -0
  228. package/dist/lib/evg/showcase/pages/views.tsx +223 -0
  229. package/dist/lib/evg/showcase/tests/chart_api_smoke.mjs +339 -0
  230. package/dist/lib/evg/showcase/tests/gl_smoke.mjs +125 -0
  231. package/dist/lib/evg/showcase/themes/chart_api-default.css +15 -0
  232. package/dist/lib/evg/showcase/themes/charts-default.css +29 -0
  233. package/dist/lib/evg/showcase/themes/drawing-default.css +35 -0
  234. package/dist/lib/evg/showcase/themes/more-default.css +128 -0
  235. package/dist/lib/evg/showcase/themes/plots-default.css +18 -0
  236. package/dist/lib/evg/showcase/themes/showcase.css +508 -0
  237. package/dist/lib/evg/showcase/themes/tables-default.css +123 -0
  238. package/dist/lib/evg/showcase/themes/variants-default.css +15 -0
  239. package/dist/lib/evg/showcase/themes/views-default.css +15 -0
  240. package/dist/lib/evg/tools/bench_vs_potrace.mjs +290 -0
  241. package/dist/lib/evg/tools/evg_image_tool.rgr +488 -0
  242. package/dist/lib/evg/tools/evg_trace_bench.rgr +114 -0
  243. package/dist/lib/evg/tools/evg_trace_cli.rgr +662 -0
  244. package/dist/lib/evg/tools/evg_trace_cpp_bench.rgr +83 -0
  245. package/dist/lib/evg/tools/run_trace_bench.sh +74 -0
  246. package/dist/lib/evg/tools/run_trace_cli_smoke.sh +128 -0
  247. package/dist/lib/evg/web/responsive/EvgResponsiveCheck.rgr +271 -0
  248. package/dist/lib/evg/web/responsive/EvgResponsiveDemo.rgr +531 -0
  249. package/dist/lib/evg/web/responsive/README.md +97 -0
  250. package/dist/lib/evg/web/responsive/build.mjs +90 -0
  251. package/dist/lib/evg/web/responsive/dom-check.mjs +169 -0
  252. package/dist/lib/evg/web/responsive/index.html +177 -0
  253. package/dist/lib/evg/web/responsive/smoke.mjs +221 -0
  254. package/dist/lib/evg/web/tools/assets-client.mjs +95 -0
  255. package/dist/lib/evg/web/tools/boot-bench.mjs +189 -0
  256. package/dist/lib/evg/web/tools/inline-assets.mjs +119 -0
  257. package/dist/lib/evg/web/tools/minify.mjs +60 -0
  258. package/dist/lib/evg/web/tracer/build.mjs +87 -0
  259. package/dist/lib/evg/web/tracer/index.html +2805 -0
  260. package/dist/lib/evg/web/tracer/sample.png +0 -0
  261. package/dist/lib/evg/web/tracer/smoke.mjs +1162 -0
  262. package/dist/lib/evgr/Cargo.lock +21 -0
  263. package/dist/lib/evgr/Cargo.toml +19 -0
  264. package/dist/lib/evgr/README.md +140 -0
  265. package/dist/lib/evgr/bench/NativeBench.rgr +246 -0
  266. package/dist/lib/evgr/bench/compare.mjs +252 -0
  267. package/dist/lib/evgr/bench/speed.mjs +277 -0
  268. package/dist/lib/evgr/bin/.gitignore +3 -0
  269. package/dist/lib/evgr/src/bin/bench.rs +106 -0
  270. package/dist/lib/evgr/src/bin/smoke.rs +13 -0
  271. package/dist/lib/evgr/src/grid.rs +730 -0
  272. package/dist/lib/evgr/src/lib.rs +1003 -0
  273. package/dist/lib/evgr/src/style.rs +468 -0
  274. package/dist/lib/evgr/src/text.rs +83 -0
  275. package/dist/lib/image/BitReader.rgr +171 -0
  276. package/dist/lib/image/Buffer.rgr +173 -0
  277. package/dist/lib/image/DCT.rgr +283 -0
  278. package/dist/lib/image/Deflate.rgr +339 -0
  279. package/dist/lib/image/HuffmanDecoder.rgr +181 -0
  280. package/dist/lib/image/ImageBuffer.rgr +706 -0
  281. package/dist/lib/image/JPEGDecoder.rgr +808 -0
  282. package/dist/lib/image/PNGDecoder.rgr +544 -0
  283. package/dist/lib/image/PNGEncoder.rgr +388 -0
  284. package/dist/lib/image/PPMImage.rgr +224 -0
  285. package/dist/lib/image/ProgressiveJPEGDecoder.rgr +1154 -0
  286. package/dist/lib/image/README.md +33 -0
  287. package/dist/lib/image/RasterBuffer.rgr +294 -0
  288. package/dist/lib/image/VP8BoolDecoder.rgr +163 -0
  289. package/dist/lib/image/WebPDecoder.rgr +433 -0
  290. package/dist/lib/image/WebPLossless.rgr +1035 -0
  291. package/dist/lib/image/WebPLossy.rgr +1929 -0
  292. package/dist/lib/image/ranger.json +9 -0
  293. package/dist/lib/image/testdata/webp/anim_2f_24x16.webp +0 -0
  294. package/dist/lib/image/testdata/webp/fixtures.txt +33 -0
  295. package/dist/lib/image/testdata/webp/gen_fixtures.py +261 -0
  296. package/dist/lib/image/testdata/webp/ll_1x1.webp +0 -0
  297. package/dist/lib/image/testdata/webp/ll_alpha_29x21.webp +0 -0
  298. package/dist/lib/image/testdata/webp/ll_gradient_64x64.webp +0 -0
  299. package/dist/lib/image/testdata/webp/ll_meta_32x32.webp +0 -0
  300. package/dist/lib/image/testdata/webp/ll_noise_17x9.webp +0 -0
  301. package/dist/lib/image/testdata/webp/ll_pal11_23x11.webp +0 -0
  302. package/dist/lib/image/testdata/webp/ll_pal2_19x7.webp +0 -0
  303. package/dist/lib/image/testdata/webp/ll_pal40_16x16.webp +0 -0
  304. package/dist/lib/image/testdata/webp/ll_pal4_13x5.webp +0 -0
  305. package/dist/lib/image/testdata/webp/ll_photo_40x30.webp +0 -0
  306. package/dist/lib/image/testdata/webp/ll_predictors_64x32.webp +0 -0
  307. package/dist/lib/image/testdata/webp/ly_1x1.webp +0 -0
  308. package/dist/lib/image/testdata/webp/ly_alph_raw_f0_21x13.webp +0 -0
  309. package/dist/lib/image/testdata/webp/ly_alph_raw_f1_21x13.webp +0 -0
  310. package/dist/lib/image/testdata/webp/ly_alph_raw_f2_21x13.webp +0 -0
  311. package/dist/lib/image/testdata/webp/ly_alph_raw_f3_21x13.webp +0 -0
  312. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f0_21x13.webp +0 -0
  313. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f1_21x13.webp +0 -0
  314. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f2_21x13.webp +0 -0
  315. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f3_21x13.webp +0 -0
  316. package/dist/lib/image/testdata/webp/ly_alpha_33x17.webp +0 -0
  317. package/dist/lib/image/testdata/webp/ly_exif_15x11.webp +0 -0
  318. package/dist/lib/image/testdata/webp/ly_i16_96x80.webp +0 -0
  319. package/dist/lib/image/testdata/webp/ly_nofilter_24x20.webp +0 -0
  320. package/dist/lib/image/testdata/webp/ly_odd_17x9.webp +0 -0
  321. package/dist/lib/image/testdata/webp/ly_photo_48x40.webp +0 -0
  322. package/dist/lib/image/testdata/webp/ly_q100_20x18.webp +0 -0
  323. package/dist/lib/image/testdata/webp/ly_sharp_40x36.webp +0 -0
  324. package/dist/lib/image/testdata/webp/ly_simple_filter_33x31.webp +0 -0
  325. package/dist/lib/image/testdata/webp/ly_vpx_parts8_37x45.webp +0 -0
  326. package/dist/lib/image/testdata/webp/ly_vpx_skip_96x80.webp +0 -0
  327. package/dist/lib/image/tests/WebPDecodeTool.rgr +81 -0
  328. package/dist/lib/image/tests/WebPDecoderTest.rgr +1162 -0
  329. package/dist/lib/image/tests/run_webp_tests.sh +39 -0
  330. package/dist/lib/rust/RsJson.rgr +468 -0
  331. package/dist/lib/rust/RsPrelude.rgr +1663 -0
  332. package/dist/lib/shell_test.rgr +7 -7
  333. package/dist/lib/stdlib.rgr +21 -5
  334. package/dist/lib/zip/ranger.json +6 -0
  335. package/dist/rgrc.js +87318 -67610
  336. package/package.json +1010 -1040
  337. package/dist/README.md +0 -117
  338. 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
+ }