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,435 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; ==============================================================================
4
+ ; EvgTracePath.rgr — compact `d` encoding for traced paths
5
+ ; ==============================================================================
6
+ ;
7
+ ; A trace is thousands of curves, and how they are written down is worth as
8
+ ; much as how they were fitted. VectorShapes.asPathData is the general writer
9
+ ; for the vector stack: absolute commands, four decimals, a separator between
10
+ ; every pair of numbers. That is the right default for hand-built art, where a
11
+ ; path is a few dozen commands a human may read. For a traced picture it is
12
+ ; roughly twice the bytes it needs to be, on geometry nobody will ever read.
13
+ ;
14
+ ; Nothing here moves a point beyond the rounding the caller asks for:
15
+ ;
16
+ ; 1. quantize — round every coordinate to `precision` decimals, once, in
17
+ ; document space, BEFORE the cleanup below. Rounding at write
18
+ ; time instead leaves the segments the rounding itself made
19
+ ; degenerate in the file.
20
+ ; 2. cleanup — drop the zero-length steps and the collinear middles that
21
+ ; quantization just created.
22
+ ; 3. encode — per segment the shorter of the absolute and the relative
23
+ ; form, H/V for an axis-aligned line, S for a cubic whose
24
+ ; first handle mirrors the last one, numbers with no leading
25
+ ; zero or trailing zeros, and no separator where the grammar
26
+ ; does not need one.
27
+ ;
28
+ ; The separator rule is the only subtle one. A number may be run straight onto
29
+ ; the previous one when it cannot extend it: always before a minus sign, and
30
+ ; before a leading "." only when the previous number already spent its own dot
31
+ ; (so "5.25.5" is two numbers, while "5" then ".5" must stay apart or it reads
32
+ ; as the single number 5.5).
33
+ ; ==============================================================================
34
+
35
+ Import "SVGPathParser.rgr"
36
+
37
+ class EvgTracePath {
38
+
39
+ Constructor () {
40
+ }
41
+
42
+ sfn absD:double (v:double) {
43
+ if (v < 0.0) {
44
+ return (0.0 - v)
45
+ }
46
+ return v
47
+ }
48
+
49
+ ; Round to `p` decimals and write it in the shortest form that reads back
50
+ ; the same: no trailing zeros, no leading zero on a pure fraction.
51
+ sfn num:string (v:double p:int) {
52
+ def scale:double 1.0
53
+ def i:int 0
54
+ while (i < p) {
55
+ scale = (scale * 10.0)
56
+ i = (i + 1)
57
+ }
58
+ def neg:boolean false
59
+ def a:double v
60
+ if (a < 0.0) {
61
+ neg = true
62
+ a = (0.0 - a)
63
+ }
64
+ def scaled:int (to_int ((a * scale) + 0.5))
65
+ def unit:int (to_int scale)
66
+ def whole:int (idiv scaled unit)
67
+ def frac:int (scaled - (whole * unit))
68
+ def out:string ""
69
+ if (frac > 0) {
70
+ ; Trim the trailing zeros as digits, not as text.
71
+ def digits:int p
72
+ while ((frac - ((idiv frac 10) * 10)) == 0) {
73
+ frac = (idiv frac 10)
74
+ digits = (digits - 1)
75
+ }
76
+ def fs:string (to_string frac)
77
+ ; Left-pad back to the place the digits actually sit in.
78
+ def pad:int (digits - (strlen fs))
79
+ while (pad > 0) {
80
+ fs = ("0" + fs)
81
+ pad = (pad - 1)
82
+ }
83
+ if (whole == 0) {
84
+ out = ("." + fs)
85
+ } {
86
+ out = ((to_string whole) + "." + fs)
87
+ }
88
+ } {
89
+ out = (to_string whole)
90
+ }
91
+ if (neg) {
92
+ if (out == "0") {
93
+ return "0"
94
+ }
95
+ return ("-" + out)
96
+ }
97
+ return out
98
+ }
99
+
100
+ ; Round every coordinate to `p` decimals, in place on a copy.
101
+ sfn quantize:[PathCommand] (cmds:[PathCommand] p:int) {
102
+ def out:[PathCommand]
103
+ def n:int (array_length cmds)
104
+ def i:int 0
105
+ while (i < n) {
106
+ def c:PathCommand (itemAt cmds i)
107
+ def q (new PathCommand())
108
+ q.type = c.type
109
+ q.x = (EvgTracePath.roundTo(c.x p))
110
+ q.y = (EvgTracePath.roundTo(c.y p))
111
+ q.x1 = (EvgTracePath.roundTo(c.x1 p))
112
+ q.y1 = (EvgTracePath.roundTo(c.y1 p))
113
+ q.x2 = (EvgTracePath.roundTo(c.x2 p))
114
+ q.y2 = (EvgTracePath.roundTo(c.y2 p))
115
+ push out q
116
+ i = (i + 1)
117
+ }
118
+ return out
119
+ }
120
+
121
+ sfn roundTo:double (v:double p:int) {
122
+ def scale:double 1.0
123
+ def i:int 0
124
+ while (i < p) {
125
+ scale = (scale * 10.0)
126
+ i = (i + 1)
127
+ }
128
+ def neg:boolean false
129
+ def a:double v
130
+ if (a < 0.0) {
131
+ neg = true
132
+ a = (0.0 - a)
133
+ }
134
+ def r:int (to_int ((a * scale) + 0.5))
135
+ def back:double ((to_double r) / scale)
136
+ if (neg) {
137
+ return (0.0 - back)
138
+ }
139
+ return back
140
+ }
141
+
142
+ ; True when b sits on the segment a→c, within a tenth of the rounding grid.
143
+ sfn collinear:boolean (ax:double ay:double bx:double by:double cx:double cy:double) {
144
+ def cross:double (((bx - ax) * (cy - ay)) - ((by - ay) * (cx - ax)))
145
+ def dx:double (cx - ax)
146
+ def dy:double (cy - ay)
147
+ def base:double (sqrt ((dx * dx) + (dy * dy)))
148
+ if (base < 0.000001) {
149
+ return true
150
+ }
151
+ def d:double (EvgTracePath.absD(cross))
152
+ return ((d / base) < 0.0001)
153
+ }
154
+
155
+ ; Drop zero-length steps and collinear middles left by the rounding. Only
156
+ ; straight runs are touched; a curve is never merged into its neighbour.
157
+ sfn cleanup:[PathCommand] (cmds:[PathCommand]) {
158
+ def out:[PathCommand]
159
+ def n:int (array_length cmds)
160
+ def lx:double 0.0
161
+ def ly:double 0.0
162
+ def px:double 0.0
163
+ def py:double 0.0
164
+ def i:int 0
165
+ while (i < n) {
166
+ def c:PathCommand (itemAt cmds i)
167
+ if (c.type == "M") {
168
+ push out c
169
+ lx = c.x
170
+ ly = c.y
171
+ px = c.x
172
+ py = c.y
173
+ }
174
+ if (c.type == "L") {
175
+ def skip:boolean false
176
+ if ((lx == c.x) && (ly == c.y)) {
177
+ skip = true
178
+ }
179
+ if (skip == false) {
180
+ def merged:boolean false
181
+ def m:int (array_length out)
182
+ if (m > 0) {
183
+ def prev:PathCommand (itemAt out (m - 1))
184
+ if (prev.type == "L") {
185
+ if (EvgTracePath.collinear(px py lx ly c.x c.y)) {
186
+ prev.x = c.x
187
+ prev.y = c.y
188
+ merged = true
189
+ }
190
+ }
191
+ }
192
+ if (merged == false) {
193
+ push out c
194
+ px = lx
195
+ py = ly
196
+ }
197
+ lx = c.x
198
+ ly = c.y
199
+ }
200
+ }
201
+ if (c.type == "C") {
202
+ push out c
203
+ px = lx
204
+ py = ly
205
+ lx = c.x
206
+ ly = c.y
207
+ }
208
+ if (c.type == "Q") {
209
+ push out c
210
+ px = lx
211
+ py = ly
212
+ lx = c.x
213
+ ly = c.y
214
+ }
215
+ if (c.type == "Z") {
216
+ push out c
217
+ }
218
+ i = (i + 1)
219
+ }
220
+ return out
221
+ }
222
+
223
+ ; Append `tok` to `d`, with a separator only where the SVG number grammar
224
+ ; needs one. `prev` is the number written just before it.
225
+ sfn joinNum:string (d:string prev:string tok:string) {
226
+ if ((strlen prev) == 0) {
227
+ return (d + tok)
228
+ }
229
+ def first:string (substring tok 0 1)
230
+ if (first == "-") {
231
+ return (d + tok)
232
+ }
233
+ if (first == ".") {
234
+ if ((indexOf prev ".") >= 0) {
235
+ return (d + tok)
236
+ }
237
+ }
238
+ return ((d + " ") + tok)
239
+ }
240
+
241
+ ; Two numbers as one coordinate pair, appended to `d`.
242
+ sfn pair:string (d:string prev:string a:string b:string) {
243
+ def s1:string (EvgTracePath.joinNum(d prev a))
244
+ return (EvgTracePath.joinNum(s1 a b))
245
+ }
246
+
247
+ ; The last number written in `s`, so the next one knows whether it may run
248
+ ; on. Empty when `s` ends in a command letter.
249
+ ;
250
+ ; A minus sign STARTS a number, it does not continue one, so the scan stops
251
+ ; at it and then takes it. Reading "-" as an interior character instead
252
+ ; makes ".2-1" look like a single number that has already spent its dot,
253
+ ; and the next ".44" is then written with no separator — ".2-1.44" — which
254
+ ; is three numbers where four were meant, and the path breaks there.
255
+ sfn lastNum:string (s:string) {
256
+ def n:int (strlen s)
257
+ def i:int n
258
+ while (i > 0) {
259
+ def ch:string (substring s (i - 1) i)
260
+ if ((indexOf "0123456789." ch) < 0) {
261
+ if (ch == "-") {
262
+ return (substring s (i - 1) n)
263
+ }
264
+ return (substring s i n)
265
+ }
266
+ i = (i - 1)
267
+ }
268
+ return (substring s 0 n)
269
+ }
270
+
271
+ ; The whole `d` attribute. `precision` is decimal places; `compact` picks
272
+ ; the shorthand encoding over plain absolute commands.
273
+ sfn encode:string (cmds:[PathCommand] precision:int compact:boolean) {
274
+ def q:[PathCommand] (EvgTracePath.quantize(cmds precision))
275
+ def work:[PathCommand] (EvgTracePath.cleanup(q))
276
+ if (compact == false) {
277
+ return (EvgTracePath.encodePlain(work precision))
278
+ }
279
+ return (EvgTracePath.encodeCompact(work precision))
280
+ }
281
+
282
+ sfn encodePlain:string (cmds:[PathCommand] precision:int) {
283
+ def d:string ""
284
+ def n:int (array_length cmds)
285
+ def i:int 0
286
+ while (i < n) {
287
+ def c:PathCommand (itemAt cmds i)
288
+ if (i > 0) {
289
+ d = (d + " ")
290
+ }
291
+ if (c.type == "M") {
292
+ d = (((d + "M") + (EvgTracePath.num(c.x precision)) + ",") + (EvgTracePath.num(c.y precision)))
293
+ }
294
+ if (c.type == "L") {
295
+ d = (((d + "L") + (EvgTracePath.num(c.x precision)) + ",") + (EvgTracePath.num(c.y precision)))
296
+ }
297
+ if (c.type == "C") {
298
+ d = (((d + "C") + (EvgTracePath.num(c.x1 precision)) + ",") + (EvgTracePath.num(c.y1 precision)))
299
+ d = (((d + " ") + (EvgTracePath.num(c.x2 precision)) + ",") + (EvgTracePath.num(c.y2 precision)))
300
+ d = (((d + " ") + (EvgTracePath.num(c.x precision)) + ",") + (EvgTracePath.num(c.y precision)))
301
+ }
302
+ if (c.type == "Q") {
303
+ d = (((d + "Q") + (EvgTracePath.num(c.x1 precision)) + ",") + (EvgTracePath.num(c.y1 precision)))
304
+ d = (((d + " ") + (EvgTracePath.num(c.x precision)) + ",") + (EvgTracePath.num(c.y precision)))
305
+ }
306
+ if (c.type == "Z") {
307
+ d = (d + "Z")
308
+ }
309
+ i = (i + 1)
310
+ }
311
+ return d
312
+ }
313
+
314
+ sfn encodeCompact:string (cmds:[PathCommand] precision:int) {
315
+ def d:string ""
316
+ def n:int (array_length cmds)
317
+ ; Current point, the subpath start, and the previous cubic's second
318
+ ; handle (for the S shorthand). `smooth` says whether that handle is
319
+ ; real, i.e. whether the previous command was a cubic.
320
+ def cx:double 0.0
321
+ def cy:double 0.0
322
+ def sx:double 0.0
323
+ def sy:double 0.0
324
+ def hx:double 0.0
325
+ def hy:double 0.0
326
+ def smooth:boolean false
327
+ def i:int 0
328
+ while (i < n) {
329
+ def c:PathCommand (itemAt cmds i)
330
+ if (c.type == "M") {
331
+ def absTok:string (EvgTracePath.pair("M" "" (EvgTracePath.num(c.x precision)) (EvgTracePath.num(c.y precision))))
332
+ def relTok:string (EvgTracePath.pair("m" "" (EvgTracePath.num((c.x - cx) precision)) (EvgTracePath.num((c.y - cy) precision))))
333
+ if (i == 0) {
334
+ d = (d + absTok)
335
+ } {
336
+ if ((strlen relTok) < (strlen absTok)) {
337
+ d = (d + relTok)
338
+ } {
339
+ d = (d + absTok)
340
+ }
341
+ }
342
+ cx = c.x
343
+ cy = c.y
344
+ sx = c.x
345
+ sy = c.y
346
+ smooth = false
347
+ }
348
+ if (c.type == "L") {
349
+ def absTok2:string ""
350
+ def relTok2:string ""
351
+ if (c.y == cy) {
352
+ absTok2 = (EvgTracePath.joinNum("H" "" (EvgTracePath.num(c.x precision))))
353
+ relTok2 = (EvgTracePath.joinNum("h" "" (EvgTracePath.num((c.x - cx) precision))))
354
+ } {
355
+ if (c.x == cx) {
356
+ absTok2 = (EvgTracePath.joinNum("V" "" (EvgTracePath.num(c.y precision))))
357
+ relTok2 = (EvgTracePath.joinNum("v" "" (EvgTracePath.num((c.y - cy) precision))))
358
+ } {
359
+ absTok2 = (EvgTracePath.pair("L" "" (EvgTracePath.num(c.x precision)) (EvgTracePath.num(c.y precision))))
360
+ relTok2 = (EvgTracePath.pair("l" "" (EvgTracePath.num((c.x - cx) precision)) (EvgTracePath.num((c.y - cy) precision))))
361
+ }
362
+ }
363
+ if ((strlen relTok2) < (strlen absTok2)) {
364
+ d = (d + relTok2)
365
+ } {
366
+ d = (d + absTok2)
367
+ }
368
+ cx = c.x
369
+ cy = c.y
370
+ smooth = false
371
+ }
372
+ if (c.type == "C") {
373
+ ; S is available when the first handle is the reflection of the
374
+ ; previous cubic's second handle through the current point.
375
+ def useS:boolean false
376
+ if (smooth) {
377
+ def rx:double ((2.0 * cx) - hx)
378
+ def ry:double ((2.0 * cy) - hy)
379
+ def ex:double (EvgTracePath.absD((rx - c.x1)))
380
+ def ey:double (EvgTracePath.absD((ry - c.y1)))
381
+ if ((ex < 0.0000001) && (ey < 0.0000001)) {
382
+ useS = true
383
+ }
384
+ }
385
+ def absTok3:string ""
386
+ def relTok3:string ""
387
+ if (useS) {
388
+ absTok3 = (EvgTracePath.pair("S" "" (EvgTracePath.num(c.x2 precision)) (EvgTracePath.num(c.y2 precision))))
389
+ absTok3 = (EvgTracePath.pair(absTok3 (EvgTracePath.lastNum(absTok3)) (EvgTracePath.num(c.x precision)) (EvgTracePath.num(c.y precision))))
390
+ relTok3 = (EvgTracePath.pair("s" "" (EvgTracePath.num((c.x2 - cx) precision)) (EvgTracePath.num((c.y2 - cy) precision))))
391
+ relTok3 = (EvgTracePath.pair(relTok3 (EvgTracePath.lastNum(relTok3)) (EvgTracePath.num((c.x - cx) precision)) (EvgTracePath.num((c.y - cy) precision))))
392
+ } {
393
+ absTok3 = (EvgTracePath.pair("C" "" (EvgTracePath.num(c.x1 precision)) (EvgTracePath.num(c.y1 precision))))
394
+ absTok3 = (EvgTracePath.pair(absTok3 (EvgTracePath.lastNum(absTok3)) (EvgTracePath.num(c.x2 precision)) (EvgTracePath.num(c.y2 precision))))
395
+ absTok3 = (EvgTracePath.pair(absTok3 (EvgTracePath.lastNum(absTok3)) (EvgTracePath.num(c.x precision)) (EvgTracePath.num(c.y precision))))
396
+ relTok3 = (EvgTracePath.pair("c" "" (EvgTracePath.num((c.x1 - cx) precision)) (EvgTracePath.num((c.y1 - cy) precision))))
397
+ relTok3 = (EvgTracePath.pair(relTok3 (EvgTracePath.lastNum(relTok3)) (EvgTracePath.num((c.x2 - cx) precision)) (EvgTracePath.num((c.y2 - cy) precision))))
398
+ relTok3 = (EvgTracePath.pair(relTok3 (EvgTracePath.lastNum(relTok3)) (EvgTracePath.num((c.x - cx) precision)) (EvgTracePath.num((c.y - cy) precision))))
399
+ }
400
+ if ((strlen relTok3) < (strlen absTok3)) {
401
+ d = (d + relTok3)
402
+ } {
403
+ d = (d + absTok3)
404
+ }
405
+ hx = c.x2
406
+ hy = c.y2
407
+ cx = c.x
408
+ cy = c.y
409
+ smooth = true
410
+ }
411
+ if (c.type == "Q") {
412
+ def absTok4:string (EvgTracePath.pair("Q" "" (EvgTracePath.num(c.x1 precision)) (EvgTracePath.num(c.y1 precision))))
413
+ absTok4 = (EvgTracePath.pair(absTok4 (EvgTracePath.lastNum(absTok4)) (EvgTracePath.num(c.x precision)) (EvgTracePath.num(c.y precision))))
414
+ def relTok4:string (EvgTracePath.pair("q" "" (EvgTracePath.num((c.x1 - cx) precision)) (EvgTracePath.num((c.y1 - cy) precision))))
415
+ relTok4 = (EvgTracePath.pair(relTok4 (EvgTracePath.lastNum(relTok4)) (EvgTracePath.num((c.x - cx) precision)) (EvgTracePath.num((c.y - cy) precision))))
416
+ if ((strlen relTok4) < (strlen absTok4)) {
417
+ d = (d + relTok4)
418
+ } {
419
+ d = (d + absTok4)
420
+ }
421
+ cx = c.x
422
+ cy = c.y
423
+ smooth = false
424
+ }
425
+ if (c.type == "Z") {
426
+ d = (d + "Z")
427
+ cx = sx
428
+ cy = sy
429
+ smooth = false
430
+ }
431
+ i = (i + 1)
432
+ }
433
+ return d
434
+ }
435
+ }