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.
- package/CHANGELOG.md +1160 -19
- package/LICENSE +3 -1
- package/README.md +124 -29
- package/dist/Lang.rgr +1188 -290
- package/dist/api.d.ts +2343 -879
- package/dist/api.js +79924 -56922
- package/dist/lib/JSON.rgr +102 -91
- package/dist/lib/Shell.rgr +4 -4
- package/dist/lib/apple/AppleToolchain.rgr +4 -4
- package/dist/lib/apple/README.md +5 -4
- package/dist/lib/apple/apple_test.rgr +1 -1
- package/dist/lib/core/README.md +1 -1
- package/dist/lib/evg/EVG.rgr +12 -0
- package/dist/lib/evg/EVGA11yFromTree.rgr +302 -0
- package/dist/lib/evg/EVGA11yTree.rgr +894 -0
- package/dist/lib/evg/EVGBox.rgr +267 -0
- package/dist/lib/evg/EVGBoxShorthandTest.rgr +220 -0
- package/dist/lib/evg/EVGCodepoint.rgr +316 -0
- package/dist/lib/evg/EVGColor.rgr +700 -0
- package/dist/lib/evg/EVGCommands.rgr +177 -0
- package/dist/lib/evg/EVGComponent.rgr +331 -0
- package/dist/lib/evg/EVGComponentTest.rgr +387 -0
- package/dist/lib/evg/EVGConnector.rgr +541 -0
- package/dist/lib/evg/EVGConnectorTest.rgr +306 -0
- package/dist/lib/evg/EVGDisplayList.rgr +4186 -0
- package/dist/lib/evg/EVGEasing.rgr +370 -0
- package/dist/lib/evg/EVGEffectTest.rgr +253 -0
- package/dist/lib/evg/EVGElement.rgr +4914 -0
- package/dist/lib/evg/EVGFixedTest.rgr +289 -0
- package/dist/lib/evg/EVGFlexRulesTest.rgr +317 -0
- package/dist/lib/evg/EVGFlexWrapTest.rgr +246 -0
- package/dist/lib/evg/EVGFling.rgr +244 -0
- package/dist/lib/evg/EVGFocus.rgr +400 -0
- package/dist/lib/evg/EVGFocusTest.rgr +399 -0
- package/dist/lib/evg/EVGGradient.rgr +322 -0
- package/dist/lib/evg/EVGGrapheme.rgr +190 -0
- package/dist/lib/evg/EVGGrid.rgr +975 -0
- package/dist/lib/evg/EVGHitTest.rgr +208 -0
- package/dist/lib/evg/EVGHoles.rgr +294 -0
- package/dist/lib/evg/EVGHostMeasurerTest.rgr +281 -0
- package/dist/lib/evg/EVGHostTextMeasurer.rgr +331 -0
- package/dist/lib/evg/EVGHostTree.rgr +834 -0
- package/dist/lib/evg/EVGHostTreeTest.rgr +447 -0
- package/dist/lib/evg/EVGImageDecode.rgr +117 -0
- package/dist/lib/evg/EVGImageMeasurer.rgr +86 -0
- package/dist/lib/evg/EVGInspect.rgr +883 -0
- package/dist/lib/evg/EVGInvalidateTest.rgr +432 -0
- package/dist/lib/evg/EVGJsonTest.rgr +535 -0
- package/dist/lib/evg/EVGLayout.rgr +4220 -0
- package/dist/lib/evg/EVGMeasure.rgr +1267 -0
- package/dist/lib/evg/EVGOverlayTest.rgr +626 -0
- package/dist/lib/evg/EVGPatch.rgr +1721 -0
- package/dist/lib/evg/EVGPatchTest.rgr +692 -0
- package/dist/lib/evg/EVGPopoverTest.rgr +395 -0
- package/dist/lib/evg/EVGReconcile.rgr +226 -0
- package/dist/lib/evg/EVGReconcileTest.rgr +421 -0
- package/dist/lib/evg/EVGReject.rgr +126 -0
- package/dist/lib/evg/EVGRelayoutTest.rgr +375 -0
- package/dist/lib/evg/EVGRtlLayoutTest.rgr +319 -0
- package/dist/lib/evg/EVGRuler.rgr +232 -0
- package/dist/lib/evg/EVGRulerTest.rgr +172 -0
- package/dist/lib/evg/EVGSelectChrome.rgr +178 -0
- package/dist/lib/evg/EVGStyleCacheTest.rgr +419 -0
- package/dist/lib/evg/EVGStyleSheet.rgr +2148 -0
- package/dist/lib/evg/EVGStyleStateTest.rgr +407 -0
- package/dist/lib/evg/EVGStyleVarTest.rgr +471 -0
- package/dist/lib/evg/EVGText.rgr +105 -0
- package/dist/lib/evg/EVGTextEngine.rgr +536 -0
- package/dist/lib/evg/EVGTextMeasurer.rgr +720 -0
- package/dist/lib/evg/EVGTimingTest.rgr +1417 -0
- package/dist/lib/evg/EVGToolbar.rgr +1369 -0
- package/dist/lib/evg/EVGTransition.rgr +728 -0
- package/dist/lib/evg/EVGTreeJson.rgr +721 -0
- package/dist/lib/evg/EVGUnit.rgr +554 -0
- package/dist/lib/evg/EVGViewportUnitTest.rgr +236 -0
- package/dist/lib/evg/EvgApp.rgr +189 -0
- package/dist/lib/evg/EvgBitmapTracer.rgr +4277 -0
- package/dist/lib/evg/EvgBitmapTracerTest.rgr +2119 -0
- package/dist/lib/evg/EvgHost.rgr +451 -0
- package/dist/lib/evg/EvgTest.rgr +91 -0
- package/dist/lib/evg/EvgTraceColor.rgr +236 -0
- package/dist/lib/evg/EvgTraceCurve.rgr +648 -0
- package/dist/lib/evg/EvgTraceFit.rgr +767 -0
- package/dist/lib/evg/EvgTracePath.rgr +435 -0
- package/dist/lib/evg/EvgTraceTypes.rgr +559 -0
- package/dist/lib/evg/EvgViewport.rgr +313 -0
- package/dist/lib/evg/FxDemoDoc.rgr +185 -0
- package/dist/lib/evg/HOSTS.md +227 -0
- package/dist/lib/evg/ISSUES.md +835 -0
- package/dist/lib/evg/PLAN_ACCESSIBILITY.md +650 -0
- package/dist/lib/evg/PLAN_CSS_LAYOUT_AND_FONTS.md +1124 -0
- package/dist/lib/evg/PLAN_EFFECTS.md +431 -0
- package/dist/lib/evg/PLAN_EVG.md +518 -0
- package/dist/lib/evg/PLAN_EVG_RENDERER.md +1674 -0
- package/dist/lib/evg/PLAN_INSPECTOR.md +788 -0
- package/dist/lib/evg/PLAN_LINKS_AND_FORMS.md +157 -0
- package/dist/lib/evg/PLAN_NATIVE_HOSTS.md +671 -0
- package/dist/lib/evg/PLAN_VECTOR_IR.md +664 -0
- package/dist/lib/evg/PLAN_VIEW_TRANSFORM.md +322 -0
- package/dist/lib/evg/PathBuilder.rgr +333 -0
- package/dist/lib/evg/README.md +1236 -0
- package/dist/lib/evg/SPEC.md +1252 -0
- package/dist/lib/evg/SVGPathParser.rgr +1199 -0
- package/dist/lib/evg/SvgParser.rgr +1736 -0
- package/dist/lib/evg/TODO_EVG_RENDERER.md +595 -0
- package/dist/lib/evg/VectorShapes.rgr +331 -0
- package/dist/lib/evg/VectorStroke.rgr +107 -0
- package/dist/lib/evg/VectorViewBox.rgr +380 -0
- package/dist/lib/evg/agent/README.md +290 -0
- package/dist/lib/evg/agent/evg_agent.rgr +899 -0
- package/dist/lib/evg/agent/fixtures/broken.evg.json +7 -0
- package/dist/lib/evg/agent/fixtures/card.evg.json +9 -0
- package/dist/lib/evg/agent/fixtures/connector.css +63 -0
- package/dist/lib/evg/agent/fixtures/connector.evg.json +14 -0
- package/dist/lib/evg/agent/fixtures/drawn.evg.json +129 -0
- package/dist/lib/evg/agent/fixtures/gradient.evg.json +4 -0
- package/dist/lib/evg/agent/fixtures/popover.css +99 -0
- package/dist/lib/evg/agent/fixtures/popover.evg.json +30 -0
- package/dist/lib/evg/agent/roundtrip.sh +74 -0
- package/dist/lib/evg/agent/smoke.sh +230 -0
- package/dist/lib/evg/android/README.md +97 -0
- package/dist/lib/evg/android/androidstubs/AndroidStubs.kt +175 -0
- package/dist/lib/evg/android/androidstubs/Annotation.kt +10 -0
- package/dist/lib/evg/android/androidstubs/App.kt +30 -0
- package/dist/lib/evg/android/androidstubs/Content.kt +41 -0
- package/dist/lib/evg/android/androidstubs/ContentRes.kt +12 -0
- package/dist/lib/evg/android/androidstubs/InputMethod.kt +46 -0
- package/dist/lib/evg/android/androidstubs/Net.kt +6 -0
- package/dist/lib/evg/android/androidstubs/Os.kt +30 -0
- package/dist/lib/evg/android/androidstubs/Util.kt +15 -0
- package/dist/lib/evg/android/androidstubs/View.kt +113 -0
- package/dist/lib/evg/android/androidstubs/Widget.kt +16 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidEvgSurface.kt +323 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/AndroidTextMeasurer.kt +56 -0
- package/dist/lib/evg/android/src/android/kotlin/fi/ranger/evg/RippleEffect.kt +262 -0
- package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtEvgSurface.kt +238 -0
- package/dist/lib/evg/android/src/awt/kotlin/fi/ranger/evg/AwtTextMeasurer.kt +85 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgEngineThread.kt +115 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgPainter.kt +231 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/EvgSurface.kt +117 -0
- package/dist/lib/evg/android/src/main/kotlin/fi/ranger/evg/RecordingSurface.kt +94 -0
- package/dist/lib/evg/apple/README.md +128 -0
- package/dist/lib/evg/apple/Sources/CoreGraphicsEvgSurface.swift +329 -0
- package/dist/lib/evg/apple/Sources/CoreTextMeasurer.swift +70 -0
- package/dist/lib/evg/apple/Sources/EvgEngineQueue.swift +105 -0
- package/dist/lib/evg/apple/Sources/EvgPainter.swift +225 -0
- package/dist/lib/evg/apple/Sources/EvgSurface.swift +163 -0
- package/dist/lib/evg/apple/Sources/RecordingSurface.swift +110 -0
- package/dist/lib/evg/bench/EvgLayoutBench.rgr +34 -0
- package/dist/lib/evg/bench/README.md +64 -0
- package/dist/lib/evg/bench/layout-bench.mjs +316 -0
- package/dist/lib/evg/bench/layout-cases.mjs +510 -0
- package/dist/lib/evg/bench/layout-conformance.mjs +254 -0
- package/dist/lib/evg/bin/.gitignore +17 -0
- package/dist/lib/evg/evg_test.rgr +313 -0
- package/dist/lib/evg/gl/README.md +198 -0
- package/dist/lib/evg/gl/a11y-paint-check.mjs +73 -0
- package/dist/lib/evg/gl/blur-check.mjs +399 -0
- package/dist/lib/evg/gl/boxmodel.json +1 -0
- package/dist/lib/evg/gl/demo.html +46 -0
- package/dist/lib/evg/gl/effect-presets.css +285 -0
- package/dist/lib/evg/gl/effect-presets.js +63 -0
- package/dist/lib/evg/gl/effect-shots.mjs +135 -0
- package/dist/lib/evg/gl/evg-a11y.js +566 -0
- package/dist/lib/evg/gl/evg-binary.js +160 -0
- package/dist/lib/evg/gl/evg-engine.js +296 -0
- package/dist/lib/evg/gl/evg-fx.js +237 -0
- package/dist/lib/evg/gl/evg-gestures.js +209 -0
- package/dist/lib/evg/gl/evg-list.js +167 -0
- package/dist/lib/evg/gl/evg-measure.js +186 -0
- package/dist/lib/evg/gl/evg-textinput.js +303 -0
- package/dist/lib/evg/gl/evg-view.js +144 -0
- package/dist/lib/evg/gl/evg-webgl.js +3942 -0
- package/dist/lib/evg/gl/fx-check.mjs +998 -0
- package/dist/lib/evg/gl/fx-demo.html +166 -0
- package/dist/lib/evg/gl/fx-demo.js +2 -0
- package/dist/lib/evg/gl/fx-serve.mjs +47 -0
- package/dist/lib/evg/gl/gestures-check.mjs +189 -0
- package/dist/lib/evg/gl/list-binary-check.mjs +152 -0
- package/dist/lib/evg/gl/measure-check.mjs +135 -0
- package/dist/lib/evg/gl/rotation-check.mjs +207 -0
- package/dist/lib/evg/gl/shift-check.mjs +113 -0
- package/dist/lib/evg/gl/stroke-check.mjs +168 -0
- package/dist/lib/evg/gl/text-snap-check.mjs +139 -0
- package/dist/lib/evg/gl/view-check.mjs +343 -0
- package/dist/lib/evg/gl/view-policy-check.mjs +184 -0
- package/dist/lib/evg/html/evg-dom.js +318 -0
- package/dist/lib/evg/html/evg-html.js +600 -0
- package/dist/lib/evg/inspect/README.md +415 -0
- package/dist/lib/evg/inspect/browser-smoke.mjs +115 -0
- package/dist/lib/evg/inspect/evg-inspect.js +947 -0
- package/dist/lib/evg/inspect/shots/css.png +0 -0
- package/dist/lib/evg/inspect/shots/dashboard.png +0 -0
- package/dist/lib/evg/inspect/shots/pptx-slide.png +0 -0
- package/dist/lib/evg/inspect/shots/state.png +0 -0
- package/dist/lib/evg/inspect/shots.mjs +226 -0
- package/dist/lib/evg/oracle/css-blur.json +576 -0
- package/dist/lib/evg/oracle/css-box.json +157 -0
- package/dist/lib/evg/oracle/css-timing.json +709 -0
- package/dist/lib/evg/oracle/css_blur_oracle.mjs +529 -0
- package/dist/lib/evg/oracle/css_box_oracle.mjs +106 -0
- package/dist/lib/evg/oracle/css_timing_oracle.mjs +389 -0
- package/dist/lib/evg/original/EVGColor.clj +310 -0
- package/dist/lib/evg/original/EVGColorContext.rgr +178 -0
- package/dist/lib/evg/original/SVGPath.rgr +627 -0
- package/dist/lib/evg/original/Vec2.crgr +103 -0
- package/dist/lib/evg/ranger.json +9 -0
- package/dist/lib/evg/showcase/README.md +246 -0
- package/dist/lib/evg/showcase/assets/emblem.svg +30 -0
- package/dist/lib/evg/showcase/assets/rosette.svg +22 -0
- package/dist/lib/evg/showcase/build.mjs +651 -0
- package/dist/lib/evg/showcase/pages/album.tsx +30 -0
- package/dist/lib/evg/showcase/pages/boxmodel.tsx +37 -0
- package/dist/lib/evg/showcase/pages/cards.tsx +41 -0
- package/dist/lib/evg/showcase/pages/chart_api.tsx +170 -0
- package/dist/lib/evg/showcase/pages/charts.tsx +219 -0
- package/dist/lib/evg/showcase/pages/drawing.tsx +160 -0
- package/dist/lib/evg/showcase/pages/emoji.tsx +91 -0
- package/dist/lib/evg/showcase/pages/flex.tsx +46 -0
- package/dist/lib/evg/showcase/pages/more.tsx +332 -0
- package/dist/lib/evg/showcase/pages/plots.tsx +262 -0
- package/dist/lib/evg/showcase/pages/svg.tsx +63 -0
- package/dist/lib/evg/showcase/pages/tables.tsx +209 -0
- package/dist/lib/evg/showcase/pages/typography.tsx +43 -0
- package/dist/lib/evg/showcase/pages/units.tsx +35 -0
- package/dist/lib/evg/showcase/pages/variants.tsx +233 -0
- package/dist/lib/evg/showcase/pages/vector.tsx +75 -0
- package/dist/lib/evg/showcase/pages/views.tsx +223 -0
- package/dist/lib/evg/showcase/tests/chart_api_smoke.mjs +339 -0
- package/dist/lib/evg/showcase/tests/gl_smoke.mjs +125 -0
- package/dist/lib/evg/showcase/themes/chart_api-default.css +15 -0
- package/dist/lib/evg/showcase/themes/charts-default.css +29 -0
- package/dist/lib/evg/showcase/themes/drawing-default.css +35 -0
- package/dist/lib/evg/showcase/themes/more-default.css +128 -0
- package/dist/lib/evg/showcase/themes/plots-default.css +18 -0
- package/dist/lib/evg/showcase/themes/showcase.css +508 -0
- package/dist/lib/evg/showcase/themes/tables-default.css +123 -0
- package/dist/lib/evg/showcase/themes/variants-default.css +15 -0
- package/dist/lib/evg/showcase/themes/views-default.css +15 -0
- package/dist/lib/evg/tools/bench_vs_potrace.mjs +290 -0
- package/dist/lib/evg/tools/evg_image_tool.rgr +488 -0
- package/dist/lib/evg/tools/evg_trace_bench.rgr +114 -0
- package/dist/lib/evg/tools/evg_trace_cli.rgr +662 -0
- package/dist/lib/evg/tools/evg_trace_cpp_bench.rgr +83 -0
- package/dist/lib/evg/tools/run_trace_bench.sh +74 -0
- package/dist/lib/evg/tools/run_trace_cli_smoke.sh +128 -0
- package/dist/lib/evg/web/responsive/EvgResponsiveCheck.rgr +271 -0
- package/dist/lib/evg/web/responsive/EvgResponsiveDemo.rgr +531 -0
- package/dist/lib/evg/web/responsive/README.md +97 -0
- package/dist/lib/evg/web/responsive/build.mjs +90 -0
- package/dist/lib/evg/web/responsive/dom-check.mjs +169 -0
- package/dist/lib/evg/web/responsive/index.html +177 -0
- package/dist/lib/evg/web/responsive/smoke.mjs +221 -0
- package/dist/lib/evg/web/tools/assets-client.mjs +95 -0
- package/dist/lib/evg/web/tools/boot-bench.mjs +189 -0
- package/dist/lib/evg/web/tools/inline-assets.mjs +119 -0
- package/dist/lib/evg/web/tools/minify.mjs +60 -0
- package/dist/lib/evg/web/tracer/build.mjs +87 -0
- package/dist/lib/evg/web/tracer/index.html +2805 -0
- package/dist/lib/evg/web/tracer/sample.png +0 -0
- package/dist/lib/evg/web/tracer/smoke.mjs +1162 -0
- package/dist/lib/evgr/Cargo.lock +21 -0
- package/dist/lib/evgr/Cargo.toml +19 -0
- package/dist/lib/evgr/README.md +140 -0
- package/dist/lib/evgr/bench/NativeBench.rgr +246 -0
- package/dist/lib/evgr/bench/compare.mjs +252 -0
- package/dist/lib/evgr/bench/speed.mjs +277 -0
- package/dist/lib/evgr/bin/.gitignore +3 -0
- package/dist/lib/evgr/src/bin/bench.rs +106 -0
- package/dist/lib/evgr/src/bin/smoke.rs +13 -0
- package/dist/lib/evgr/src/grid.rs +730 -0
- package/dist/lib/evgr/src/lib.rs +1003 -0
- package/dist/lib/evgr/src/style.rs +468 -0
- package/dist/lib/evgr/src/text.rs +83 -0
- package/dist/lib/image/BitReader.rgr +171 -0
- package/dist/lib/image/Buffer.rgr +173 -0
- package/dist/lib/image/DCT.rgr +283 -0
- package/dist/lib/image/Deflate.rgr +339 -0
- package/dist/lib/image/HuffmanDecoder.rgr +181 -0
- package/dist/lib/image/ImageBuffer.rgr +706 -0
- package/dist/lib/image/JPEGDecoder.rgr +808 -0
- package/dist/lib/image/PNGDecoder.rgr +544 -0
- package/dist/lib/image/PNGEncoder.rgr +388 -0
- package/dist/lib/image/PPMImage.rgr +224 -0
- package/dist/lib/image/ProgressiveJPEGDecoder.rgr +1154 -0
- package/dist/lib/image/README.md +33 -0
- package/dist/lib/image/RasterBuffer.rgr +294 -0
- package/dist/lib/image/VP8BoolDecoder.rgr +163 -0
- package/dist/lib/image/WebPDecoder.rgr +433 -0
- package/dist/lib/image/WebPLossless.rgr +1035 -0
- package/dist/lib/image/WebPLossy.rgr +1929 -0
- package/dist/lib/image/ranger.json +9 -0
- package/dist/lib/image/testdata/webp/anim_2f_24x16.webp +0 -0
- package/dist/lib/image/testdata/webp/fixtures.txt +33 -0
- package/dist/lib/image/testdata/webp/gen_fixtures.py +261 -0
- package/dist/lib/image/testdata/webp/ll_1x1.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_alpha_29x21.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_gradient_64x64.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_meta_32x32.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_noise_17x9.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal11_23x11.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal2_19x7.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal40_16x16.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_pal4_13x5.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_photo_40x30.webp +0 -0
- package/dist/lib/image/testdata/webp/ll_predictors_64x32.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_1x1.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f0_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f1_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f2_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_raw_f3_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f0_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f1_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f2_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alph_vp8l_f3_21x13.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_alpha_33x17.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_exif_15x11.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_i16_96x80.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_nofilter_24x20.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_odd_17x9.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_photo_48x40.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_q100_20x18.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_sharp_40x36.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_simple_filter_33x31.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_vpx_parts8_37x45.webp +0 -0
- package/dist/lib/image/testdata/webp/ly_vpx_skip_96x80.webp +0 -0
- package/dist/lib/image/tests/WebPDecodeTool.rgr +81 -0
- package/dist/lib/image/tests/WebPDecoderTest.rgr +1162 -0
- package/dist/lib/image/tests/run_webp_tests.sh +39 -0
- package/dist/lib/rust/RsJson.rgr +468 -0
- package/dist/lib/rust/RsPrelude.rgr +1663 -0
- package/dist/lib/shell_test.rgr +7 -7
- package/dist/lib/stdlib.rgr +21 -5
- package/dist/lib/zip/ranger.json +6 -0
- package/dist/rgrc.js +87318 -67610
- package/package.json +1010 -1040
- package/dist/README.md +0 -117
- package/dist/package.json +0 -47
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
; SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
; Buffer.rgr - A growable buffer system for Ranger
|
|
4
|
+
; Uses a linked list of fixed-size buffer chunks for efficient memory management
|
|
5
|
+
|
|
6
|
+
class BufferChunk {
|
|
7
|
+
def data:buffer (buffer_alloc 0)
|
|
8
|
+
def used:int 0
|
|
9
|
+
def capacity:int 0
|
|
10
|
+
def next@(optional):BufferChunk
|
|
11
|
+
|
|
12
|
+
Constructor (size:int) {
|
|
13
|
+
data = (buffer_alloc size)
|
|
14
|
+
capacity = size
|
|
15
|
+
used = 0
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
fn remaining:int () {
|
|
19
|
+
return (capacity - used)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn isFull:boolean () {
|
|
23
|
+
return (used >= capacity)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class GrowableBuffer {
|
|
28
|
+
def firstChunk:BufferChunk (new BufferChunk(4096))
|
|
29
|
+
def currentChunk:BufferChunk (new BufferChunk(4096))
|
|
30
|
+
def chunkSize:int 4096 ; Default chunk size: 4KB
|
|
31
|
+
def totalSize:int 0
|
|
32
|
+
|
|
33
|
+
Constructor () {
|
|
34
|
+
; Create first chunk - reassign with proper size
|
|
35
|
+
def chunk (new BufferChunk(chunkSize))
|
|
36
|
+
firstChunk = chunk
|
|
37
|
+
currentChunk = chunk
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fn setChunkSize:void (size:int) {
|
|
41
|
+
chunkSize = size
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fn allocateNewChunk:void () {
|
|
45
|
+
def newChunk (new BufferChunk(chunkSize))
|
|
46
|
+
currentChunk.next = newChunk
|
|
47
|
+
currentChunk = newChunk
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fn writeByte:void (b:int) {
|
|
51
|
+
if (currentChunk.isFull()) {
|
|
52
|
+
this.allocateNewChunk()
|
|
53
|
+
}
|
|
54
|
+
def pos:int currentChunk.used
|
|
55
|
+
buffer_set currentChunk.data pos b
|
|
56
|
+
currentChunk.used = pos + 1
|
|
57
|
+
totalSize = totalSize + 1
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
fn writeBytes:void (src:buffer srcOffset:int length:int) {
|
|
61
|
+
def i 0
|
|
62
|
+
while (i < length) {
|
|
63
|
+
def b:int (buffer_get src (srcOffset + i))
|
|
64
|
+
this.writeByte(b)
|
|
65
|
+
i = i + 1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
fn writeBuffer:void (src:buffer) {
|
|
70
|
+
def len:int (buffer_length src)
|
|
71
|
+
this.writeBytes(src 0 len)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
fn writeString:void (s:string) {
|
|
75
|
+
; Convert string to bytes and write
|
|
76
|
+
def len (strlen s)
|
|
77
|
+
def i 0
|
|
78
|
+
while (i < len) {
|
|
79
|
+
def ch:int (charAt s i)
|
|
80
|
+
this.writeByte(ch)
|
|
81
|
+
i = i + 1
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
fn writeInt16BE:void (value:int) {
|
|
86
|
+
; Write 16-bit big-endian integer
|
|
87
|
+
def highD:double (value / 256)
|
|
88
|
+
def high:int (to_int highD)
|
|
89
|
+
def low:int (value - (high * 256))
|
|
90
|
+
this.writeByte(high)
|
|
91
|
+
this.writeByte(low)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
fn writeInt32BE:void (value:int) {
|
|
95
|
+
; Write 32-bit big-endian integer
|
|
96
|
+
def b1D:double (value / 16777216)
|
|
97
|
+
def b1:int (to_int b1D)
|
|
98
|
+
def rem1:int (value - (b1 * 16777216))
|
|
99
|
+
def b2D:double (rem1 / 65536)
|
|
100
|
+
def b2:int (to_int b2D)
|
|
101
|
+
def rem2:int (rem1 - (b2 * 65536))
|
|
102
|
+
def b3D:double (rem2 / 256)
|
|
103
|
+
def b3:int (to_int b3D)
|
|
104
|
+
def b4:int (rem2 - (b3 * 256))
|
|
105
|
+
this.writeByte(b1)
|
|
106
|
+
this.writeByte(b2)
|
|
107
|
+
this.writeByte(b3)
|
|
108
|
+
this.writeByte(b4)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fn size:int () {
|
|
112
|
+
return totalSize
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fn toBuffer:buffer () {
|
|
116
|
+
; Combine all chunks into a single buffer
|
|
117
|
+
def allocSize:int totalSize
|
|
118
|
+
def result:buffer (buffer_alloc allocSize)
|
|
119
|
+
def pos 0
|
|
120
|
+
def chunk:BufferChunk firstChunk
|
|
121
|
+
def done:boolean false
|
|
122
|
+
|
|
123
|
+
while (done == false) {
|
|
124
|
+
def chunkUsed:int chunk.used
|
|
125
|
+
def i 0
|
|
126
|
+
while (i < chunkUsed) {
|
|
127
|
+
def b:int (buffer_get chunk.data i)
|
|
128
|
+
buffer_set result pos b
|
|
129
|
+
pos = pos + 1
|
|
130
|
+
i = i + 1
|
|
131
|
+
}
|
|
132
|
+
if (null? chunk.next) {
|
|
133
|
+
done = true
|
|
134
|
+
} {
|
|
135
|
+
chunk = (unwrap chunk.next)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return result
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
fn toString:string () {
|
|
143
|
+
; Convert buffer content to string (for text-based content)
|
|
144
|
+
def result ""
|
|
145
|
+
def chunk:BufferChunk firstChunk
|
|
146
|
+
def done:boolean false
|
|
147
|
+
|
|
148
|
+
while (done == false) {
|
|
149
|
+
def chunkUsed:int chunk.used
|
|
150
|
+
def i 0
|
|
151
|
+
while (i < chunkUsed) {
|
|
152
|
+
def b:int (buffer_get chunk.data i)
|
|
153
|
+
result = result + (strfromcode b)
|
|
154
|
+
i = i + 1
|
|
155
|
+
}
|
|
156
|
+
if (null? chunk.next) {
|
|
157
|
+
done = true
|
|
158
|
+
} {
|
|
159
|
+
chunk = (unwrap chunk.next)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return result
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
fn clear:void () {
|
|
167
|
+
; Reset buffer - reuse first chunk, discard others
|
|
168
|
+
def chunk (new BufferChunk(chunkSize))
|
|
169
|
+
firstChunk = chunk
|
|
170
|
+
currentChunk = chunk
|
|
171
|
+
totalSize = 0
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
; SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
; DCT.rgr - Inverse Discrete Cosine Transform for JPEG decoding
|
|
4
|
+
; Uses integer arithmetic with fixed-point scaling
|
|
5
|
+
; Updated to use int_buffer for efficient cross-language compilation
|
|
6
|
+
|
|
7
|
+
class IDCT {
|
|
8
|
+
; Precomputed cosine table: cos((2*x+1) * u * pi / 16) * 1024
|
|
9
|
+
; For each (x, u) pair where x,u = 0..7
|
|
10
|
+
; Table layout: cosTable[x * 8 + u] = cos value
|
|
11
|
+
def cosTable:int_buffer (int_buffer_alloc 64)
|
|
12
|
+
|
|
13
|
+
; Zigzag order to row-major index mapping
|
|
14
|
+
def zigzagMap:int_buffer (int_buffer_alloc 64)
|
|
15
|
+
|
|
16
|
+
Constructor () {
|
|
17
|
+
; Initialize full cosine table for IDCT
|
|
18
|
+
; cos((2*x+1) * u * pi / 16) * 1024 for x=0..7, u=0..7
|
|
19
|
+
; Row x=0: u=0,1,2,3,4,5,6,7
|
|
20
|
+
int_buffer_set cosTable 0 1024 ; cos(1*0*pi/16) = 1.000
|
|
21
|
+
int_buffer_set cosTable 1 1004 ; cos(1*1*pi/16) = 0.981
|
|
22
|
+
int_buffer_set cosTable 2 946 ; cos(1*2*pi/16) = 0.924
|
|
23
|
+
int_buffer_set cosTable 3 851 ; cos(1*3*pi/16) = 0.831
|
|
24
|
+
int_buffer_set cosTable 4 724 ; cos(1*4*pi/16) = 0.707
|
|
25
|
+
int_buffer_set cosTable 5 569 ; cos(1*5*pi/16) = 0.556
|
|
26
|
+
int_buffer_set cosTable 6 392 ; cos(1*6*pi/16) = 0.383
|
|
27
|
+
int_buffer_set cosTable 7 200 ; cos(1*7*pi/16) = 0.195
|
|
28
|
+
|
|
29
|
+
; Row x=1: cos((3)*u*pi/16)
|
|
30
|
+
int_buffer_set cosTable 8 1024
|
|
31
|
+
int_buffer_set cosTable 9 851
|
|
32
|
+
int_buffer_set cosTable 10 392
|
|
33
|
+
int_buffer_set cosTable 11 -200
|
|
34
|
+
int_buffer_set cosTable 12 -724
|
|
35
|
+
int_buffer_set cosTable 13 -1004
|
|
36
|
+
int_buffer_set cosTable 14 -946
|
|
37
|
+
int_buffer_set cosTable 15 -569
|
|
38
|
+
|
|
39
|
+
; Row x=2: cos((5)*u*pi/16)
|
|
40
|
+
int_buffer_set cosTable 16 1024
|
|
41
|
+
int_buffer_set cosTable 17 569
|
|
42
|
+
int_buffer_set cosTable 18 -392
|
|
43
|
+
int_buffer_set cosTable 19 -1004
|
|
44
|
+
int_buffer_set cosTable 20 -724
|
|
45
|
+
int_buffer_set cosTable 21 200
|
|
46
|
+
int_buffer_set cosTable 22 946
|
|
47
|
+
int_buffer_set cosTable 23 851
|
|
48
|
+
|
|
49
|
+
; Row x=3: cos((7)*u*pi/16)
|
|
50
|
+
int_buffer_set cosTable 24 1024
|
|
51
|
+
int_buffer_set cosTable 25 200
|
|
52
|
+
int_buffer_set cosTable 26 -946
|
|
53
|
+
int_buffer_set cosTable 27 -569
|
|
54
|
+
int_buffer_set cosTable 28 724
|
|
55
|
+
int_buffer_set cosTable 29 851
|
|
56
|
+
int_buffer_set cosTable 30 -392
|
|
57
|
+
int_buffer_set cosTable 31 -1004
|
|
58
|
+
|
|
59
|
+
; Row x=4: cos((9)*u*pi/16)
|
|
60
|
+
int_buffer_set cosTable 32 1024
|
|
61
|
+
int_buffer_set cosTable 33 -200
|
|
62
|
+
int_buffer_set cosTable 34 -946
|
|
63
|
+
int_buffer_set cosTable 35 569
|
|
64
|
+
int_buffer_set cosTable 36 724
|
|
65
|
+
int_buffer_set cosTable 37 -851
|
|
66
|
+
int_buffer_set cosTable 38 -392
|
|
67
|
+
int_buffer_set cosTable 39 1004
|
|
68
|
+
|
|
69
|
+
; Row x=5: cos((11)*u*pi/16)
|
|
70
|
+
int_buffer_set cosTable 40 1024
|
|
71
|
+
int_buffer_set cosTable 41 -569
|
|
72
|
+
int_buffer_set cosTable 42 -392
|
|
73
|
+
int_buffer_set cosTable 43 1004
|
|
74
|
+
int_buffer_set cosTable 44 -724
|
|
75
|
+
int_buffer_set cosTable 45 -200
|
|
76
|
+
int_buffer_set cosTable 46 946
|
|
77
|
+
int_buffer_set cosTable 47 -851
|
|
78
|
+
|
|
79
|
+
; Row x=6: cos((13)*u*pi/16)
|
|
80
|
+
int_buffer_set cosTable 48 1024
|
|
81
|
+
int_buffer_set cosTable 49 -851
|
|
82
|
+
int_buffer_set cosTable 50 392
|
|
83
|
+
int_buffer_set cosTable 51 200
|
|
84
|
+
int_buffer_set cosTable 52 -724
|
|
85
|
+
int_buffer_set cosTable 53 1004
|
|
86
|
+
int_buffer_set cosTable 54 -946
|
|
87
|
+
int_buffer_set cosTable 55 569
|
|
88
|
+
|
|
89
|
+
; Row x=7: cos((15)*u*pi/16)
|
|
90
|
+
int_buffer_set cosTable 56 1024
|
|
91
|
+
int_buffer_set cosTable 57 -1004
|
|
92
|
+
int_buffer_set cosTable 58 946
|
|
93
|
+
int_buffer_set cosTable 59 -851
|
|
94
|
+
int_buffer_set cosTable 60 724
|
|
95
|
+
int_buffer_set cosTable 61 -569
|
|
96
|
+
int_buffer_set cosTable 62 392
|
|
97
|
+
int_buffer_set cosTable 63 -200
|
|
98
|
+
|
|
99
|
+
; Zigzag to row-major mapping (JPEG standard zigzag order)
|
|
100
|
+
int_buffer_set zigzagMap 0 0
|
|
101
|
+
int_buffer_set zigzagMap 1 1
|
|
102
|
+
int_buffer_set zigzagMap 2 8
|
|
103
|
+
int_buffer_set zigzagMap 3 16
|
|
104
|
+
int_buffer_set zigzagMap 4 9
|
|
105
|
+
int_buffer_set zigzagMap 5 2
|
|
106
|
+
int_buffer_set zigzagMap 6 3
|
|
107
|
+
int_buffer_set zigzagMap 7 10
|
|
108
|
+
|
|
109
|
+
int_buffer_set zigzagMap 8 17
|
|
110
|
+
int_buffer_set zigzagMap 9 24
|
|
111
|
+
int_buffer_set zigzagMap 10 32
|
|
112
|
+
int_buffer_set zigzagMap 11 25
|
|
113
|
+
int_buffer_set zigzagMap 12 18
|
|
114
|
+
int_buffer_set zigzagMap 13 11
|
|
115
|
+
int_buffer_set zigzagMap 14 4
|
|
116
|
+
int_buffer_set zigzagMap 15 5
|
|
117
|
+
|
|
118
|
+
int_buffer_set zigzagMap 16 12
|
|
119
|
+
int_buffer_set zigzagMap 17 19
|
|
120
|
+
int_buffer_set zigzagMap 18 26
|
|
121
|
+
int_buffer_set zigzagMap 19 33
|
|
122
|
+
int_buffer_set zigzagMap 20 40
|
|
123
|
+
int_buffer_set zigzagMap 21 48
|
|
124
|
+
int_buffer_set zigzagMap 22 41
|
|
125
|
+
int_buffer_set zigzagMap 23 34
|
|
126
|
+
|
|
127
|
+
int_buffer_set zigzagMap 24 27
|
|
128
|
+
int_buffer_set zigzagMap 25 20
|
|
129
|
+
int_buffer_set zigzagMap 26 13
|
|
130
|
+
int_buffer_set zigzagMap 27 6
|
|
131
|
+
int_buffer_set zigzagMap 28 7
|
|
132
|
+
int_buffer_set zigzagMap 29 14
|
|
133
|
+
int_buffer_set zigzagMap 30 21
|
|
134
|
+
int_buffer_set zigzagMap 31 28
|
|
135
|
+
|
|
136
|
+
int_buffer_set zigzagMap 32 35
|
|
137
|
+
int_buffer_set zigzagMap 33 42
|
|
138
|
+
int_buffer_set zigzagMap 34 49
|
|
139
|
+
int_buffer_set zigzagMap 35 56
|
|
140
|
+
int_buffer_set zigzagMap 36 57
|
|
141
|
+
int_buffer_set zigzagMap 37 50
|
|
142
|
+
int_buffer_set zigzagMap 38 43
|
|
143
|
+
int_buffer_set zigzagMap 39 36
|
|
144
|
+
|
|
145
|
+
int_buffer_set zigzagMap 40 29
|
|
146
|
+
int_buffer_set zigzagMap 41 22
|
|
147
|
+
int_buffer_set zigzagMap 42 15
|
|
148
|
+
int_buffer_set zigzagMap 43 23
|
|
149
|
+
int_buffer_set zigzagMap 44 30
|
|
150
|
+
int_buffer_set zigzagMap 45 37
|
|
151
|
+
int_buffer_set zigzagMap 46 44
|
|
152
|
+
int_buffer_set zigzagMap 47 51
|
|
153
|
+
|
|
154
|
+
int_buffer_set zigzagMap 48 58
|
|
155
|
+
int_buffer_set zigzagMap 49 59
|
|
156
|
+
int_buffer_set zigzagMap 50 52
|
|
157
|
+
int_buffer_set zigzagMap 51 45
|
|
158
|
+
int_buffer_set zigzagMap 52 38
|
|
159
|
+
int_buffer_set zigzagMap 53 31
|
|
160
|
+
int_buffer_set zigzagMap 54 39
|
|
161
|
+
int_buffer_set zigzagMap 55 46
|
|
162
|
+
|
|
163
|
+
int_buffer_set zigzagMap 56 53
|
|
164
|
+
int_buffer_set zigzagMap 57 60
|
|
165
|
+
int_buffer_set zigzagMap 58 61
|
|
166
|
+
int_buffer_set zigzagMap 59 54
|
|
167
|
+
int_buffer_set zigzagMap 60 47
|
|
168
|
+
int_buffer_set zigzagMap 61 55
|
|
169
|
+
int_buffer_set zigzagMap 62 62
|
|
170
|
+
int_buffer_set zigzagMap 63 63
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
fn dezigzag:int_buffer (zigzag:int_buffer) {
|
|
174
|
+
; Convert from zigzag order to row-major 8x8 block
|
|
175
|
+
; Returns new 64-element buffer
|
|
176
|
+
def block:int_buffer (int_buffer_alloc 64)
|
|
177
|
+
|
|
178
|
+
def i 0
|
|
179
|
+
while (i < 64) {
|
|
180
|
+
def pos:int (int_buffer_get zigzagMap i)
|
|
181
|
+
def val:int (int_buffer_get zigzag i)
|
|
182
|
+
int_buffer_set block pos val
|
|
183
|
+
i = i + 1
|
|
184
|
+
}
|
|
185
|
+
return block
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
fn idct1d:void (input:int_buffer startIdx:int stride:int output:int_buffer outIdx:int outStride:int) {
|
|
189
|
+
; 1D IDCT: output[x] = sum over u of: C(u) * input[u] * cos((2x+1)*u*pi/16)
|
|
190
|
+
; C(0) = 1/sqrt(2), C(u>0) = 1
|
|
191
|
+
; cosTable is scaled by 1024
|
|
192
|
+
|
|
193
|
+
; Flat path: with every AC coefficient zero the result is the same
|
|
194
|
+
; value eight times over, because cosTable[x * 8] is 1024 for every x.
|
|
195
|
+
; Most rows of a photographic 8x8 block are like this, and after the
|
|
196
|
+
; row pass most columns are too, so this skips the bulk of the work.
|
|
197
|
+
def hasAC:boolean false
|
|
198
|
+
def uc 1
|
|
199
|
+
while (uc < 8) {
|
|
200
|
+
if ((int_buffer_get input (startIdx + (uc * stride))) != 0) {
|
|
201
|
+
hasAC = true
|
|
202
|
+
uc = 8
|
|
203
|
+
}
|
|
204
|
+
uc = uc + 1
|
|
205
|
+
}
|
|
206
|
+
if (hasAC == false) {
|
|
207
|
+
def dcSum:int 0
|
|
208
|
+
def dcCoeff:int (int_buffer_get input startIdx)
|
|
209
|
+
if (dcCoeff != 0) {
|
|
210
|
+
def dcContrib:int (dcCoeff * 1024)
|
|
211
|
+
dcContrib = (bit_shr (dcContrib * 724) 10)
|
|
212
|
+
dcSum = dcSum + dcContrib
|
|
213
|
+
}
|
|
214
|
+
def flat:int (bit_shr dcSum 11)
|
|
215
|
+
def fx 0
|
|
216
|
+
while (fx < 8) {
|
|
217
|
+
int_buffer_set output (outIdx + (fx * outStride)) flat
|
|
218
|
+
fx = fx + 1
|
|
219
|
+
}
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
def x 0
|
|
224
|
+
while (x < 8) {
|
|
225
|
+
def sum:int 0
|
|
226
|
+
def u 0
|
|
227
|
+
while (u < 8) {
|
|
228
|
+
def coeff:int (int_buffer_get input (startIdx + (u * stride)))
|
|
229
|
+
if (coeff != 0) {
|
|
230
|
+
def cosVal:int (int_buffer_get cosTable ((x * 8) + u))
|
|
231
|
+
def contrib:int (coeff * cosVal)
|
|
232
|
+
if (u == 0) {
|
|
233
|
+
; C(0) = 1/sqrt(2) ≈ 724/1024
|
|
234
|
+
contrib = (bit_shr (contrib * 724) 10)
|
|
235
|
+
}
|
|
236
|
+
sum = sum + contrib
|
|
237
|
+
}
|
|
238
|
+
u = u + 1
|
|
239
|
+
}
|
|
240
|
+
; Scale down by 1024 (cosine table scale) and divide by 2 for IDCT normalization
|
|
241
|
+
int_buffer_set output (outIdx + (x * outStride)) (bit_shr sum 11)
|
|
242
|
+
x = x + 1
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
fn transform:void (block:int_buffer output:int_buffer) {
|
|
247
|
+
; Perform 2D IDCT on 8x8 block using separable method
|
|
248
|
+
; 2D IDCT = 1D IDCT on rows, then 1D IDCT on columns
|
|
249
|
+
|
|
250
|
+
; Temporary buffer for row transform results
|
|
251
|
+
def temp:int_buffer (int_buffer_alloc 64)
|
|
252
|
+
|
|
253
|
+
; First pass: 1D IDCT on each row
|
|
254
|
+
def row 0
|
|
255
|
+
while (row < 8) {
|
|
256
|
+
def rowStart:int (row * 8)
|
|
257
|
+
this.idct1d(block rowStart 1 temp rowStart 1)
|
|
258
|
+
row = row + 1
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
; Second pass: 1D IDCT on each column
|
|
262
|
+
def col 0
|
|
263
|
+
while (col < 8) {
|
|
264
|
+
this.idct1d(temp col 8 output col 8)
|
|
265
|
+
col = col + 1
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
; Level shift: add 128 and clamp to 0-255
|
|
269
|
+
; The 2D transform has normalization factor of 1/4 already included via two 1D transforms
|
|
270
|
+
def i 0
|
|
271
|
+
while (i < 64) {
|
|
272
|
+
def val:int ((int_buffer_get output i) + 128)
|
|
273
|
+
if (val < 0) { val = 0 }
|
|
274
|
+
if (val > 255) { val = 255 }
|
|
275
|
+
int_buffer_set output i val
|
|
276
|
+
i = i + 1
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
fn transformFast:void (coeffs:int_buffer output:int_buffer) {
|
|
281
|
+
this.transform(coeffs output)
|
|
282
|
+
}
|
|
283
|
+
}
|