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,518 @@
1
+ # EVG Layout Engine Implementation Plan
2
+
3
+ **Version:** 1.0
4
+ **Date:** December 2024
5
+ **Language:** Ranger
6
+
7
+ Related sketch (CSS-closer flex/grid, themes, font-correct layout):
8
+ [`PLAN_CSS_LAYOUT_AND_FONTS.md`](./PLAN_CSS_LAYOUT_AND_FONTS.md)
9
+
10
+ Related design (devtools over a live or captured frame — element hierarchy,
11
+ box model, cascade provenance, component debug notes):
12
+ [`PLAN_INSPECTOR.md`](./PLAN_INSPECTOR.md), built so far in
13
+ [`inspect/README.md`](./inspect/README.md)
14
+
15
+ ## 1. Overview
16
+
17
+ EVG (Extended Vector Graphics) is a declarative layout engine that calculates element positions and dimensions. It separates layout computation from rendering, allowing multiple output targets (PDF, Canvas, SVG, HTML).
18
+
19
+ ### 1.1 Design Goals
20
+
21
+ - **Layout-only engine**: Calculate coordinates, not render directly
22
+ - **Abstract renderer interface**: Call external measurers for font metrics
23
+ - **CSS-like box model**: Margins, padding, borders
24
+ - **Flow layout**: Automatic wrapping and alignment
25
+ - **Absolute positioning**: Support for fixed element placement
26
+ - **Book printing**: Multi-page support for pdf_writer integration
27
+
28
+ ### 1.2 Architecture
29
+
30
+ ```
31
+ ┌─────────────────────────────────────────────────────────┐
32
+ │ EVG Layout Engine │
33
+ ├─────────────────────────────────────────────────────────┤
34
+ │ XML Parser → Element Tree → Layout Calculator → Coords │
35
+ └─────────────────────────────────────────────────────────┘
36
+ ↓
37
+ ITextMeasurer interface
38
+ ↓
39
+ ┌─────────────────────────────────────────────────────────┐
40
+ │ Renderers (separate implementation) │
41
+ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
42
+ │ │ PDFKit │ │ Canvas │ │ SVG │ │ pdf_writer │ │
43
+ │ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
44
+ └─────────────────────────────────────────────────────────┘
45
+ ```
46
+
47
+ ## 2. File Structure
48
+
49
+ ```
50
+ lib/evg/
51
+ ├── PLAN_EVG.md # This plan
52
+ ├── README.md # Usage documentation
53
+ ├── SPEC.md # Format specification
54
+ ├── bin/ # Compiled output
55
+ │ └── evg_test.js
56
+ ├── original/ # Reference implementations
57
+ │ ├── EVGColor.clj
58
+ │ ├── EVGColorContext.clj
59
+ │ └── SVGPath.clj
60
+ │
61
+ │ === LIBRARY FILES (no main function) ===
62
+ ├── EVGUnit.rgr # Unit parsing (px, %, em, hp, fill)
63
+ ├── EVGColor.rgr # Color parsing (hex, rgb, rgba, hsl, named)
64
+ ├── EVGBox.rgr # Box model (margin, padding, border)
65
+ ├── EVGElement.rgr # Element base class with attributes
66
+ ├── EVGText.rgr # Text element with measurement
67
+ ├── EVGImage.rgr # Image element
68
+ ├── EVGContainer.rgr # Container (div) element
69
+ ├── EVGParser.rgr # XML parser to element tree
70
+ ├── EVGLayout.rgr # Layout algorithm (flow, absolute)
71
+ ├── EVGDocument.rgr # Document root with pages
72
+ ├── EVGRenderer.rgr # Abstract renderer interface
73
+ │
74
+ │ === TEST/CLI FILE (with main function) ===
75
+ └── evg_test.rgr # Test CLI and examples
76
+ ```
77
+
78
+ ## 3. Implementation Phases
79
+
80
+ ### Phase 1: Core Data Structures
81
+
82
+ #### 3.1.1 EVGUnit.rgr - Unit System
83
+
84
+ ```ranger
85
+ class EVGUnit {
86
+ def value:double 0.0
87
+ def unitType:int 0 ; 0=px, 1=%, 2=em, 3=hp, 4=fill
88
+ def isSet:boolean false
89
+ def pixels:double 0.0 ; Resolved pixel value
90
+
91
+ sfn parse:EVGUnit (str:string)
92
+ fn resolve:void (parentSize:double fontSize:double)
93
+ }
94
+
95
+ ; Unit type constants
96
+ ; UNIT_PIXELS = 0
97
+ ; UNIT_PERCENT = 1
98
+ ; UNIT_EM = 2
99
+ ; UNIT_HEIGHT_PERCENT = 3
100
+ ; UNIT_FILL = 4
101
+ ```
102
+
103
+ #### 3.1.2 EVGColor.rgr - Color Parsing
104
+
105
+ ```ranger
106
+ class EVGColor {
107
+ def r:double 0.0
108
+ def g:double 0.0
109
+ def b:double 0.0
110
+ def a:double 1.0
111
+ def isSet:boolean false
112
+
113
+ sfn parse:EVGColor (str:string) ; Parse hex, rgb, rgba, hsl, named
114
+ sfn noColor:EVGColor () ; Transparent/unset
115
+ fn toCSSString:string ()
116
+ fn toHexString:string ()
117
+ fn toPDFString:string () ; For pdf_writer
118
+ }
119
+ ```
120
+
121
+ #### 3.1.3 EVGBox.rgr - Box Model
122
+
123
+ ```ranger
124
+ class EVGBox {
125
+ ; Margins
126
+ def marginTop:EVGUnit
127
+ def marginRight:EVGUnit
128
+ def marginBottom:EVGUnit
129
+ def marginLeft:EVGUnit
130
+
131
+ ; Padding
132
+ def paddingTop:EVGUnit
133
+ def paddingRight:EVGUnit
134
+ def paddingBottom:EVGUnit
135
+ def paddingLeft:EVGUnit
136
+
137
+ ; Border
138
+ def borderWidth:EVGUnit
139
+ def borderColor:EVGColor
140
+ def borderRadius:EVGUnit
141
+
142
+ fn resolveUnits:void (parentWidth:double parentHeight:double fontSize:double)
143
+ fn getInnerWidth:double (outerWidth:double)
144
+ fn getInnerHeight:double (outerHeight:double)
145
+ fn getTotalWidth:double (contentWidth:double)
146
+ fn getTotalHeight:double (contentHeight:double)
147
+ }
148
+ ```
149
+
150
+ ### Phase 2: Element Classes
151
+
152
+ #### 3.2.1 EVGElement.rgr - Base Element
153
+
154
+ ```ranger
155
+ class EVGElement {
156
+ def id:string ""
157
+ def tagName:string "div"
158
+ def parent@(optional):EVGElement
159
+ def children:[EVGElement]
160
+
161
+ ; Dimensions
162
+ def width:EVGUnit
163
+ def height:EVGUnit
164
+
165
+ ; Position (for absolute)
166
+ def left:EVGUnit
167
+ def top:EVGUnit
168
+ def right:EVGUnit
169
+ def bottom:EVGUnit
170
+
171
+ ; Box model
172
+ def box:EVGBox
173
+
174
+ ; Visual
175
+ def backgroundColor:EVGColor
176
+ def opacity:double 1.0
177
+
178
+ ; Layout properties
179
+ def direction:string "row" ; row, column
180
+ def align:string "left" ; left, center, right
181
+ def verticalAlign:string "top" ; top, center, bottom
182
+ def isInline:boolean false
183
+ def lineBreak:boolean false
184
+ def overflow:string "visible" ; visible, hidden, page-break
185
+
186
+ ; Calculated values (output)
187
+ def calculatedX:double 0.0
188
+ def calculatedY:double 0.0
189
+ def calculatedWidth:double 0.0
190
+ def calculatedHeight:double 0.0
191
+ def calculatedPage:int 0 ; For multi-page
192
+ def isAbsolute:boolean false
193
+
194
+ fn setAttribute:void (name:string value:string)
195
+ fn addChild:void (child:EVGElement)
196
+ fn resolveUnits:void (parentWidth:double parentHeight:double fontSize:double)
197
+ }
198
+ ```
199
+
200
+ #### 3.2.2 EVGText.rgr - Text Element
201
+
202
+ ```ranger
203
+ class EVGText {
204
+ Extends(EVGElement)
205
+
206
+ def text:string ""
207
+ def fontFamily:string "Helvetica"
208
+ def fontSize:EVGUnit ; Default 14px
209
+ def color:EVGColor
210
+
211
+ ; Calculated text metrics
212
+ def measuredWidth:double 0.0
213
+ def measuredHeight:double 0.0
214
+ def lineCount:int 1
215
+ def lines:[string] ; Wrapped lines
216
+
217
+ fn measureText:void (measurer:ITextMeasurer maxWidth:double)
218
+ fn wrapText:void (measurer:ITextMeasurer maxWidth:double)
219
+ }
220
+ ```
221
+
222
+ #### 3.2.3 EVGImage.rgr - Image Element
223
+
224
+ ```ranger
225
+ class EVGImage {
226
+ Extends(EVGElement)
227
+
228
+ def src:string ""
229
+ def naturalWidth:double 0.0
230
+ def naturalHeight:double 0.0
231
+ def imageData@(optional):buffer ; For embedded images
232
+
233
+ fn setImageSize:void (w:double h:double)
234
+ }
235
+ ```
236
+
237
+ #### 3.2.4 EVGContainer.rgr - Container Element
238
+
239
+ ```ranger
240
+ class EVGContainer {
241
+ Extends(EVGElement)
242
+
243
+ ; Gradient support
244
+ def linearGradient:string ""
245
+ def radialGradient:string ""
246
+
247
+ ; Shadow
248
+ def shadowRadius:EVGUnit
249
+ def shadowColor:EVGColor
250
+ def shadowOffsetX:EVGUnit
251
+ def shadowOffsetY:EVGUnit
252
+
253
+ ; Transform
254
+ def rotate:double 0.0
255
+ def scale:double 1.0
256
+ }
257
+ ```
258
+
259
+ ### Phase 3: Text Measurement Interface
260
+
261
+ #### 3.3.1 EVGRenderer.rgr - Abstract Interface
262
+
263
+ ```ranger
264
+ ; Interface for text measurement - must be implemented by renderer
265
+ class ITextMeasurer {
266
+ fn measureText:EVGTextMetrics (text:string fontFamily:string fontSize:double)
267
+ fn measureTextWidth:double (text:string fontFamily:string fontSize:double)
268
+ fn getLineHeight:double (fontFamily:string fontSize:double)
269
+ }
270
+
271
+ class EVGTextMetrics {
272
+ def width:double 0.0
273
+ def height:double 0.0
274
+ def ascent:double 0.0
275
+ def descent:double 0.0
276
+ def lineHeight:double 0.0
277
+ }
278
+
279
+ ; Simple fallback measurer (estimates)
280
+ class SimpleTextMeasurer {
281
+ Extends(ITextMeasurer)
282
+
283
+ fn measureText:EVGTextMetrics (text:string fontFamily:string fontSize:double) {
284
+ ; Estimate: average character width is ~0.5-0.6 of fontSize
285
+ def avgCharWidth:double (fontSize * 0.55)
286
+ def width:double ((to_double (strlen text)) * avgCharWidth)
287
+ def height:double (fontSize * 1.2) ; Line height ~1.2x font size
288
+ ; Return metrics...
289
+ }
290
+ }
291
+ ```
292
+
293
+ ### Phase 4: XML Parser
294
+
295
+ #### 3.4.1 EVGParser.rgr - XML to Element Tree
296
+
297
+ ```ranger
298
+ class EVGParser {
299
+ def root@(optional):EVGElement
300
+ def measurer@(optional):ITextMeasurer
301
+
302
+ fn parse:EVGElement (xml:string)
303
+ fn parseElement:EVGElement (tagName:string attributes:map children:[EVGElement])
304
+ fn parseAttributes:void (element:EVGElement attrMap:map)
305
+
306
+ ; Attribute parsing helpers
307
+ fn parseUnit:EVGUnit (value:string)
308
+ fn parseColor:EVGColor (value:string)
309
+ fn parseBoolean:boolean (value:string)
310
+ }
311
+ ```
312
+
313
+ ### Phase 5: Layout Algorithm
314
+
315
+ #### 3.5.1 EVGLayout.rgr - Layout Calculator
316
+
317
+ ```ranger
318
+ class EVGLayout {
319
+ def measurer:ITextMeasurer
320
+ def pageWidth:double 0.0
321
+ def pageHeight:double 0.0
322
+ def currentPage:int 0
323
+
324
+ fn layout:void (root:EVGElement)
325
+ fn layoutElement:void (element:EVGElement parentX:double parentY:double
326
+ parentWidth:double parentHeight:double)
327
+ fn layoutChildren:double (parent:EVGElement) ; Returns content height
328
+ fn layoutFlow:double (parent:EVGElement children:[EVGElement])
329
+ fn layoutAbsolute:void (element:EVGElement parent:EVGElement)
330
+ fn alignRow:void (row:[EVGElement] parent:EVGElement rowHeight:double)
331
+ fn measureTextElement:void (text:EVGText maxWidth:double)
332
+
333
+ ; Unit resolution
334
+ fn resolveUnit:double (unit:EVGUnit parentSize:double fontSize:double)
335
+ }
336
+ ```
337
+
338
+ ### Phase 6: Document and Pages
339
+
340
+ #### 3.6.1 EVGDocument.rgr - Multi-page Document
341
+
342
+ ```ranger
343
+ class EVGPage {
344
+ def pageNumber:int 0
345
+ def width:double 0.0
346
+ def height:double 0.0
347
+ def elements:[EVGElement] ; Elements on this page
348
+ }
349
+
350
+ class EVGDocument {
351
+ def pages:[EVGPage]
352
+ def defaultWidth:double 612.0 ; Letter size in points
353
+ def defaultHeight:double 792.0
354
+ def root@(optional):EVGElement
355
+
356
+ fn addPage:EVGPage ()
357
+ fn layoutDocument:void (measurer:ITextMeasurer)
358
+ fn getElementsForPage:array (pageNum:int)
359
+ }
360
+ ```
361
+
362
+ ## 4. Layout Algorithm Details
363
+
364
+ ### 4.1 Flow Layout
365
+
366
+ ```
367
+ 1. Start at (paddingLeft, paddingTop)
368
+ 2. For each child:
369
+ a. Resolve child's units based on parent dimensions
370
+ b. If child has left/top/right/bottom → absolute positioning
371
+ c. Check if child fits in current row
372
+ d. If not, wrap to next row
373
+ e. Position child at (currentX + marginLeft, currentY + marginTop)
374
+ f. Advance currentX by child's total width
375
+ g. Track max row height
376
+ 3. After all children, apply horizontal alignment to each row
377
+ 4. Apply vertical alignment within rows
378
+ 5. Return total content height
379
+ ```
380
+
381
+ ### 4.2 Page Breaking
382
+
383
+ ```
384
+ 1. Layout normally until element exceeds page height
385
+ 2. When overflow="page-break":
386
+ a. Split element to next page
387
+ b. Mark calculatedPage on each element
388
+ 3. Document collects elements per page for rendering
389
+ ```
390
+
391
+ ## 5. Integration with pdf_writer
392
+
393
+ ### 5.1 PDF Renderer Interface
394
+
395
+ ```ranger
396
+ class EVGPDFRenderer {
397
+ def writer:PDFWriter
398
+ def document:EVGDocument
399
+
400
+ fn render:buffer ()
401
+ fn renderPage:void (page:EVGPage)
402
+ fn renderElement:void (element:EVGElement)
403
+ fn renderText:void (text:EVGText)
404
+ fn renderImage:void (image:EVGImage)
405
+ fn renderContainer:void (container:EVGContainer)
406
+
407
+ ; ITextMeasurer implementation using PDF font metrics
408
+ fn measureText:EVGTextMetrics (text:string fontFamily:string fontSize:double)
409
+ }
410
+ ```
411
+
412
+ ### 5.2 Usage Example
413
+
414
+ ```ranger
415
+ Import "EVGDocument.rgr"
416
+ Import "EVGParser.rgr"
417
+ Import "EVGLayout.rgr"
418
+ Import "EVGPDFRenderer.rgr"
419
+
420
+ main {
421
+ def xml "<div width=\"612\" height=\"792\" padding=\"72\">
422
+ <span font-size=\"24\">Chapter 1</span>
423
+ <div margin-top=\"20\">
424
+ <span font-size=\"12\">Lorem ipsum dolor sit amet...</span>
425
+ </div>
426
+ <img src=\"./image.jpg\" width=\"200\" />
427
+ </div>"
428
+
429
+ def parser (new EVGParser())
430
+ def root:EVGElement (parser.parse(xml))
431
+
432
+ def renderer (new EVGPDFRenderer())
433
+ def document (new EVGDocument())
434
+ document.root = root
435
+ document.layoutDocument(renderer)
436
+
437
+ def pdfData:buffer (renderer.render())
438
+ buffer_write_file "." "output.pdf" pdfData
439
+ }
440
+ ```
441
+
442
+ ## 6. npm Scripts
443
+
444
+ Add to package.json:
445
+
446
+ ```json
447
+ {
448
+ "evg:compile": "cross-env RANGER_LIB=./compiler/Lang.rgr node dist/rgrc.js -es6 ./lib/evg/evg_test.rgr -d=./lib/evg/bin -o=evg_test.js -nodecli",
449
+ "evg:run": "node ./lib/evg/bin/evg_test.js",
450
+ "evg": "npm run evg:compile && npm run evg:run"
451
+ }
452
+ ```
453
+
454
+ ## 7. Implementation Order
455
+
456
+ ### Week 1: Core Types
457
+
458
+ 1. [ ] EVGUnit.rgr - Unit parsing and resolution
459
+ 2. [ ] EVGColor.rgr - Color parsing (port from original/EVGColor.clj)
460
+ 3. [ ] EVGBox.rgr - Box model calculations
461
+
462
+ ### Week 2: Elements
463
+
464
+ 4. [ ] EVGElement.rgr - Base element class
465
+ 5. [ ] EVGText.rgr - Text element
466
+ 6. [ ] EVGImage.rgr - Image element
467
+ 7. [ ] EVGContainer.rgr - Container with gradients/shadows
468
+
469
+ ### Week 3: Parser & Layout
470
+
471
+ 8. [ ] EVGParser.rgr - Simple XML parser
472
+ 9. [ ] EVGLayout.rgr - Flow layout algorithm
473
+ 10. [ ] EVGDocument.rgr - Multi-page support
474
+
475
+ ### Week 4: Renderer Integration
476
+
477
+ 11. [ ] EVGRenderer.rgr - Abstract interface
478
+ 12. [ ] evg_test.rgr - Test CLI
479
+ 13. [ ] Integration with pdf_writer (future)
480
+
481
+ ## 8. Testing Strategy
482
+
483
+ ### 8.1 Unit Tests (in evg_test.rgr)
484
+
485
+ - Unit parsing: "100px", "50%", "2em", "fill"
486
+ - Color parsing: "#FF5733", "rgb(255,87,51)", "rgba(...)", "red"
487
+ - Box model calculations
488
+ - Layout positioning
489
+
490
+ ### 8.2 Visual Tests
491
+
492
+ - Generate test PDFs with known layouts
493
+ - Compare coordinates to expected values
494
+
495
+ ### 8.3 Example Documents
496
+
497
+ - Simple card layout
498
+ - Multi-column layout
499
+ - Text wrapping test
500
+ - Image with caption
501
+ - Multi-page book chapter
502
+
503
+ ## 9. Future Enhancements
504
+
505
+ - [ ] SVG path rendering (port from original/SVGPath.clj)
506
+ - [ ] Gradient parsing and rendering
507
+ - [ ] Component system (reusable templates)
508
+ - [ ] CSS stylesheet support
509
+ - [ ] EPUB output (multi-page HTML)
510
+ - [ ] Canvas renderer for browser
511
+ - [ ] Interactive elements (for browser)
512
+
513
+ ## 10. References
514
+
515
+ - [SPEC.md](SPEC.md) - Full EVG format specification
516
+ - [original/EVGColor.clj](original/EVGColor.clj) - Reference color implementation
517
+ - [original/SVGPath.clj](original/SVGPath.clj) - Reference SVG path parser
518
+ - [PDF Reference](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf)