ranger-compiler 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +1064 -20
  2. package/LICENSE +3 -1
  3. package/README.md +123 -28
  4. package/dist/Lang.rgr +1188 -290
  5. package/dist/api.d.ts +2343 -879
  6. package/dist/api.js +79923 -56921
  7. package/dist/lib/JSON.rgr +102 -91
  8. package/dist/lib/Shell.rgr +4 -4
  9. package/dist/lib/apple/AppleToolchain.rgr +4 -4
  10. package/dist/lib/apple/README.md +5 -4
  11. package/dist/lib/apple/apple_test.rgr +1 -1
  12. package/dist/lib/core/README.md +1 -1
  13. package/dist/lib/evg/EVG.rgr +12 -0
  14. package/dist/lib/evg/EVGA11yFromTree.rgr +302 -0
  15. package/dist/lib/evg/EVGA11yTree.rgr +894 -0
  16. package/dist/lib/evg/EVGBox.rgr +267 -0
  17. package/dist/lib/evg/EVGBoxShorthandTest.rgr +220 -0
  18. package/dist/lib/evg/EVGCodepoint.rgr +316 -0
  19. package/dist/lib/evg/EVGColor.rgr +700 -0
  20. package/dist/lib/evg/EVGCommands.rgr +177 -0
  21. package/dist/lib/evg/EVGComponent.rgr +331 -0
  22. package/dist/lib/evg/EVGComponentTest.rgr +387 -0
  23. package/dist/lib/evg/EVGConnector.rgr +541 -0
  24. package/dist/lib/evg/EVGConnectorTest.rgr +306 -0
  25. package/dist/lib/evg/EVGDisplayList.rgr +4186 -0
  26. package/dist/lib/evg/EVGEasing.rgr +370 -0
  27. package/dist/lib/evg/EVGEffectTest.rgr +253 -0
  28. package/dist/lib/evg/EVGElement.rgr +4914 -0
  29. package/dist/lib/evg/EVGFixedTest.rgr +289 -0
  30. package/dist/lib/evg/EVGFlexRulesTest.rgr +317 -0
  31. package/dist/lib/evg/EVGFlexWrapTest.rgr +246 -0
  32. package/dist/lib/evg/EVGFling.rgr +244 -0
  33. package/dist/lib/evg/EVGFocus.rgr +400 -0
  34. package/dist/lib/evg/EVGFocusTest.rgr +399 -0
  35. package/dist/lib/evg/EVGGradient.rgr +322 -0
  36. package/dist/lib/evg/EVGGrapheme.rgr +190 -0
  37. package/dist/lib/evg/EVGGrid.rgr +975 -0
  38. package/dist/lib/evg/EVGHitTest.rgr +208 -0
  39. package/dist/lib/evg/EVGHoles.rgr +294 -0
  40. package/dist/lib/evg/EVGHostMeasurerTest.rgr +281 -0
  41. package/dist/lib/evg/EVGHostTextMeasurer.rgr +331 -0
  42. package/dist/lib/evg/EVGHostTree.rgr +834 -0
  43. package/dist/lib/evg/EVGHostTreeTest.rgr +447 -0
  44. package/dist/lib/evg/EVGImageDecode.rgr +117 -0
  45. package/dist/lib/evg/EVGImageMeasurer.rgr +86 -0
  46. package/dist/lib/evg/EVGInspect.rgr +883 -0
  47. package/dist/lib/evg/EVGInvalidateTest.rgr +432 -0
  48. package/dist/lib/evg/EVGJsonTest.rgr +535 -0
  49. package/dist/lib/evg/EVGLayout.rgr +4220 -0
  50. package/dist/lib/evg/EVGMeasure.rgr +1267 -0
  51. package/dist/lib/evg/EVGOverlayTest.rgr +626 -0
  52. package/dist/lib/evg/EVGPatch.rgr +1721 -0
  53. package/dist/lib/evg/EVGPatchTest.rgr +692 -0
  54. package/dist/lib/evg/EVGPopoverTest.rgr +395 -0
  55. package/dist/lib/evg/EVGReconcile.rgr +226 -0
  56. package/dist/lib/evg/EVGReconcileTest.rgr +421 -0
  57. package/dist/lib/evg/EVGReject.rgr +126 -0
  58. package/dist/lib/evg/EVGRelayoutTest.rgr +375 -0
  59. package/dist/lib/evg/EVGRtlLayoutTest.rgr +319 -0
  60. package/dist/lib/evg/EVGRuler.rgr +232 -0
  61. package/dist/lib/evg/EVGRulerTest.rgr +172 -0
  62. package/dist/lib/evg/EVGSelectChrome.rgr +178 -0
  63. package/dist/lib/evg/EVGStyleCacheTest.rgr +419 -0
  64. package/dist/lib/evg/EVGStyleSheet.rgr +2148 -0
  65. package/dist/lib/evg/EVGStyleStateTest.rgr +407 -0
  66. package/dist/lib/evg/EVGStyleVarTest.rgr +471 -0
  67. package/dist/lib/evg/EVGText.rgr +105 -0
  68. package/dist/lib/evg/EVGTextEngine.rgr +536 -0
  69. package/dist/lib/evg/EVGTextMeasurer.rgr +720 -0
  70. package/dist/lib/evg/EVGTimingTest.rgr +1417 -0
  71. package/dist/lib/evg/EVGToolbar.rgr +1369 -0
  72. package/dist/lib/evg/EVGTransition.rgr +728 -0
  73. package/dist/lib/evg/EVGTreeJson.rgr +721 -0
  74. package/dist/lib/evg/EVGUnit.rgr +554 -0
  75. package/dist/lib/evg/EVGViewportUnitTest.rgr +236 -0
  76. package/dist/lib/evg/EvgApp.rgr +189 -0
  77. package/dist/lib/evg/EvgBitmapTracer.rgr +4277 -0
  78. package/dist/lib/evg/EvgBitmapTracerTest.rgr +2119 -0
  79. package/dist/lib/evg/EvgHost.rgr +451 -0
  80. package/dist/lib/evg/EvgTest.rgr +91 -0
  81. package/dist/lib/evg/EvgTraceColor.rgr +236 -0
  82. package/dist/lib/evg/EvgTraceCurve.rgr +648 -0
  83. package/dist/lib/evg/EvgTraceFit.rgr +767 -0
  84. package/dist/lib/evg/EvgTracePath.rgr +435 -0
  85. package/dist/lib/evg/EvgTraceTypes.rgr +559 -0
  86. package/dist/lib/evg/EvgViewport.rgr +313 -0
  87. package/dist/lib/evg/FxDemoDoc.rgr +185 -0
  88. package/dist/lib/evg/HOSTS.md +227 -0
  89. package/dist/lib/evg/ISSUES.md +835 -0
  90. package/dist/lib/evg/PLAN_ACCESSIBILITY.md +650 -0
  91. package/dist/lib/evg/PLAN_CSS_LAYOUT_AND_FONTS.md +1124 -0
  92. package/dist/lib/evg/PLAN_EFFECTS.md +431 -0
  93. package/dist/lib/evg/PLAN_EVG.md +518 -0
  94. package/dist/lib/evg/PLAN_EVG_RENDERER.md +1674 -0
  95. package/dist/lib/evg/PLAN_INSPECTOR.md +788 -0
  96. package/dist/lib/evg/PLAN_LINKS_AND_FORMS.md +157 -0
  97. package/dist/lib/evg/PLAN_NATIVE_HOSTS.md +671 -0
  98. package/dist/lib/evg/PLAN_VECTOR_IR.md +664 -0
  99. package/dist/lib/evg/PLAN_VIEW_TRANSFORM.md +322 -0
  100. package/dist/lib/evg/PathBuilder.rgr +333 -0
  101. package/dist/lib/evg/README.md +1236 -0
  102. package/dist/lib/evg/SPEC.md +1252 -0
  103. package/dist/lib/evg/SVGPathParser.rgr +1199 -0
  104. package/dist/lib/evg/SvgParser.rgr +1736 -0
  105. package/dist/lib/evg/TODO_EVG_RENDERER.md +595 -0
  106. package/dist/lib/evg/VectorShapes.rgr +331 -0
  107. package/dist/lib/evg/VectorStroke.rgr +107 -0
  108. package/dist/lib/evg/VectorViewBox.rgr +380 -0
  109. package/dist/lib/evg/agent/README.md +290 -0
  110. package/dist/lib/evg/agent/evg_agent.rgr +899 -0
  111. package/dist/lib/evg/agent/fixtures/broken.evg.json +7 -0
  112. package/dist/lib/evg/agent/fixtures/card.evg.json +9 -0
  113. package/dist/lib/evg/agent/fixtures/connector.css +63 -0
  114. package/dist/lib/evg/agent/fixtures/connector.evg.json +14 -0
  115. package/dist/lib/evg/agent/fixtures/drawn.evg.json +129 -0
  116. package/dist/lib/evg/agent/fixtures/gradient.evg.json +4 -0
  117. package/dist/lib/evg/agent/fixtures/popover.css +99 -0
  118. package/dist/lib/evg/agent/fixtures/popover.evg.json +30 -0
  119. package/dist/lib/evg/agent/roundtrip.sh +74 -0
  120. package/dist/lib/evg/agent/smoke.sh +230 -0
  121. package/dist/lib/evg/android/README.md +97 -0
  122. package/dist/lib/evg/android/androidstubs/AndroidStubs.kt +175 -0
  123. package/dist/lib/evg/android/androidstubs/Annotation.kt +10 -0
  124. package/dist/lib/evg/android/androidstubs/App.kt +30 -0
  125. package/dist/lib/evg/android/androidstubs/Content.kt +41 -0
  126. package/dist/lib/evg/android/androidstubs/ContentRes.kt +12 -0
  127. package/dist/lib/evg/android/androidstubs/InputMethod.kt +46 -0
  128. package/dist/lib/evg/android/androidstubs/Net.kt +6 -0
  129. package/dist/lib/evg/android/androidstubs/Os.kt +30 -0
  130. package/dist/lib/evg/android/androidstubs/Util.kt +15 -0
  131. package/dist/lib/evg/android/androidstubs/View.kt +113 -0
  132. package/dist/lib/evg/android/androidstubs/Widget.kt +16 -0
  133. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidEvgSurface.kt +323 -0
  134. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidTextMeasurer.kt +56 -0
  135. package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/RippleEffect.kt +262 -0
  136. package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtEvgSurface.kt +238 -0
  137. package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtTextMeasurer.kt +85 -0
  138. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgEngineThread.kt +115 -0
  139. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgPainter.kt +231 -0
  140. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgSurface.kt +117 -0
  141. package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/RecordingSurface.kt +94 -0
  142. package/dist/lib/evg/apple/README.md +128 -0
  143. package/dist/lib/evg/apple/Sources/CoreGraphicsEvgSurface.swift +329 -0
  144. package/dist/lib/evg/apple/Sources/CoreTextMeasurer.swift +70 -0
  145. package/dist/lib/evg/apple/Sources/EvgEngineQueue.swift +105 -0
  146. package/dist/lib/evg/apple/Sources/EvgPainter.swift +225 -0
  147. package/dist/lib/evg/apple/Sources/EvgSurface.swift +163 -0
  148. package/dist/lib/evg/apple/Sources/RecordingSurface.swift +110 -0
  149. package/dist/lib/evg/bench/EvgLayoutBench.rgr +34 -0
  150. package/dist/lib/evg/bench/README.md +64 -0
  151. package/dist/lib/evg/bench/layout-bench.mjs +316 -0
  152. package/dist/lib/evg/bench/layout-cases.mjs +510 -0
  153. package/dist/lib/evg/bench/layout-conformance.mjs +254 -0
  154. package/dist/lib/evg/bin/.gitignore +17 -0
  155. package/dist/lib/evg/evg_test.rgr +313 -0
  156. package/dist/lib/evg/gl/README.md +198 -0
  157. package/dist/lib/evg/gl/a11y-paint-check.mjs +73 -0
  158. package/dist/lib/evg/gl/blur-check.mjs +399 -0
  159. package/dist/lib/evg/gl/boxmodel.json +1 -0
  160. package/dist/lib/evg/gl/demo.html +46 -0
  161. package/dist/lib/evg/gl/effect-presets.css +285 -0
  162. package/dist/lib/evg/gl/effect-presets.js +63 -0
  163. package/dist/lib/evg/gl/effect-shots.mjs +135 -0
  164. package/dist/lib/evg/gl/evg-a11y.js +566 -0
  165. package/dist/lib/evg/gl/evg-binary.js +160 -0
  166. package/dist/lib/evg/gl/evg-engine.js +296 -0
  167. package/dist/lib/evg/gl/evg-fx.js +237 -0
  168. package/dist/lib/evg/gl/evg-gestures.js +209 -0
  169. package/dist/lib/evg/gl/evg-list.js +167 -0
  170. package/dist/lib/evg/gl/evg-measure.js +186 -0
  171. package/dist/lib/evg/gl/evg-textinput.js +303 -0
  172. package/dist/lib/evg/gl/evg-view.js +144 -0
  173. package/dist/lib/evg/gl/evg-webgl.js +3942 -0
  174. package/dist/lib/evg/gl/fx-check.mjs +998 -0
  175. package/dist/lib/evg/gl/fx-demo.html +166 -0
  176. package/dist/lib/evg/gl/fx-demo.js +2 -0
  177. package/dist/lib/evg/gl/fx-serve.mjs +47 -0
  178. package/dist/lib/evg/gl/gestures-check.mjs +189 -0
  179. package/dist/lib/evg/gl/list-binary-check.mjs +152 -0
  180. package/dist/lib/evg/gl/measure-check.mjs +135 -0
  181. package/dist/lib/evg/gl/rotation-check.mjs +207 -0
  182. package/dist/lib/evg/gl/shift-check.mjs +113 -0
  183. package/dist/lib/evg/gl/stroke-check.mjs +168 -0
  184. package/dist/lib/evg/gl/text-snap-check.mjs +139 -0
  185. package/dist/lib/evg/gl/view-check.mjs +343 -0
  186. package/dist/lib/evg/gl/view-policy-check.mjs +184 -0
  187. package/dist/lib/evg/html/evg-dom.js +318 -0
  188. package/dist/lib/evg/html/evg-html.js +600 -0
  189. package/dist/lib/evg/inspect/README.md +415 -0
  190. package/dist/lib/evg/inspect/browser-smoke.mjs +115 -0
  191. package/dist/lib/evg/inspect/evg-inspect.js +947 -0
  192. package/dist/lib/evg/inspect/shots/css.png +0 -0
  193. package/dist/lib/evg/inspect/shots/dashboard.png +0 -0
  194. package/dist/lib/evg/inspect/shots/pptx-slide.png +0 -0
  195. package/dist/lib/evg/inspect/shots/state.png +0 -0
  196. package/dist/lib/evg/inspect/shots.mjs +226 -0
  197. package/dist/lib/evg/oracle/css-blur.json +576 -0
  198. package/dist/lib/evg/oracle/css-box.json +157 -0
  199. package/dist/lib/evg/oracle/css-timing.json +709 -0
  200. package/dist/lib/evg/oracle/css_blur_oracle.mjs +529 -0
  201. package/dist/lib/evg/oracle/css_box_oracle.mjs +106 -0
  202. package/dist/lib/evg/oracle/css_timing_oracle.mjs +389 -0
  203. package/dist/lib/evg/original/EVGColor.clj +310 -0
  204. package/dist/lib/evg/original/EVGColorContext.rgr +178 -0
  205. package/dist/lib/evg/original/SVGPath.rgr +627 -0
  206. package/dist/lib/evg/original/Vec2.crgr +103 -0
  207. package/dist/lib/evg/ranger.json +9 -0
  208. package/dist/lib/evg/showcase/README.md +246 -0
  209. package/dist/lib/evg/showcase/assets/emblem.svg +30 -0
  210. package/dist/lib/evg/showcase/assets/rosette.svg +22 -0
  211. package/dist/lib/evg/showcase/build.mjs +651 -0
  212. package/dist/lib/evg/showcase/pages/album.tsx +30 -0
  213. package/dist/lib/evg/showcase/pages/boxmodel.tsx +37 -0
  214. package/dist/lib/evg/showcase/pages/cards.tsx +41 -0
  215. package/dist/lib/evg/showcase/pages/chart_api.tsx +170 -0
  216. package/dist/lib/evg/showcase/pages/charts.tsx +219 -0
  217. package/dist/lib/evg/showcase/pages/drawing.tsx +160 -0
  218. package/dist/lib/evg/showcase/pages/emoji.tsx +91 -0
  219. package/dist/lib/evg/showcase/pages/flex.tsx +46 -0
  220. package/dist/lib/evg/showcase/pages/more.tsx +332 -0
  221. package/dist/lib/evg/showcase/pages/plots.tsx +262 -0
  222. package/dist/lib/evg/showcase/pages/svg.tsx +63 -0
  223. package/dist/lib/evg/showcase/pages/tables.tsx +209 -0
  224. package/dist/lib/evg/showcase/pages/typography.tsx +43 -0
  225. package/dist/lib/evg/showcase/pages/units.tsx +35 -0
  226. package/dist/lib/evg/showcase/pages/variants.tsx +233 -0
  227. package/dist/lib/evg/showcase/pages/vector.tsx +75 -0
  228. package/dist/lib/evg/showcase/pages/views.tsx +223 -0
  229. package/dist/lib/evg/showcase/tests/chart_api_smoke.mjs +339 -0
  230. package/dist/lib/evg/showcase/tests/gl_smoke.mjs +125 -0
  231. package/dist/lib/evg/showcase/themes/chart_api-default.css +15 -0
  232. package/dist/lib/evg/showcase/themes/charts-default.css +29 -0
  233. package/dist/lib/evg/showcase/themes/drawing-default.css +35 -0
  234. package/dist/lib/evg/showcase/themes/more-default.css +128 -0
  235. package/dist/lib/evg/showcase/themes/plots-default.css +18 -0
  236. package/dist/lib/evg/showcase/themes/showcase.css +508 -0
  237. package/dist/lib/evg/showcase/themes/tables-default.css +123 -0
  238. package/dist/lib/evg/showcase/themes/variants-default.css +15 -0
  239. package/dist/lib/evg/showcase/themes/views-default.css +15 -0
  240. package/dist/lib/evg/tools/bench_vs_potrace.mjs +290 -0
  241. package/dist/lib/evg/tools/evg_image_tool.rgr +488 -0
  242. package/dist/lib/evg/tools/evg_trace_bench.rgr +114 -0
  243. package/dist/lib/evg/tools/evg_trace_cli.rgr +662 -0
  244. package/dist/lib/evg/tools/evg_trace_cpp_bench.rgr +83 -0
  245. package/dist/lib/evg/tools/run_trace_bench.sh +74 -0
  246. package/dist/lib/evg/tools/run_trace_cli_smoke.sh +128 -0
  247. package/dist/lib/evg/web/responsive/EvgResponsiveCheck.rgr +271 -0
  248. package/dist/lib/evg/web/responsive/EvgResponsiveDemo.rgr +531 -0
  249. package/dist/lib/evg/web/responsive/README.md +97 -0
  250. package/dist/lib/evg/web/responsive/build.mjs +90 -0
  251. package/dist/lib/evg/web/responsive/dom-check.mjs +169 -0
  252. package/dist/lib/evg/web/responsive/index.html +177 -0
  253. package/dist/lib/evg/web/responsive/smoke.mjs +221 -0
  254. package/dist/lib/evg/web/tools/assets-client.mjs +95 -0
  255. package/dist/lib/evg/web/tools/boot-bench.mjs +189 -0
  256. package/dist/lib/evg/web/tools/inline-assets.mjs +119 -0
  257. package/dist/lib/evg/web/tools/minify.mjs +60 -0
  258. package/dist/lib/evg/web/tracer/build.mjs +87 -0
  259. package/dist/lib/evg/web/tracer/index.html +2805 -0
  260. package/dist/lib/evg/web/tracer/sample.png +0 -0
  261. package/dist/lib/evg/web/tracer/smoke.mjs +1162 -0
  262. package/dist/lib/evgr/Cargo.lock +21 -0
  263. package/dist/lib/evgr/Cargo.toml +19 -0
  264. package/dist/lib/evgr/README.md +140 -0
  265. package/dist/lib/evgr/bench/NativeBench.rgr +246 -0
  266. package/dist/lib/evgr/bench/compare.mjs +252 -0
  267. package/dist/lib/evgr/bench/speed.mjs +277 -0
  268. package/dist/lib/evgr/bin/.gitignore +3 -0
  269. package/dist/lib/evgr/src/bin/bench.rs +106 -0
  270. package/dist/lib/evgr/src/bin/smoke.rs +13 -0
  271. package/dist/lib/evgr/src/grid.rs +730 -0
  272. package/dist/lib/evgr/src/lib.rs +1003 -0
  273. package/dist/lib/evgr/src/style.rs +468 -0
  274. package/dist/lib/evgr/src/text.rs +83 -0
  275. package/dist/lib/image/BitReader.rgr +171 -0
  276. package/dist/lib/image/Buffer.rgr +173 -0
  277. package/dist/lib/image/DCT.rgr +283 -0
  278. package/dist/lib/image/Deflate.rgr +339 -0
  279. package/dist/lib/image/HuffmanDecoder.rgr +181 -0
  280. package/dist/lib/image/ImageBuffer.rgr +706 -0
  281. package/dist/lib/image/JPEGDecoder.rgr +808 -0
  282. package/dist/lib/image/PNGDecoder.rgr +544 -0
  283. package/dist/lib/image/PNGEncoder.rgr +388 -0
  284. package/dist/lib/image/PPMImage.rgr +224 -0
  285. package/dist/lib/image/ProgressiveJPEGDecoder.rgr +1154 -0
  286. package/dist/lib/image/README.md +33 -0
  287. package/dist/lib/image/RasterBuffer.rgr +294 -0
  288. package/dist/lib/image/VP8BoolDecoder.rgr +163 -0
  289. package/dist/lib/image/WebPDecoder.rgr +433 -0
  290. package/dist/lib/image/WebPLossless.rgr +1035 -0
  291. package/dist/lib/image/WebPLossy.rgr +1929 -0
  292. package/dist/lib/image/ranger.json +9 -0
  293. package/dist/lib/image/testdata/webp/anim_2f_24x16.webp +0 -0
  294. package/dist/lib/image/testdata/webp/fixtures.txt +33 -0
  295. package/dist/lib/image/testdata/webp/gen_fixtures.py +261 -0
  296. package/dist/lib/image/testdata/webp/ll_1x1.webp +0 -0
  297. package/dist/lib/image/testdata/webp/ll_alpha_29x21.webp +0 -0
  298. package/dist/lib/image/testdata/webp/ll_gradient_64x64.webp +0 -0
  299. package/dist/lib/image/testdata/webp/ll_meta_32x32.webp +0 -0
  300. package/dist/lib/image/testdata/webp/ll_noise_17x9.webp +0 -0
  301. package/dist/lib/image/testdata/webp/ll_pal11_23x11.webp +0 -0
  302. package/dist/lib/image/testdata/webp/ll_pal2_19x7.webp +0 -0
  303. package/dist/lib/image/testdata/webp/ll_pal40_16x16.webp +0 -0
  304. package/dist/lib/image/testdata/webp/ll_pal4_13x5.webp +0 -0
  305. package/dist/lib/image/testdata/webp/ll_photo_40x30.webp +0 -0
  306. package/dist/lib/image/testdata/webp/ll_predictors_64x32.webp +0 -0
  307. package/dist/lib/image/testdata/webp/ly_1x1.webp +0 -0
  308. package/dist/lib/image/testdata/webp/ly_alph_raw_f0_21x13.webp +0 -0
  309. package/dist/lib/image/testdata/webp/ly_alph_raw_f1_21x13.webp +0 -0
  310. package/dist/lib/image/testdata/webp/ly_alph_raw_f2_21x13.webp +0 -0
  311. package/dist/lib/image/testdata/webp/ly_alph_raw_f3_21x13.webp +0 -0
  312. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f0_21x13.webp +0 -0
  313. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f1_21x13.webp +0 -0
  314. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f2_21x13.webp +0 -0
  315. package/dist/lib/image/testdata/webp/ly_alph_vp8l_f3_21x13.webp +0 -0
  316. package/dist/lib/image/testdata/webp/ly_alpha_33x17.webp +0 -0
  317. package/dist/lib/image/testdata/webp/ly_exif_15x11.webp +0 -0
  318. package/dist/lib/image/testdata/webp/ly_i16_96x80.webp +0 -0
  319. package/dist/lib/image/testdata/webp/ly_nofilter_24x20.webp +0 -0
  320. package/dist/lib/image/testdata/webp/ly_odd_17x9.webp +0 -0
  321. package/dist/lib/image/testdata/webp/ly_photo_48x40.webp +0 -0
  322. package/dist/lib/image/testdata/webp/ly_q100_20x18.webp +0 -0
  323. package/dist/lib/image/testdata/webp/ly_sharp_40x36.webp +0 -0
  324. package/dist/lib/image/testdata/webp/ly_simple_filter_33x31.webp +0 -0
  325. package/dist/lib/image/testdata/webp/ly_vpx_parts8_37x45.webp +0 -0
  326. package/dist/lib/image/testdata/webp/ly_vpx_skip_96x80.webp +0 -0
  327. package/dist/lib/image/tests/WebPDecodeTool.rgr +81 -0
  328. package/dist/lib/image/tests/WebPDecoderTest.rgr +1162 -0
  329. package/dist/lib/image/tests/run_webp_tests.sh +39 -0
  330. package/dist/lib/rust/RsJson.rgr +468 -0
  331. package/dist/lib/rust/RsPrelude.rgr +1663 -0
  332. package/dist/lib/shell_test.rgr +7 -7
  333. package/dist/lib/stdlib.rgr +21 -5
  334. package/dist/lib/zip/ranger.json +6 -0
  335. package/dist/rgrc.js +87318 -67610
  336. package/package.json +1010 -1040
  337. package/dist/README.md +0 -117
  338. package/dist/package.json +0 -47
@@ -0,0 +1,339 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; ==============================================================================
4
+ ; Deflate.rgr — DEFLATE, fixed Huffman, for the PNG writer.
5
+ ; ==============================================================================
6
+ ;
7
+ ; Every PNG this repository has ever written was STORED — deflate block type 0,
8
+ ; which is deflate's way of saying "here are the bytes again". A 900x560
9
+ ; screenshot came out at 1.5 MB, and a chart copied to the clipboard carried a
10
+ ; megabyte of base64 into whatever document it was pasted into. The files were
11
+ ; correct and every decoder read them; they were just as large as the raw
12
+ ; pixels.
13
+ ;
14
+ ; This is the smallest thing that fixes that honestly: LZ77 matching against a
15
+ ; hash of the last three bytes, emitted with the FIXED Huffman code (block type
16
+ ; 1). No dynamic code tables — those buy another 10-20% on top and need a
17
+ ; second pass and a code-length tree, which is a lot of machinery for a
18
+ ; screenshot. What this gets on flat, repetitive images — which charts and
19
+ ; spreadsheets are — is roughly a tenth of the stored size.
20
+ ;
21
+ ; The output is ordinary deflate, so the check is not "does our decoder like
22
+ ; it": `tools/check_png.py` hands every PNG we write to Python's zlib.
23
+ ;
24
+ ; Bit order, which is where a deflate implementation usually goes wrong:
25
+ ; * Huffman codes are packed most-significant bit FIRST
26
+ ; * everything else — headers, extra bits — is packed least-significant first
27
+ ; ==============================================================================
28
+
29
+ Import "Buffer.rgr"
30
+
31
+ class DeflateWriter {
32
+ def out:GrowableBuffer (new GrowableBuffer)
33
+ def acc:int 0
34
+ def nbits:int 0
35
+
36
+ Constructor () {
37
+ }
38
+
39
+ fn putBit:void (b:int) {
40
+ if (b != 0) {
41
+ acc = (bit_or acc (bit_shl 1 nbits))
42
+ }
43
+ nbits = (nbits + 1)
44
+ if (nbits == 8) {
45
+ out.writeByte(acc)
46
+ acc = 0
47
+ nbits = 0
48
+ }
49
+ }
50
+
51
+ ; Header fields and extra bits: least significant bit first.
52
+ fn bits:void (value:int count:int) {
53
+ def i:int 0
54
+ while (i < count) {
55
+ this.putBit((bit_and (bit_shr value i) 1))
56
+ i = (i + 1)
57
+ }
58
+ }
59
+
60
+ ; A Huffman code: most significant bit first.
61
+ fn huff:void (code:int count:int) {
62
+ def i:int (count - 1)
63
+ while (i >= 0) {
64
+ this.putBit((bit_and (bit_shr code i) 1))
65
+ i = (i - 1)
66
+ }
67
+ }
68
+
69
+ fn align:void () {
70
+ while (nbits != 0) {
71
+ this.putBit(0)
72
+ }
73
+ }
74
+ }
75
+
76
+ class Deflate {
77
+ ; Length codes 257..285 and distance codes 0..29, as the RFC tabulates
78
+ ; them. Built once per compressor rather than written out as literals in
79
+ ; the emit loop, where a typo would be a corrupt stream nobody could read.
80
+ def lenBase:[int]
81
+ def lenExtra:[int]
82
+ def distBase:[int]
83
+ def distExtra:[int]
84
+ ; Where the last occurrence of each three-byte sequence was seen. One slot
85
+ ; per hash, no chains: the most recent match is the one a run of identical
86
+ ; pixels wants anyway, and walking a chain to find a better one costs more
87
+ ; than it saves on the images this writes.
88
+ def head:[int]
89
+ def hashBits:int 15
90
+ def hashSize:int 32768
91
+
92
+ Constructor () {
93
+ push lenBase 3
94
+ push lenBase 4
95
+ push lenBase 5
96
+ push lenBase 6
97
+ push lenBase 7
98
+ push lenBase 8
99
+ push lenBase 9
100
+ push lenBase 10
101
+ push lenBase 11
102
+ push lenBase 13
103
+ push lenBase 15
104
+ push lenBase 17
105
+ push lenBase 19
106
+ push lenBase 23
107
+ push lenBase 27
108
+ push lenBase 31
109
+ push lenBase 35
110
+ push lenBase 43
111
+ push lenBase 51
112
+ push lenBase 59
113
+ push lenBase 67
114
+ push lenBase 83
115
+ push lenBase 99
116
+ push lenBase 115
117
+ push lenBase 131
118
+ push lenBase 163
119
+ push lenBase 195
120
+ push lenBase 227
121
+ push lenBase 258
122
+ push lenExtra 0
123
+ push lenExtra 0
124
+ push lenExtra 0
125
+ push lenExtra 0
126
+ push lenExtra 0
127
+ push lenExtra 0
128
+ push lenExtra 0
129
+ push lenExtra 0
130
+ push lenExtra 1
131
+ push lenExtra 1
132
+ push lenExtra 1
133
+ push lenExtra 1
134
+ push lenExtra 2
135
+ push lenExtra 2
136
+ push lenExtra 2
137
+ push lenExtra 2
138
+ push lenExtra 3
139
+ push lenExtra 3
140
+ push lenExtra 3
141
+ push lenExtra 3
142
+ push lenExtra 4
143
+ push lenExtra 4
144
+ push lenExtra 4
145
+ push lenExtra 4
146
+ push lenExtra 5
147
+ push lenExtra 5
148
+ push lenExtra 5
149
+ push lenExtra 5
150
+ push lenExtra 0
151
+ push distBase 1
152
+ push distBase 2
153
+ push distBase 3
154
+ push distBase 4
155
+ push distBase 5
156
+ push distBase 7
157
+ push distBase 9
158
+ push distBase 13
159
+ push distBase 17
160
+ push distBase 25
161
+ push distBase 33
162
+ push distBase 49
163
+ push distBase 65
164
+ push distBase 97
165
+ push distBase 129
166
+ push distBase 193
167
+ push distBase 257
168
+ push distBase 385
169
+ push distBase 513
170
+ push distBase 769
171
+ push distBase 1025
172
+ push distBase 1537
173
+ push distBase 2049
174
+ push distBase 3073
175
+ push distBase 4097
176
+ push distBase 6145
177
+ push distBase 8193
178
+ push distBase 12289
179
+ push distBase 16385
180
+ push distBase 24577
181
+ push distExtra 0
182
+ push distExtra 0
183
+ push distExtra 0
184
+ push distExtra 0
185
+ push distExtra 1
186
+ push distExtra 1
187
+ push distExtra 2
188
+ push distExtra 2
189
+ push distExtra 3
190
+ push distExtra 3
191
+ push distExtra 4
192
+ push distExtra 4
193
+ push distExtra 5
194
+ push distExtra 5
195
+ push distExtra 6
196
+ push distExtra 6
197
+ push distExtra 7
198
+ push distExtra 7
199
+ push distExtra 8
200
+ push distExtra 8
201
+ push distExtra 9
202
+ push distExtra 9
203
+ push distExtra 10
204
+ push distExtra 10
205
+ push distExtra 11
206
+ push distExtra 11
207
+ push distExtra 12
208
+ push distExtra 12
209
+ push distExtra 13
210
+ push distExtra 13
211
+ }
212
+
213
+ ; The fixed literal/length code for one symbol, written straight out.
214
+ fn literal:void (w:DeflateWriter sym:int) {
215
+ if (sym < 144) {
216
+ w.huff((48 + sym) 8)
217
+ return
218
+ }
219
+ if (sym < 256) {
220
+ w.huff((400 + (sym - 144)) 9)
221
+ return
222
+ }
223
+ if (sym < 280) {
224
+ w.huff((sym - 256) 7)
225
+ return
226
+ }
227
+ w.huff((192 + (sym - 280)) 8)
228
+ }
229
+
230
+ fn lengthSlot:int (len:int) {
231
+ def i:int 28
232
+ while (i > 0) {
233
+ def base:int (itemAt lenBase i)
234
+ if (len >= base) {
235
+ return i
236
+ }
237
+ i = (i - 1)
238
+ }
239
+ return 0
240
+ }
241
+
242
+ fn distSlot:int (dist:int) {
243
+ def i:int 29
244
+ while (i > 0) {
245
+ def base:int (itemAt distBase i)
246
+ if (dist >= base) {
247
+ return i
248
+ }
249
+ i = (i - 1)
250
+ }
251
+ return 0
252
+ }
253
+
254
+ fn emitMatch:void (w:DeflateWriter len:int dist:int) {
255
+ def ls:int (this.lengthSlot(len))
256
+ this.literal(w (257 + ls))
257
+ def lx:int (itemAt lenExtra ls)
258
+ if (lx > 0) {
259
+ w.bits((len - (itemAt lenBase ls)) lx)
260
+ }
261
+ def ds:int (this.distSlot(dist))
262
+ ; Distance codes are five bits, fixed width, most significant first.
263
+ w.huff(ds 5)
264
+ def dx:int (itemAt distExtra ds)
265
+ if (dx > 0) {
266
+ w.bits((dist - (itemAt distBase ds)) dx)
267
+ }
268
+ }
269
+
270
+ sfn hash3:int (a:int b:int c:int) {
271
+ def h:int (bit_and (((a * 7853) + (b * 271)) + c) 32767)
272
+ return h
273
+ }
274
+
275
+ ; One fixed-Huffman block over the whole input. `w` is left byte-aligned.
276
+ fn compress:void (src:buffer n:int w:DeflateWriter) {
277
+ clear head
278
+ def i:int 0
279
+ while (i < hashSize) {
280
+ push head -1
281
+ i = (i + 1)
282
+ }
283
+ ; BFINAL = 1, BTYPE = 01 (fixed Huffman)
284
+ w.bits(1 1)
285
+ w.bits(1 2)
286
+
287
+ def pos:int 0
288
+ while (pos < n) {
289
+ def bestLen:int 0
290
+ def bestDist:int 0
291
+ if ((pos + 3) <= n) {
292
+ def h:int (Deflate.hash3((buffer_get src pos) (buffer_get src (pos + 1)) (buffer_get src (pos + 2))))
293
+ def cand:int (itemAt head h)
294
+ set head h pos
295
+ if (cand >= 0) {
296
+ def dist:int (pos - cand)
297
+ if ((dist > 0) && (dist <= 32768)) {
298
+ def maxLen:int (n - pos)
299
+ if (maxLen > 258) {
300
+ maxLen = 258
301
+ }
302
+ def k:int 0
303
+ while (k < maxLen) {
304
+ if ((buffer_get src (cand + k)) != (buffer_get src (pos + k))) {
305
+ break
306
+ }
307
+ k = (k + 1)
308
+ }
309
+ if (k >= 3) {
310
+ bestLen = k
311
+ bestDist = dist
312
+ }
313
+ }
314
+ }
315
+ }
316
+ if (bestLen >= 3) {
317
+ this.emitMatch(w bestLen bestDist)
318
+ ; Every position inside the match still wants to be findable
319
+ ; later, or the next run starts from nothing.
320
+ def j:int 1
321
+ while (j < bestLen) {
322
+ def at:int (pos + j)
323
+ if ((at + 3) <= n) {
324
+ def h2:int (Deflate.hash3((buffer_get src at) (buffer_get src (at + 1)) (buffer_get src (at + 2))))
325
+ set head h2 at
326
+ }
327
+ j = (j + 1)
328
+ }
329
+ pos = (pos + bestLen)
330
+ } {
331
+ this.literal(w (buffer_get src pos))
332
+ pos = (pos + 1)
333
+ }
334
+ }
335
+ ; End of block, then pad to a byte so the adler can follow.
336
+ this.literal(w 256)
337
+ w.align()
338
+ }
339
+ }
@@ -0,0 +1,181 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; HuffmanDecoder.rgr - Huffman table building and decoding for JPEG
4
+ ; Updated to use int_buffer for fixed-size arrays (always 16 elements for code lengths 1-16)
5
+
6
+ class HuffmanTable {
7
+ def bits:int_buffer (int_buffer_alloc 16) ; Count of codes at each length (index 0-15 = lengths 1-16)
8
+ def values:[int] ; Symbol values in order (variable size, up to 256)
9
+ def maxCode:int_buffer (int_buffer_alloc 16) ; Max code value for each length
10
+ def minCode:int_buffer (int_buffer_alloc 16) ; Min code value for each length
11
+ def valPtr:int_buffer (int_buffer_alloc 16) ; Index into values for each length
12
+ def tableClass:int 0 ; 0 = DC, 1 = AC
13
+ def tableId:int 0 ; Table ID (0-3)
14
+
15
+ Constructor () {
16
+ ; Initialize arrays to default values
17
+ def i 0
18
+ while (i < 16) {
19
+ int_buffer_set bits i 0
20
+ int_buffer_set maxCode i -1
21
+ int_buffer_set minCode i 0
22
+ int_buffer_set valPtr i 0
23
+ i = i + 1
24
+ }
25
+ }
26
+
27
+ fn build:void () {
28
+ ; Build decoding tables from bits and values arrays
29
+ ; Generate maxCode, minCode, valPtr for fast decoding
30
+
31
+ def code:int 0
32
+ def valueIdx:int 0
33
+
34
+ def i 0
35
+ while (i < 16) {
36
+ def count:int (int_buffer_get bits i)
37
+ if (count > 0) {
38
+ int_buffer_set minCode i code
39
+ int_buffer_set valPtr i valueIdx
40
+ valueIdx = valueIdx + count
41
+ code = code + count
42
+ int_buffer_set maxCode i (code - 1)
43
+ } {
44
+ int_buffer_set maxCode i -1
45
+ int_buffer_set minCode i 0
46
+ int_buffer_set valPtr i valueIdx
47
+ }
48
+ code = (bit_shl code 1)
49
+ i = i + 1
50
+ }
51
+ }
52
+
53
+ fn decode:int (reader:BitReader) {
54
+ ; Decode one symbol from bit stream
55
+ def code:int 0
56
+ def length:int 0
57
+
58
+ while (length < 16) {
59
+ def bit:int (reader.readBit())
60
+ code = (bit_or (bit_shl code 1) bit)
61
+
62
+ def maxC:int (int_buffer_get maxCode length)
63
+ if (maxC >= 0) {
64
+ if (code <= maxC) {
65
+ ; Found valid code
66
+ def minC:int (int_buffer_get minCode length)
67
+ def ptr:int (int_buffer_get valPtr length)
68
+ def idx:int (ptr + (code - minC))
69
+ return (at values idx)
70
+ }
71
+ }
72
+
73
+ length = length + 1
74
+ }
75
+
76
+ ; Code not found - error
77
+ print "Huffman decode error: code not found"
78
+ return 0
79
+ }
80
+
81
+ fn resetArrays:void () {
82
+ ; Reset fixed-size arrays (for reuse when parsing new DHT)
83
+ def i 0
84
+ while (i < 16) {
85
+ int_buffer_set bits i 0
86
+ int_buffer_set maxCode i -1
87
+ int_buffer_set minCode i 0
88
+ int_buffer_set valPtr i 0
89
+ i = i + 1
90
+ }
91
+ ; Clear dynamic values array
92
+ clear values
93
+ }
94
+ }
95
+
96
+ class HuffmanDecoder {
97
+ ; Say nothing while building tables. Set by whoever owns this decoder -
98
+ ; see JPEGDecoder.quiet, which is the flag a caller actually reaches.
99
+ def quiet:boolean false
100
+ ; DC tables (indexed by table ID)
101
+ def dcTable0:HuffmanTable (new HuffmanTable())
102
+ def dcTable1:HuffmanTable (new HuffmanTable())
103
+ ; AC tables (indexed by table ID)
104
+ def acTable0:HuffmanTable (new HuffmanTable())
105
+ def acTable1:HuffmanTable (new HuffmanTable())
106
+
107
+ Constructor () {
108
+ }
109
+
110
+ fn getDCTable:HuffmanTable (id:int) {
111
+ if (id == 0) {
112
+ return dcTable0
113
+ }
114
+ return dcTable1
115
+ }
116
+
117
+ fn getACTable:HuffmanTable (id:int) {
118
+ if (id == 0) {
119
+ return acTable0
120
+ }
121
+ return acTable1
122
+ }
123
+
124
+ fn parseDHT:void (data:buffer pos:int length:int) {
125
+ ; Parse Define Huffman Table marker
126
+ ; Format: [tableInfo] [bits[16]] [values...]
127
+ ; tableInfo: high nibble = class (0=DC, 1=AC), low nibble = table ID
128
+
129
+ def endPos:int (pos + length)
130
+
131
+ while (pos < endPos) {
132
+ def tableInfo:int (buffer_get data pos)
133
+ pos = pos + 1
134
+
135
+ def tableClass:int (bit_shr tableInfo 4)
136
+ def tableId:int (bit_and tableInfo 15)
137
+
138
+ ; Select target table
139
+ def table:HuffmanTable (this.getDCTable(tableId))
140
+ if (tableClass == 1) {
141
+ table = (this.getACTable(tableId))
142
+ }
143
+
144
+ table.tableClass = tableClass
145
+ table.tableId = tableId
146
+
147
+ ; Reset arrays for this table
148
+ table.resetArrays()
149
+
150
+ ; Read bits array (counts for each code length)
151
+ def totalSymbols:int 0
152
+ def i 0
153
+ while (i < 16) {
154
+ def count:int (buffer_get data pos)
155
+ int_buffer_set table.bits i count
156
+ totalSymbols = totalSymbols + count
157
+ pos = pos + 1
158
+ i = i + 1
159
+ }
160
+
161
+ ; Read symbol values (dynamic array, size varies per table)
162
+ i = 0
163
+ while (i < totalSymbols) {
164
+ push table.values (buffer_get data pos)
165
+ pos = pos + 1
166
+ i = i + 1
167
+ }
168
+
169
+ ; Build decoding structures
170
+ table.build()
171
+
172
+ def classStr "DC"
173
+ if (tableClass == 1) {
174
+ classStr = "AC"
175
+ }
176
+ if (quiet == false) {
177
+ print (" Huffman table " + classStr + (to_string tableId) + ": " + (to_string totalSymbols) + " symbols")
178
+ }
179
+ }
180
+ }
181
+ }