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,39 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ # Runs lib/image/tests/WebPDecoderTest.rgr compiled to JavaScript (node) and
5
+ # to C++17 (g++ or clang++). Fails when a compile fails or any check does.
6
+ #
7
+ # bash lib/image/tests/run_webp_tests.sh
8
+ set -u
9
+ cd "$(dirname "$0")/../../.."
10
+ out=$(mktemp -d)
11
+ trap 'rm -rf "$out"' EXIT
12
+ status=0
13
+
14
+ echo "== JavaScript"
15
+ js=$(bash scripts/rgr-suite.sh lib/image/tests/WebPDecoderTest.rgr "$out" webp_test.js 2>&1)
16
+ echo "$js"
17
+ echo "$js" | grep -q "^ALL PASS" || status=1
18
+
19
+ echo "== C++"
20
+ log=$(node dist/rgrc.js -l=cpp lib/image/tests/WebPDecoderTest.rgr -d="$out" -o=webp_test.cpp 2>&1)
21
+ if echo "$log" | grep -q "Compilation FAILED" || [ ! -f "$out/webp_test.cpp" ]; then
22
+ echo "$log" | grep -B1 -A3 "\[FAIL\]" | head -40
23
+ echo "FAILED to compile WebPDecoderTest.rgr to C++"
24
+ exit 1
25
+ fi
26
+ cxx=""
27
+ for c in g++ clang++; do
28
+ if command -v "$c" > /dev/null 2>&1; then cxx=$c; break; fi
29
+ done
30
+ if [ -z "$cxx" ]; then
31
+ echo "no C++ compiler (g++ or clang++) found"
32
+ exit 1
33
+ fi
34
+ "$cxx" -std=c++17 -O2 -w "$out/webp_test.cpp" -o "$out/webp_test" || exit 1
35
+ cpp=$("$out/webp_test" 2>&1)
36
+ echo "$cpp"
37
+ echo "$cpp" | grep -q "^ALL PASS" || status=1
38
+
39
+ exit $status
@@ -0,0 +1,468 @@
1
+ ; SPDX-License-Identifier: MIT
2
+
3
+ ; JSON for `#[ranger::serialize]` structs of Rust-syntax modules
4
+ ; (PLAN_RUST_SYNTAX.md, stage R7).
5
+ ;
6
+ ; The lowering writes `to_json` and `from_json` for such a struct with these
7
+ ; classes; rustc builds the same two methods from the prelude crate's
8
+ ; `ranger::json` (runtime/rust/ranger/src/json.rs). The two are kept line for
9
+ ; line alike, so every target writes the same text and reports the same
10
+ ; error, with positions counted in characters. Imported by a lowered module
11
+ ; after rust/RsPrelude.rgr, whose operators it uses.
12
+
13
+ class RsJsonValue {
14
+ ; null bool num str arr obj
15
+ def kind:string "null"
16
+ def b:boolean false
17
+ ; a number's text, or a string's value
18
+ def text:string ""
19
+ def items:[RsJsonValue]
20
+ def keys:[string]
21
+ def vals:[RsJsonValue]
22
+
23
+ ; The first member named `key` of an object.
24
+ fn field@(optional):RsJsonValue (key:string) {
25
+ def none@(optional):RsJsonValue
26
+ def i:int 0
27
+ while (i < (array_length keys)) {
28
+ if ((itemAt keys i) == key) {
29
+ def hit@(optional):RsJsonValue
30
+ hit = (itemAt vals i)
31
+ return hit
32
+ }
33
+ i = i + 1
34
+ }
35
+ return none
36
+ }
37
+ }
38
+
39
+ class RsJson {
40
+ ; A JSON string literal for `s`.
41
+ sfn quote:string (s:string) {
42
+ def o:string "\""
43
+ def cs:[int] (to_chars s)
44
+ ; if / else rather than `continue`: the Scala writer has no `continue`
45
+ ; in a for loop
46
+ for cs c:int i {
47
+ def piece:string ""
48
+ if (c == 34) {
49
+ piece = "\\\""
50
+ } {
51
+ if (c == 92) {
52
+ piece = "\\\\"
53
+ } {
54
+ if (c == 10) {
55
+ piece = "\\n"
56
+ } {
57
+ if (c == 13) {
58
+ piece = "\\r"
59
+ } {
60
+ if (c == 9) {
61
+ piece = "\\t"
62
+ } {
63
+ if (c < 32) {
64
+ piece = ("\\u00" + (RsJson.hex2(c)))
65
+ } {
66
+ piece = (rs_char_from c)
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ o = o + piece
74
+ }
75
+ return (o + "\"")
76
+ }
77
+
78
+ sfn hex2:string (c:int) {
79
+ def digits:string "0123456789abcdef"
80
+ def hi:int (idiv c 16)
81
+ def lo:int (c - (hi * 16))
82
+ return ((substring digits hi (hi + 1)) + (substring digits lo (lo + 1)))
83
+ }
84
+
85
+ ; A float as Rust's `{}` writes it; `null` when it is not finite.
86
+ sfn num:string (x:double) {
87
+ if ((x - x) != 0.0) {
88
+ return "null"
89
+ }
90
+ return (rs_fmt x)
91
+ }
92
+
93
+ ; Is the number text not an integer (a fraction or an exponent)?
94
+ sfn hasFrac:boolean (t:string) {
95
+ return (((indexOf t ".") >= 0) || ((indexOf t "e") >= 0) || ((indexOf t "E") >= 0))
96
+ }
97
+
98
+ sfn toInt:int (t:string) {
99
+ def v@(optional):int (RsStr.parseI64(t))
100
+ if (null? v) {
101
+ return 0
102
+ }
103
+ return (unwrap v)
104
+ }
105
+
106
+ sfn intOk:boolean (t:string) {
107
+ def v@(optional):int (RsStr.parseI64(t))
108
+ return (!null? v)
109
+ }
110
+
111
+ sfn toDouble:double (t:string) {
112
+ def v@(optional):double (RsStr.parseF64(t))
113
+ if (null? v) {
114
+ return 0.0
115
+ }
116
+ return (unwrap v)
117
+ }
118
+ }
119
+
120
+ ; The parser: `failed` and `err` tell whether parse() found a value.
121
+ class RsJsonParser {
122
+ def s:[int]
123
+ def pos:int 0
124
+ def failed:boolean false
125
+ def err:string ""
126
+
127
+ Constructor (text:string) {
128
+ s = (to_chars text)
129
+ }
130
+
131
+ fn fail:RsJsonValue () {
132
+ if (failed == false) {
133
+ failed = true
134
+ err = ("invalid JSON at " + (to_string pos))
135
+ }
136
+ return (new RsJsonValue())
137
+ }
138
+
139
+ fn peek:int () {
140
+ if (pos < (array_length s)) {
141
+ return (itemAt s pos)
142
+ }
143
+ return 0
144
+ }
145
+
146
+ fn ws:void () {
147
+ def going:boolean true
148
+ while going {
149
+ def c:int (this.peek())
150
+ if ((pos < (array_length s)) && ((c == 32) || (c == 9) || (c == 10) || (c == 13))) {
151
+ pos = pos + 1
152
+ } {
153
+ going = false
154
+ }
155
+ }
156
+ }
157
+
158
+ fn word:boolean (w:string) {
159
+ def cs:[int] (to_chars w)
160
+ def n:int (array_length cs)
161
+ if ((pos + n) > (array_length s)) {
162
+ return false
163
+ }
164
+ def i:int 0
165
+ while (i < n) {
166
+ if ((itemAt s (pos + i)) != (itemAt cs i)) {
167
+ return false
168
+ }
169
+ i = i + 1
170
+ }
171
+ pos = pos + n
172
+ return true
173
+ }
174
+
175
+ fn parse:RsJsonValue () {
176
+ this.ws()
177
+ def v:RsJsonValue (this.value())
178
+ if failed {
179
+ return v
180
+ }
181
+ this.ws()
182
+ if (pos < (array_length s)) {
183
+ return (this.fail())
184
+ }
185
+ return v
186
+ }
187
+
188
+ fn value:RsJsonValue () {
189
+ def c:int (this.peek())
190
+ if (c == 123) {
191
+ return (this.parseObject())
192
+ }
193
+ if (c == 91) {
194
+ return (this.parseArray())
195
+ }
196
+ if (c == 34) {
197
+ def sv:RsJsonValue (new RsJsonValue())
198
+ sv.kind = "str"
199
+ sv.text = (this.str())
200
+ return sv
201
+ }
202
+ if (this.word("true")) {
203
+ def tv:RsJsonValue (new RsJsonValue())
204
+ tv.kind = "bool"
205
+ tv.b = true
206
+ return tv
207
+ }
208
+ if (this.word("false")) {
209
+ def fv:RsJsonValue (new RsJsonValue())
210
+ fv.kind = "bool"
211
+ return fv
212
+ }
213
+ if (this.word("null")) {
214
+ return (new RsJsonValue())
215
+ }
216
+ if ((c == 45) || ((c >= 48) && (c <= 57))) {
217
+ return (this.number())
218
+ }
219
+ return (this.fail())
220
+ }
221
+
222
+ fn digits:boolean () {
223
+ def start:int pos
224
+ def going:boolean true
225
+ while going {
226
+ def c:int (this.peek())
227
+ if ((pos < (array_length s)) && (c >= 48) && (c <= 57)) {
228
+ pos = pos + 1
229
+ } {
230
+ going = false
231
+ }
232
+ }
233
+ return (pos > start)
234
+ }
235
+
236
+ fn number:RsJsonValue () {
237
+ def start:int pos
238
+ if ((this.peek()) == 45) {
239
+ pos = pos + 1
240
+ }
241
+ if (false == (this.digits())) {
242
+ return (this.fail())
243
+ }
244
+ if ((this.peek()) == 46) {
245
+ pos = pos + 1
246
+ if (false == (this.digits())) {
247
+ return (this.fail())
248
+ }
249
+ }
250
+ def e:int (this.peek())
251
+ if ((e == 101) || (e == 69)) {
252
+ pos = pos + 1
253
+ def sg:int (this.peek())
254
+ if ((sg == 43) || (sg == 45)) {
255
+ pos = pos + 1
256
+ }
257
+ if (false == (this.digits())) {
258
+ return (this.fail())
259
+ }
260
+ }
261
+ def t:string ""
262
+ def i:int start
263
+ while (i < pos) {
264
+ t = t + (rs_char_from (itemAt s i))
265
+ i = i + 1
266
+ }
267
+ def v:RsJsonValue (new RsJsonValue())
268
+ v.kind = "num"
269
+ v.text = t
270
+ return v
271
+ }
272
+
273
+ ; Four hex digits; -1 (and the parser failed) when they are not.
274
+ fn hex4:int () {
275
+ def v:int 0
276
+ def k:int 0
277
+ while (k < 4) {
278
+ def c:int (this.peek())
279
+ def d:int -1
280
+ if ((c >= 48) && (c <= 57)) {
281
+ d = c - 48
282
+ }
283
+ if ((c >= 97) && (c <= 102)) {
284
+ d = (c - 97) + 10
285
+ }
286
+ if ((c >= 65) && (c <= 70)) {
287
+ d = (c - 65) + 10
288
+ }
289
+ if ((d < 0) || (pos >= (array_length s))) {
290
+ this.fail()
291
+ return -1
292
+ }
293
+ v = (v * 16) + d
294
+ pos = pos + 1
295
+ k = k + 1
296
+ }
297
+ return v
298
+ }
299
+
300
+ fn str:string () {
301
+ pos = pos + 1
302
+ def o:string ""
303
+ ; not `while true`: Java rejects the return after an endless loop
304
+ def reading:boolean true
305
+ while reading {
306
+ if (pos >= (array_length s)) {
307
+ this.fail()
308
+ return ""
309
+ }
310
+ def c:int (itemAt s pos)
311
+ if (c == 34) {
312
+ pos = pos + 1
313
+ return o
314
+ }
315
+ if (c < 32) {
316
+ this.fail()
317
+ return ""
318
+ }
319
+ if (c != 92) {
320
+ o = o + (rs_char_from c)
321
+ pos = pos + 1
322
+ continue
323
+ }
324
+ pos = pos + 1
325
+ def e:int (this.peek())
326
+ pos = pos + 1
327
+ if (e == 34) {
328
+ o = o + "\""
329
+ continue
330
+ }
331
+ if (e == 92) {
332
+ o = o + "\\"
333
+ continue
334
+ }
335
+ if (e == 47) {
336
+ o = o + "/"
337
+ continue
338
+ }
339
+ if (e == 98) {
340
+ o = o + (rs_char_from 8)
341
+ continue
342
+ }
343
+ if (e == 102) {
344
+ o = o + (rs_char_from 12)
345
+ continue
346
+ }
347
+ if (e == 110) {
348
+ o = o + "\n"
349
+ continue
350
+ }
351
+ if (e == 114) {
352
+ o = o + "\r"
353
+ continue
354
+ }
355
+ if (e == 116) {
356
+ o = o + "\t"
357
+ continue
358
+ }
359
+ if (e == 117) {
360
+ def code:int (this.hex4())
361
+ if failed {
362
+ return ""
363
+ }
364
+ if ((code >= 55296) && (code < 56320) && (this.word("\\u"))) {
365
+ def low:int (this.hex4())
366
+ if failed {
367
+ return ""
368
+ }
369
+ if ((low < 56320) || (low >= 57344)) {
370
+ this.fail()
371
+ return ""
372
+ }
373
+ code = ((65536 + ((code - 55296) * 1024)) + (low - 56320))
374
+ }
375
+ if ((code >= 55296) && (code < 57344)) {
376
+ this.fail()
377
+ return ""
378
+ }
379
+ o = o + (rs_char_from code)
380
+ continue
381
+ }
382
+ pos = pos - 1
383
+ this.fail()
384
+ return ""
385
+ }
386
+ return o
387
+ }
388
+
389
+ fn parseArray:RsJsonValue () {
390
+ pos = pos + 1
391
+ def v:RsJsonValue (new RsJsonValue())
392
+ v.kind = "arr"
393
+ this.ws()
394
+ if ((this.peek()) == 93) {
395
+ pos = pos + 1
396
+ return v
397
+ }
398
+ ; not `while true`: Java rejects the return after an endless loop
399
+ def reading:boolean true
400
+ while reading {
401
+ this.ws()
402
+ def it:RsJsonValue (this.value())
403
+ if failed {
404
+ return it
405
+ }
406
+ push v.items it
407
+ this.ws()
408
+ def c:int (this.peek())
409
+ if (c == 44) {
410
+ pos = pos + 1
411
+ continue
412
+ }
413
+ if (c == 93) {
414
+ pos = pos + 1
415
+ return v
416
+ }
417
+ return (this.fail())
418
+ }
419
+ return v
420
+ }
421
+
422
+ fn parseObject:RsJsonValue () {
423
+ pos = pos + 1
424
+ def v:RsJsonValue (new RsJsonValue())
425
+ v.kind = "obj"
426
+ this.ws()
427
+ if ((this.peek()) == 125) {
428
+ pos = pos + 1
429
+ return v
430
+ }
431
+ ; not `while true`: Java rejects the return after an endless loop
432
+ def reading:boolean true
433
+ while reading {
434
+ this.ws()
435
+ if ((this.peek()) != 34) {
436
+ return (this.fail())
437
+ }
438
+ def k:string (this.str())
439
+ if failed {
440
+ return v
441
+ }
442
+ this.ws()
443
+ if ((this.peek()) != 58) {
444
+ return (this.fail())
445
+ }
446
+ pos = pos + 1
447
+ this.ws()
448
+ def mv:RsJsonValue (this.value())
449
+ if failed {
450
+ return mv
451
+ }
452
+ push v.keys k
453
+ push v.vals mv
454
+ this.ws()
455
+ def c:int (this.peek())
456
+ if (c == 44) {
457
+ pos = pos + 1
458
+ continue
459
+ }
460
+ if (c == 125) {
461
+ pos = pos + 1
462
+ return v
463
+ }
464
+ return (this.fail())
465
+ }
466
+ return v
467
+ }
468
+ }