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,306 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; ==============================================================================
4
+ ; EVGConnectorTest — out-of-flow boxes in a grid, and connectors
5
+ ; ==============================================================================
6
+ ;
7
+ ; Two features, one test, because the second was found while chasing the first.
8
+ ;
9
+ ; THE BUG. An arrow on a dashboard was written the only way it could be —
10
+ ; `position: absolute; left: 171px; top: 148px` — and drew itself in the page's
11
+ ; top-left corner with its offsets dropped. It looked like a `path` fault. It
12
+ ; was not: the same `path` under a flex or block parent lands correctly. The
13
+ ; parent was a `display: grid`, and `layoutGrid` skipped its out-of-flow
14
+ ; children when collecting grid items — rightly, an absolute box takes no
15
+ ; track — and then nothing laid them out at all. So the box kept zero size at
16
+ ; (0,0), a `div` vanished and a `path` drew its own coordinates at the origin.
17
+ ; `testAbsoluteInGrid` is that document, asserting a `div` and a `path` written
18
+ ; the same way come out in the same place under all three parents.
19
+ ;
20
+ ; THE FEATURE. Even fixed, `left: 171px` is the wrong tool for "an arrow from
21
+ ; this card to that one": it is measured against one width and wrong at every
22
+ ; other. A `connector` says which two boxes it joins; the layout writes its `d`
23
+ ; on every pass. `testResponsiveSides` is the whole argument — the same
24
+ ; document laid out two columns wide and one column wide, and the connector
25
+ ; leaving the right edge in one and the bottom edge in the other.
26
+ ; ==============================================================================
27
+
28
+ Import "EVGElement.rgr"
29
+ Import "EVGUnit.rgr"
30
+ Import "EVGLayout.rgr"
31
+ Import "EVGConnector.rgr"
32
+
33
+ class ConnCheck {
34
+ def passed:int 0
35
+ def failed:int 0
36
+
37
+ fn ok:void (name:string cond:boolean) {
38
+ if cond {
39
+ passed = (passed + 1)
40
+ print (" PASS " + name)
41
+ } {
42
+ failed = (failed + 1)
43
+ print (" FAIL " + name)
44
+ }
45
+ }
46
+
47
+ fn eqInt:void (name:string got:int want:int) {
48
+ def good:boolean (got == want)
49
+ if (good == false) {
50
+ print (" got " + (to_string got) + " want " + (to_string want))
51
+ }
52
+ this.ok(name good)
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 + "\"")
59
+ print (" want \"" + want + "\"")
60
+ }
61
+ this.ok(name good)
62
+ }
63
+ }
64
+
65
+ class EVGConnectorTest {
66
+
67
+ sfn box:EVGElement (id:string w:double h:double) {
68
+ def el (EVGElement.createDiv())
69
+ el.id = id
70
+ el.setAttribute("width" ((to_string (to_int w)) + "px"))
71
+ el.setAttribute("height" ((to_string (to_int h)) + "px"))
72
+ return el
73
+ }
74
+
75
+ sfn laidOut:EVGLayout (root:EVGElement w:double h:double) {
76
+ def lay (new EVGLayout())
77
+ lay.setPageSize(w h)
78
+ lay.layout(root)
79
+ return lay
80
+ }
81
+
82
+ ; ---------------------------------------------------------------------
83
+ ; An absolute box, and an absolute path, under each kind of parent.
84
+ ; ---------------------------------------------------------------------
85
+
86
+ sfn buildAbs:EVGElement (display:string) {
87
+ def page:EVGElement (EVGConnectorTest.box("page" 400.0 300.0))
88
+ page.setAttribute("display" display)
89
+ page.setAttribute("grid-template-columns" "1fr 1fr")
90
+ page.setAttribute("padding-left" "20px")
91
+ page.setAttribute("padding-top" "20px")
92
+ page.addChild((EVGConnectorTest.box("a" 100.0 60.0)))
93
+ page.addChild((EVGConnectorTest.box("b" 100.0 60.0)))
94
+
95
+ def absDiv:EVGElement (EVGConnectorTest.box("absdiv" 48.0 44.0))
96
+ absDiv.setAttribute("position" "absolute")
97
+ absDiv.setAttribute("left" "171px")
98
+ absDiv.setAttribute("top" "148px")
99
+ page.addChild(absDiv)
100
+
101
+ def absPath (EVGElement.createPath())
102
+ absPath.id = "abspath"
103
+ absPath.setAttribute("position" "absolute")
104
+ absPath.setAttribute("left" "171px")
105
+ absPath.setAttribute("top" "148px")
106
+ absPath.setAttribute("width" "48px")
107
+ absPath.setAttribute("height" "44px")
108
+ absPath.setAttribute("d" "M 2 22 L 42 22 L 34 14 M 42 22 L 34 30")
109
+ page.addChild(absPath)
110
+ return page
111
+ }
112
+
113
+ sfn checkAbs:void (c:ConnCheck display:string) {
114
+ def page:EVGElement (EVGConnectorTest.buildAbs(display))
115
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 400.0 300.0))
116
+ def absDiv:EVGElement (page.getChild(2))
117
+ def absPath:EVGElement (page.getChild(3))
118
+ c.eqInt((display + ": the absolute div's left is its parent's content edge + 171") (to_int absDiv.calculatedX) 191)
119
+ c.eqInt((display + ": …and its top the same way") (to_int absDiv.calculatedY) 168)
120
+ c.eqInt((display + ": it kept the size it was given") (to_int absDiv.calculatedWidth) 48)
121
+ c.eqInt((display + ": the path is in the same place as the div") (to_int absPath.calculatedX) 191)
122
+ c.eqInt((display + ": …on both axes") (to_int absPath.calculatedY) 168)
123
+ c.eqInt((display + ": …and the same size") (to_int absPath.calculatedHeight) 44)
124
+ }
125
+
126
+ sfn testAbsoluteInGrid:void (c:ConnCheck) {
127
+ print ""
128
+ print "--- position: absolute, under every kind of parent ---"
129
+ EVGConnectorTest.checkAbs(c "block")
130
+ EVGConnectorTest.checkAbs(c "flex")
131
+ EVGConnectorTest.checkAbs(c "grid")
132
+ }
133
+
134
+ ; ---------------------------------------------------------------------
135
+ ; Connectors
136
+ ; ---------------------------------------------------------------------
137
+
138
+ ; Two cards in a grid and a line between them. `columns` is what the test
139
+ ; changes to reflow the page.
140
+ sfn buildCards:EVGElement (width:double columns:string) {
141
+ def page:EVGElement (EVGConnectorTest.box("page" width 320.0))
142
+ page.setAttribute("display" "grid")
143
+ page.setAttribute("grid-template-columns" columns)
144
+ page.setAttribute("gap" "48px")
145
+ page.setAttribute("padding-left" "24px")
146
+ page.setAttribute("padding-top" "24px")
147
+ page.setAttribute("padding-right" "24px")
148
+
149
+ ; No width: a grid item stretches to its track, which is what makes
150
+ ; this document reflow at all.
151
+ def orders (EVGElement.createDiv())
152
+ orders.id = "orders"
153
+ orders.setAttribute("height" "120px")
154
+ orders.setAttribute("anchor-name" "--orders")
155
+ page.addChild(orders)
156
+ def revenue (EVGElement.createDiv())
157
+ revenue.id = "revenue"
158
+ revenue.setAttribute("height" "120px")
159
+ revenue.setAttribute("anchor-name" "--revenue")
160
+ page.addChild(revenue)
161
+
162
+ def conn (EVGElement.createPath())
163
+ conn.tagName = "connector"
164
+ conn.setAttribute("from" "--orders")
165
+ conn.setAttribute("to" "--revenue")
166
+ conn.setAttribute("stroke" "rgb(17,24,39)")
167
+ conn.setAttribute("stroke-width" "3")
168
+ conn.setAttribute("arrow-end" "triangle")
169
+ conn.setAttribute("arrow-size" "10px")
170
+ page.addChild(conn)
171
+ return page
172
+ }
173
+
174
+ sfn testStraight:void (c:ConnCheck) {
175
+ print ""
176
+ print "--- a straight connector between two grid cells ---"
177
+ def page:EVGElement (EVGConnectorTest.buildCards(600.0 "1fr 1fr"))
178
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 600.0 320.0))
179
+ def conn:EVGElement (page.getChild(2))
180
+ c.ok("it resolved" conn.connectorResolved)
181
+ ; The cells are 252 wide: 600 less two 24 paddings and one 48 gap,
182
+ ; halved. So the line runs from x=276 to x=324 at the cells' middle.
183
+ c.eqStr("the shaft joins the facing edges" conn.svgPath "M 276 84 L 324 84")
184
+ c.eqStr("the head is a filled triangle on the target" conn.arrowPath "M 324 84 L 315.34 89 L 315.34 79 Z")
185
+ c.ok("…and the shaft is not filled with it" ((strlen conn.svgPath) > 0))
186
+ ; The box is the geometry grown by what the stroke and the head put
187
+ ; outside it, and the viewBox is the same rectangle — a 1:1 fit.
188
+ c.eqInt("its box starts left of the shaft" (to_int conn.calculatedX) 263)
189
+ c.eqInt("…and is as wide as the shaft plus both pads" (to_int conn.calculatedWidth) 73)
190
+ c.eqStr("the viewBox is the box" conn.viewBox "263.5 71.5 73 25")
191
+ }
192
+
193
+ sfn testResponsiveSides:void (c:ConnCheck) {
194
+ print ""
195
+ print "--- the same connector, reflowed to one column ---"
196
+ def page:EVGElement (EVGConnectorTest.buildCards(320.0 "1fr"))
197
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 320.0 420.0))
198
+ def conn:EVGElement (page.getChild(2))
199
+ c.ok("it resolved" conn.connectorResolved)
200
+ ; Stacked, `auto` picks the bottom of the first card and the top of
201
+ ; the second — the whole reason the sides are not written down.
202
+ c.eqStr("it leaves the bottom edge and arrives at the top" conn.svgPath "M 160 144 L 160 192")
203
+ c.eqStr("and the head turned with it" conn.arrowPath "M 160 192 L 155 183.34 L 165 183.34 Z")
204
+ }
205
+
206
+ sfn testRouting:void (c:ConnCheck) {
207
+ print ""
208
+ print "--- orthogonal and bezier ---"
209
+ def page:EVGElement (EVGConnectorTest.box("page" 600.0 400.0))
210
+ page.setAttribute("flex-direction" "column")
211
+ page.setAttribute("gap" "40px")
212
+ def a:EVGElement (EVGConnectorTest.box("a" 120.0 60.0))
213
+ page.addChild(a)
214
+ def b:EVGElement (EVGConnectorTest.box("b" 120.0 60.0))
215
+ b.setAttribute("margin-left" "360px")
216
+ page.addChild(b)
217
+
218
+ def ortho (EVGElement.createPath())
219
+ ortho.tagName = "connector"
220
+ ortho.setAttribute("from" "#a")
221
+ ortho.setAttribute("to" "#b")
222
+ ortho.setAttribute("routing" "orthogonal")
223
+ ortho.setAttribute("stroke" "rgb(220,38,38)")
224
+ ortho.setAttribute("arrow-end" "open")
225
+ ortho.setAttribute("arrow-size" "9px")
226
+ page.addChild(ortho)
227
+
228
+ def curve (EVGElement.createPath())
229
+ curve.tagName = "connector"
230
+ curve.setAttribute("from" "#a")
231
+ curve.setAttribute("to" "#b")
232
+ curve.setAttribute("routing" "bezier")
233
+ curve.setAttribute("stroke" "rgb(37,99,235)")
234
+ page.addChild(curve)
235
+
236
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 600.0 400.0))
237
+ ; a is (0,0,120,60); b is (360,100,120,60) — the gap is 40.
238
+ c.eqStr("orthogonal turns halfway between the two edges, and an open head is stroked with the shaft" ortho.svgPath "M 120 30 L 240 30 L 240 130 L 360 130 M 352.21 134.5 L 360 130 L 352.21 125.5")
239
+ c.eqStr("…so it has nothing to fill" ortho.arrowPath "")
240
+ c.eqStr("bezier leaves and arrives along the sides it touches" curve.svgPath "M 120 30 C 269.45 30 210.55 130 360 130")
241
+ c.eqStr("…and asks for no head it was not given" curve.arrowPath "")
242
+ }
243
+
244
+ sfn testUnresolved:void (c:ConnCheck) {
245
+ print ""
246
+ print "--- a connector pointed at nothing ---"
247
+ def page:EVGElement (EVGConnectorTest.box("page" 400.0 200.0))
248
+ page.addChild((EVGConnectorTest.box("a" 100.0 60.0)))
249
+ def conn (EVGElement.createPath())
250
+ conn.tagName = "connector"
251
+ conn.setAttribute("from" "#a")
252
+ conn.setAttribute("to" "--nowhere")
253
+ conn.setAttribute("stroke" "rgb(0,0,0)")
254
+ page.addChild(conn)
255
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 400.0 200.0))
256
+ c.ok("it did not resolve" (conn.connectorResolved == false))
257
+ c.eqStr("and drew nothing rather than a line to the origin" conn.svgPath "")
258
+ def said:boolean false
259
+ def i:int 0
260
+ while (i < (lay.warningCount())) {
261
+ def w:string (lay.warningAt(i))
262
+ if ((indexOf w "--nowhere") >= 0) {
263
+ said = true
264
+ }
265
+ i = (i + 1)
266
+ }
267
+ c.ok("…and the layout said so by name" said)
268
+ }
269
+
270
+ sfn testAnchorById:void (c:ConnCheck) {
271
+ print ""
272
+ print "--- an id is an anchor too ---"
273
+ def page:EVGElement (EVGConnectorTest.box("page" 400.0 200.0))
274
+ page.setAttribute("flex-direction" "row")
275
+ page.setAttribute("gap" "40px")
276
+ page.addChild((EVGConnectorTest.box("left" 100.0 60.0)))
277
+ page.addChild((EVGConnectorTest.box("right" 100.0 60.0)))
278
+ def conn (EVGElement.createPath())
279
+ conn.tagName = "connector"
280
+ conn.setAttribute("from" "#left")
281
+ conn.setAttribute("to" "#right")
282
+ conn.setAttribute("stroke" "rgb(0,0,0)")
283
+ page.addChild(conn)
284
+ def lay:EVGLayout (EVGConnectorTest.laidOut(page 400.0 200.0))
285
+ c.ok("resolved by id" conn.connectorResolved)
286
+ c.eqStr("across the gap between them" conn.svgPath "M 100 30 L 140 30")
287
+ }
288
+
289
+ sfn main:void () {
290
+ def c (new ConnCheck())
291
+ print "=== EVG connectors and out-of-flow boxes ==="
292
+ EVGConnectorTest.testAbsoluteInGrid(c)
293
+ EVGConnectorTest.testStraight(c)
294
+ EVGConnectorTest.testResponsiveSides(c)
295
+ EVGConnectorTest.testRouting(c)
296
+ EVGConnectorTest.testUnresolved(c)
297
+ EVGConnectorTest.testAnchorById(c)
298
+ print ""
299
+ print ("passed=" + (to_string c.passed) + " failed=" + (to_string c.failed))
300
+ if (c.failed > 0) {
301
+ print "FAILURES"
302
+ } {
303
+ print "ALL PASS"
304
+ }
305
+ }
306
+ }