ranger-compiler 3.5.0 → 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 +1160 -19
  2. package/LICENSE +3 -1
  3. package/README.md +124 -29
  4. package/dist/Lang.rgr +1188 -290
  5. package/dist/api.d.ts +2343 -879
  6. package/dist/api.js +79924 -56922
  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,236 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; ==============================================================================
4
+ ; EVGViewportUnitTest — `vh` is the page, not the parent
5
+ ; ==============================================================================
6
+ ;
7
+ ; This file exists because of an Android emulator. `gallery/ui/demo`'s dashboard
8
+ ; stated `height: 1420px` on its page, its sidebar and the hairline between
9
+ ; them — the height the page was before it scrolled, kept because every window
10
+ ; it had been shown in was shorter than that and a column taller than the
11
+ ; window looks full. A tablet in portrait is 2137 page pixels tall, and the
12
+ ; sidebar stopped two thirds of the way down.
13
+ ;
14
+ ; `height: 100%` does not fix that on its own: a percentage needs a parent with
15
+ ; a definite height, and the page's own height is exactly the number nobody in
16
+ ; the tree has. The layout has it — `EVGLayout.pageWidth` / `pageHeight`, which
17
+ ; every host sets — so `vw` and `vh` are that number, spelled the way CSS
18
+ ; spells it.
19
+ ;
20
+ ; TWO THINGS ARE WORTH CHECKING and only one of them is arithmetic.
21
+ ;
22
+ ; The first is that a viewport length ignores its parent. That is the whole
23
+ ; difference from `%`, it is invisible on a root element (where the parent IS
24
+ ; the page), and it is the thing a "just resolve it like a percentage"
25
+ ; implementation gets wrong.
26
+ ;
27
+ ; The second is what `vh` means ON PAPER. CSS says viewport-percentage lengths
28
+ ; are relative to the PAGE AREA in paged media — the sheet less its margins —
29
+ ; and the print renderers already hand the layout exactly that as its page
30
+ ; size: `EVGPDFRenderer` sets `layout.pageHeight` to the section height less
31
+ ; two margins before laying a page out. So the rule needs no print-specific
32
+ ; code at all, and the case below is here to say that it stays that way.
33
+ ; ==============================================================================
34
+
35
+ Import "EVGElement.rgr"
36
+ Import "EVGUnit.rgr"
37
+ Import "EVGBox.rgr"
38
+ Import "EVGStyleSheet.rgr"
39
+ Import "EVGLayout.rgr"
40
+
41
+ class VpCheck {
42
+ def passed:int 0
43
+ def failed:int 0
44
+
45
+ fn ok:void (name:string cond:boolean) {
46
+ if cond {
47
+ passed = (passed + 1)
48
+ print (" PASS " + name)
49
+ } {
50
+ failed = (failed + 1)
51
+ print (" FAIL " + name)
52
+ }
53
+ }
54
+
55
+ fn eqStr:void (name:string got:string want:string) {
56
+ def good:boolean (got == want)
57
+ if (good == false) {
58
+ print (" got '" + got + "' want '" + want + "'")
59
+ }
60
+ this.ok(name good)
61
+ }
62
+
63
+ fn eqNum:void (name:string got:double want:double) {
64
+ def good:boolean (((got - want) < 0.01) && ((want - got) < 0.01))
65
+ if (good == false) {
66
+ print (" got " + (to_string got) + " want " + (to_string want))
67
+ }
68
+ this.ok(name good)
69
+ }
70
+ }
71
+
72
+ class EVGViewportUnitTest {
73
+
74
+ ; --- the parse ------------------------------------------------------------
75
+
76
+ sfn testParse:void (c:VpCheck) {
77
+ print "--- what the parser makes of them ---"
78
+ def vh:EVGUnit (EVGUnit.parse("100vh"))
79
+ c.ok("100vh is set" vh.isSet)
80
+ c.ok("and it is a viewport length" (vh.isViewport()))
81
+ c.eqNum("carrying its number" vh.value 100.0)
82
+ c.eqStr("and it prints as it was written" (vh.toString()) "100vh")
83
+
84
+ def vw:EVGUnit (EVGUnit.parse("50vw"))
85
+ c.ok("50vw too" (vw.isViewport()))
86
+ c.eqStr("and prints its own suffix" (vw.toString()) "50vw")
87
+
88
+ ; A fraction, because a segmented control is a third of something.
89
+ def third:EVGUnit (EVGUnit.parse("33.5vh"))
90
+ c.eqNum("a fractional one keeps its fraction" third.value 33.5)
91
+
92
+ ; The guard the file was written around: an unknown suffix must not
93
+ ; fall through to the bare-number path. `vmin` is deliberately not
94
+ ; supported, so it has to come out unset rather than 10 pixels.
95
+ def vmin:EVGUnit (EVGUnit.parse("10vmin"))
96
+ c.ok("an unsupported v-unit stays unset" (vmin.isSet == false))
97
+ c.eqNum("and is not quietly ten pixels" vmin.pixels 0.0)
98
+ }
99
+
100
+ ; --- the arithmetic -------------------------------------------------------
101
+
102
+ sfn testResolve:void (c:VpCheck) {
103
+ print "--- the numbers ---"
104
+ def h:EVGUnit (EVGUnit.parse("50vh"))
105
+ h.setContext(14.0 1000.0 600.0)
106
+ h.resolve(200.0 14.0)
107
+ c.eqNum("50vh of a 600-tall viewport is 300" h.pixels 300.0)
108
+
109
+ def w:EVGUnit (EVGUnit.parse("25vw"))
110
+ w.setContext(14.0 1000.0 600.0)
111
+ w.resolve(200.0 14.0)
112
+ c.eqNum("25vw of a 1000-wide one is 250" w.pixels 250.0)
113
+
114
+ ; The parent is 200 in both calls above and neither answer is 100 or
115
+ ; 50, which is the whole claim.
116
+ def pct:EVGUnit (EVGUnit.parse("50%"))
117
+ pct.resolve(200.0 14.0)
118
+ c.eqNum("where 50% of the same parent is 100" pct.pixels 100.0)
119
+
120
+ ; Height resolution has its own entry point, and it delegates rather
121
+ ; than reimplementing — this is the check that it kept delegating.
122
+ def hh:EVGUnit (EVGUnit.parse("100vh"))
123
+ hh.setContext(14.0 1000.0 600.0)
124
+ hh.resolveForHeight(200.0 320.0 14.0)
125
+ c.eqNum("and on the height property it is still the viewport" hh.pixels 600.0)
126
+
127
+ ; No viewport handed over: zero, not the parent. A silent fallback is
128
+ ; what makes `100vh` mean two different things in two places.
129
+ def orphan:EVGUnit (EVGUnit.parse("100vh"))
130
+ orphan.resolve(480.0 14.0)
131
+ c.eqNum("with no viewport it is zero rather than the parent" orphan.pixels 0.0)
132
+ }
133
+
134
+ ; --- through a layout -----------------------------------------------------
135
+
136
+ sfn sheet:EVGStyleSheet (css:string) {
137
+ def s (new EVGStyleSheet())
138
+ s.parse(css)
139
+ return s
140
+ }
141
+
142
+ sfn testLaidOut:void (c:VpCheck) {
143
+ print "--- through a real layout ---"
144
+ def css:string ".page { display: flex; flex-direction: column; }
145
+ .band { height: 50vh; width: 25vw; overflow: hidden; }
146
+ .inner { height: 100vh; }
147
+ .padded { padding: 5vh; height: 10vh; }"
148
+ def s:EVGStyleSheet (EVGViewportUnitTest.sheet(css))
149
+
150
+ def page:EVGElement (EVGElement.createDiv())
151
+ page.className = "page"
152
+ def band:EVGElement (EVGElement.createDiv())
153
+ band.className = "band"
154
+ ; NESTED, and this is the case that separates a viewport length from a
155
+ ; percentage: `inner` sits in a box 300 tall and asks for 100vh, which
156
+ ; is the page's 600 and not its parent's 300.
157
+ def inner:EVGElement (EVGElement.createDiv())
158
+ inner.className = "inner"
159
+ def padded:EVGElement (EVGElement.createDiv())
160
+ padded.className = "padded"
161
+ band.addChild(inner)
162
+ page.addChild(band)
163
+ page.addChild(padded)
164
+ s.applyTree(page "")
165
+
166
+ def lay (new EVGLayout())
167
+ lay.setPageSize(800.0 600.0)
168
+ lay.layout(page)
169
+
170
+ c.eqNum("50vh is half the page's height" band.calculatedHeight 300.0)
171
+ c.eqNum("25vw is a quarter of its width" band.calculatedWidth 200.0)
172
+ ; The unit first, because that is the claim: 100vh inside a 300-tall
173
+ ; box is 600. What the layout then DOES with a child taller than its
174
+ ; parent is a separate question with a separate answer — a flex item
175
+ ; shrinks, a clip box keeps it — so the box is checked under
176
+ ; `overflow: hidden`, which is the arrangement the ui gallery's scroll
177
+ ; container is built on.
178
+ c.eqNum("a nested 100vh resolves to the PAGE, not the 300 it sits in"
179
+ inner.height.pixels 600.0)
180
+ c.eqNum("and inside a clip box it keeps that height"
181
+ inner.calculatedHeight 600.0)
182
+ ; Box lengths take the same context — a `padding: 5vh` that resolved to
183
+ ; zero would be the same bug one layer down.
184
+ c.eqNum("padding in vh resolves too" padded.box.paddingTopPx 30.0)
185
+ }
186
+
187
+ ; --- and on paper ---------------------------------------------------------
188
+
189
+ sfn testPageArea:void (c:VpCheck) {
190
+ print "--- on paper it is the page area ---"
191
+ ; A4 at 72dpi with a 40pt margin all round, which is what the print
192
+ ; renderers compute before they lay a page out: they set the layout's
193
+ ; page size to the section less two margins and then lay the Page
194
+ ; element out inside it. So this is not a special case in the unit, it
195
+ ; is the same rule reading a different page size.
196
+ def paperW:double 595.0
197
+ def paperH:double 842.0
198
+ def margin:double 40.0
199
+ def areaW:double (paperW - (margin * 2.0))
200
+ def areaH:double (paperH - (margin * 2.0))
201
+
202
+ def s:EVGStyleSheet (EVGViewportUnitTest.sheet(".sheet { display: flex; flex-direction: column; }
203
+ .full { height: 100vh; width: 100vw; }"))
204
+ def sheetEl:EVGElement (EVGElement.createDiv())
205
+ sheetEl.className = "sheet"
206
+ def full:EVGElement (EVGElement.createDiv())
207
+ full.className = "full"
208
+ sheetEl.addChild(full)
209
+ s.applyTree(sheetEl "")
210
+
211
+ def lay (new EVGLayout())
212
+ lay.setPageSize(areaW areaH)
213
+ lay.layout(sheetEl)
214
+
215
+ c.eqNum("100vh is the text column, not the sheet" full.calculatedHeight areaH)
216
+ c.eqNum("and 100vw is its width" full.calculatedWidth areaW)
217
+ c.ok("which is the paper less two margins"
218
+ ((areaH == (paperH - 80.0)) && (areaW == (paperW - 80.0))))
219
+ }
220
+
221
+ sfn main:void () {
222
+ def c (new VpCheck())
223
+ print "=== EVG viewport units: vw and vh ==="
224
+ EVGViewportUnitTest.testParse(c)
225
+ EVGViewportUnitTest.testResolve(c)
226
+ EVGViewportUnitTest.testLaidOut(c)
227
+ EVGViewportUnitTest.testPageArea(c)
228
+ print ""
229
+ print ("passed=" + (to_string c.passed) + " failed=" + (to_string c.failed))
230
+ if (c.failed > 0) {
231
+ print "FAILURES"
232
+ } {
233
+ print "ALL PASS"
234
+ }
235
+ }
236
+ }
@@ -0,0 +1,189 @@
1
+ ; SPDX-License-Identifier: MIT
2
+ ; ==============================================================================
3
+ ; EvgApp.rgr — what a host may ask of any EVG application.
4
+ ; ==============================================================================
5
+ ;
6
+ ; PLAN_WEB_LOADING.md S8. Every Ranger application that draws through EVG is
7
+ ; driven the same way: it is given a page size and a pointer kind, it is asked
8
+ ; what is under a coordinate, it is told about presses, hovers, scrolls, keys
9
+ ; and the passing of time, and it hands back a display list. Four hosts —
10
+ ; a browser page, a UIKit view, an Android View, and whatever comes next —
11
+ ; have each written that conversation out against one concrete app class.
12
+ ;
13
+ ; This is the conversation, named. An app extends it, overrides what it
14
+ ; answers, and is then drivable by a host that has never heard of it; a host
15
+ ; holds an `EvgApp` and works for every app rather than for one.
16
+ ;
17
+ ; THE DEFAULTS ARE NOT PLACEHOLDERS. They are what an app that does not do a
18
+ ; thing should do when asked: nothing happened, nothing is under the point,
19
+ ; the list is empty. A host may call anything on any app without asking first
20
+ ; whether it is the kind of app that answers.
21
+ ;
22
+ ; What is NOT here is anything an app is free to invent: how it is loaded,
23
+ ; what data it takes, what its routes are called. `init` is deliberately
24
+ ; absent for the same reason — one app takes a stylesheet and a document,
25
+ ; another takes neither, and a base class that guessed would be a base class
26
+ ; every app had to work around.
27
+
28
+ Import "EVGDisplayList.rgr"
29
+
30
+ class EvgApp {
31
+
32
+ ; --- the frame ------------------------------------------------------------
33
+
34
+ ; The display list as it stands. A host paints this and asks for nothing
35
+ ; else; it is the whole of what is on the screen.
36
+ fn display:EVGDisplayList () {
37
+ def empty (new EVGDisplayList())
38
+ return empty
39
+ }
40
+
41
+ ; Time passed. True means something moved and the host should paint —
42
+ ; an animation, a fling, a transition — so a host that gets false may
43
+ ; leave the last frame where it is.
44
+ fn tick:boolean (dtMs:double) {
45
+ return false
46
+ }
47
+
48
+ ; Lay the page out again from the tree it has. A host calls this when
49
+ ; something it owns changed under the app: a font arrived, a chunk landed.
50
+ fn rebuild:void () {
51
+ }
52
+
53
+ ; --- the surface ----------------------------------------------------------
54
+
55
+ fn setPageSize:void (w:double h:double) {
56
+ }
57
+
58
+ fn widthPx:double () {
59
+ return 0.0
60
+ }
61
+
62
+ fn heightPx:double () {
63
+ return 0.0
64
+ }
65
+
66
+ ; A finger rather than a mouse, as the host reports it. A stylesheet's
67
+ ; `(pointer: coarse)` block answers for the size of the targets.
68
+ fn setPointerCoarse:void (c:boolean) {
69
+ }
70
+
71
+ ; --- the pointer ----------------------------------------------------------
72
+
73
+ ; What is under a page point, as an element id, or "" for nothing. This is
74
+ ; the app's own hit test: a host resolves a coordinate by asking, never by
75
+ ; keeping a copy of the layout.
76
+ fn hitId:string (px:double py:double) {
77
+ return ""
78
+ }
79
+
80
+ fn press:boolean (id:string) {
81
+ return false
82
+ }
83
+
84
+ fn setHover:void (id:string) {
85
+ }
86
+
87
+ ; What the app believes is hovered. A host needs it to tell a move that
88
+ ; changed something from a move that did not, and it asks rather than
89
+ ; reading a field: a field is a coupling to one app, a question is not.
90
+ fn hoveredId:string () {
91
+ return ""
92
+ }
93
+
94
+ fn setPressed:void (id:string) {
95
+ }
96
+
97
+ fn setFocus:void (id:string) {
98
+ }
99
+
100
+ ; --- scrolling ------------------------------------------------------------
101
+ ;
102
+ ; The document's own scroll, and the scrollbar's thumb as a separate
103
+ ; gesture. `dtMs` is what makes a throw the same throw on every platform:
104
+ ; the velocity is measured from the host's real clock rather than from an
105
+ ; assumed frame rate.
106
+
107
+ fn scrollDrag:boolean (dy:double dtMs:double) {
108
+ return false
109
+ }
110
+
111
+ fn scrollRelease:boolean () {
112
+ return false
113
+ }
114
+
115
+ fn scrollHalt:void () {
116
+ }
117
+
118
+ fn scrollbarGrab:boolean (px:double py:double) {
119
+ return false
120
+ }
121
+
122
+ fn scrollbarDrag:boolean (py:double) {
123
+ return false
124
+ }
125
+
126
+ fn scrollbarRelease:boolean () {
127
+ return false
128
+ }
129
+
130
+ fn scrollbarHover:boolean (px:double py:double) {
131
+ return false
132
+ }
133
+
134
+ fn overScrollbar:boolean () {
135
+ return false
136
+ }
137
+
138
+ ; --- text -----------------------------------------------------------------
139
+ ;
140
+ ; A host owns the keyboard and the app owns the caret: what crosses is
141
+ ; text and named keys, never a key code.
142
+
143
+ fn typeText:boolean (text:string) {
144
+ return false
145
+ }
146
+
147
+ fn keyWith:boolean (k:string shift:boolean ctrl:boolean) {
148
+ return false
149
+ }
150
+
151
+ fn hasField:boolean (tid:string) {
152
+ return false
153
+ }
154
+
155
+ ; The focused field's text, selection and kind, as JSON — what a native
156
+ ; text input needs to agree with the app about what is being edited.
157
+ fn fieldStateJson:string (tid:string) {
158
+ return ""
159
+ }
160
+
161
+ fn focusedField:string () {
162
+ return ""
163
+ }
164
+
165
+ ; --- where the app is -----------------------------------------------------
166
+
167
+ fn openRoute:boolean (route:string) {
168
+ return false
169
+ }
170
+
171
+ ; What the app calls the screen it is on. Hosts show it in a status line
172
+ ; and checks assert on it.
173
+ fn sceneName:string () {
174
+ return ""
175
+ }
176
+
177
+ ; --- what went wrong ------------------------------------------------------
178
+ ;
179
+ ; A stylesheet that did not parse is not a crash and must not be silent:
180
+ ; the app keeps the complaints and a host decides whether to show them.
181
+
182
+ fn styleErrorCount:int () {
183
+ return 0
184
+ }
185
+
186
+ fn styleErrorAt:string (i:int) {
187
+ return ""
188
+ }
189
+ }