@swf2es/player-hosts 0.0.0-stage → 0.1.1
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/LICENSE +202 -0
- package/LICENSE.third-party +759 -0
- package/README.md +43 -2
- package/dist/indexeddb.d.ts +27 -0
- package/dist/indexeddb.d.ts.map +1 -0
- package/dist/indexeddb.js +170 -0
- package/dist/indexeddb.js.map +1 -0
- package/dist/node-worker.d.ts +2 -0
- package/dist/node-worker.d.ts.map +1 -0
- package/dist/node-worker.js +12 -0
- package/dist/node-worker.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +43 -0
- package/dist/node.js.map +1 -0
- package/dist/precompiled.d.ts +31 -0
- package/dist/precompiled.d.ts.map +1 -0
- package/dist/precompiled.js +125 -0
- package/dist/precompiled.js.map +1 -0
- package/dist/stage3d.d.ts +13 -0
- package/dist/stage3d.d.ts.map +1 -0
- package/dist/stage3d.js +61 -0
- package/dist/stage3d.js.map +1 -0
- package/dist/thread/codegen/codegen.js +308 -0
- package/dist/thread/codegen/index.js +405 -0
- package/dist/thread/format/abc-names.js +126 -0
- package/dist/thread/format/actions.js +222 -0
- package/dist/thread/format/air-descriptor.js +63 -0
- package/dist/thread/format/api-versions.js +22 -0
- package/dist/thread/format/bitmap.js +199 -0
- package/dist/thread/format/button.js +60 -0
- package/dist/thread/format/compression.js +200 -0
- package/dist/thread/format/display.js +305 -0
- package/dist/thread/format/filters.js +136 -0
- package/dist/thread/format/font.js +168 -0
- package/dist/thread/format/index.js +26 -0
- package/dist/thread/format/pbj.js +484 -0
- package/dist/thread/format/shape.js +411 -0
- package/dist/thread/format/sound.js +91 -0
- package/dist/thread/format/swf.js +163 -0
- package/dist/thread/format/tags.js +58 -0
- package/dist/thread/format/text.js +135 -0
- package/dist/thread/format/zip.js +91 -0
- package/dist/thread/native/audio/binary.js +3 -0
- package/dist/thread/native/audio/index.js +72 -0
- package/dist/thread/native/base64.js +9 -0
- package/dist/thread/native/compress/binary.js +3 -0
- package/dist/thread/native/compress/index.js +145 -0
- package/dist/thread/native/instance.js +49 -0
- package/dist/thread/native/mp3/binary.js +3 -0
- package/dist/thread/native/mp3/index.js +48 -0
- package/dist/thread/native/render/binary.js +3 -0
- package/dist/thread/native/render/bitmap-kernel.js +591 -0
- package/dist/thread/native/render/draw-kernel.js +204 -0
- package/dist/thread/native/render/dxt-encoder.js +94 -0
- package/dist/thread/native/render/index.js +10 -0
- package/dist/thread/native/render/lines.js +122 -0
- package/dist/thread/native/render/module.js +26 -0
- package/dist/thread/native/render/pixel-ops.js +235 -0
- package/dist/thread/native/render/tessellator.js +250 -0
- package/dist/thread/player/avm1/amf.js +507 -0
- package/dist/thread/player/avm1/avm1.js +1304 -0
- package/dist/thread/player/avm1/bindings.js +214 -0
- package/dist/thread/player/avm1/classes.js +75 -0
- package/dist/thread/player/avm1/clips.js +229 -0
- package/dist/thread/player/avm1/compile.js +140 -0
- package/dist/thread/player/avm1/external.js +79 -0
- package/dist/thread/player/avm1/focus.js +278 -0
- package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
- package/dist/thread/player/avm1/globals/Button.js +31 -0
- package/dist/thread/player/avm1/globals/Color.js +115 -0
- package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
- package/dist/thread/player/avm1/globals/FileReference.js +217 -0
- package/dist/thread/player/avm1/globals/Key.js +60 -0
- package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
- package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
- package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
- package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
- package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
- package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
- package/dist/thread/player/avm1/globals/Selection.js +62 -0
- package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
- package/dist/thread/player/avm1/globals/Sound.js +238 -0
- package/dist/thread/player/avm1/globals/Stage.js +12 -0
- package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
- package/dist/thread/player/avm1/globals/TextField.js +396 -0
- package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
- package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
- package/dist/thread/player/avm1/globals/XML.js +396 -0
- package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
- package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
- package/dist/thread/player/avm1/globals/drawing.js +202 -0
- package/dist/thread/player/avm1/globals/filters.js +635 -0
- package/dist/thread/player/avm1/globals/geom.js +600 -0
- package/dist/thread/player/avm1/input.js +483 -0
- package/dist/thread/player/avm1/keyboard.js +113 -0
- package/dist/thread/player/avm1/loads.js +352 -0
- package/dist/thread/player/avm1/net.js +219 -0
- package/dist/thread/player/avm1/paths.js +104 -0
- package/dist/thread/player/avm1/pointer.js +512 -0
- package/dist/thread/player/avm1/queue.js +303 -0
- package/dist/thread/player/avm1/sound.js +106 -0
- package/dist/thread/player/avm1/swf.js +141 -0
- package/dist/thread/player/avm1/timers.js +113 -0
- package/dist/thread/player/bitmap/bitmap.js +627 -0
- package/dist/thread/player/bitmap/draw.js +68 -0
- package/dist/thread/player/bitmap/dxt.js +11 -0
- package/dist/thread/player/bitmap/filters.js +656 -0
- package/dist/thread/player/bitmap/images.js +240 -0
- package/dist/thread/player/bitmap/kernel.js +65 -0
- package/dist/thread/player/bitmap/ops.js +1239 -0
- package/dist/thread/player/bitmap/pixel-bender.js +911 -0
- package/dist/thread/player/bitmap/png.js +139 -0
- package/dist/thread/player/bitmap/turbulence.js +89 -0
- package/dist/thread/player/clock.js +182 -0
- package/dist/thread/player/display/bitmapobject.js +25 -0
- package/dist/thread/player/display/bounds.js +520 -0
- package/dist/thread/player/display/buttonobject.js +305 -0
- package/dist/thread/player/display/color.js +40 -0
- package/dist/thread/player/display/container.js +150 -0
- package/dist/thread/player/display/display.js +14 -0
- package/dist/thread/player/display/displayobject.js +664 -0
- package/dist/thread/player/display/drawing.js +613 -0
- package/dist/thread/player/display/filters.js +285 -0
- package/dist/thread/player/display/geometry.js +189 -0
- package/dist/thread/player/display/gradients.js +117 -0
- package/dist/thread/player/display/graphicsdata.js +592 -0
- package/dist/thread/player/display/instantiate.js +71 -0
- package/dist/thread/player/display/matrix3d.js +373 -0
- package/dist/thread/player/display/morph.js +226 -0
- package/dist/thread/player/display/movieclip.js +680 -0
- package/dist/thread/player/display/perspective.js +193 -0
- package/dist/thread/player/display/scale9.js +236 -0
- package/dist/thread/player/display/shapeobject.js +131 -0
- package/dist/thread/player/display/shapes.js +407 -0
- package/dist/thread/player/display/textobjects.js +222 -0
- package/dist/thread/player/display/timeline.js +471 -0
- package/dist/thread/player/display/value-lists.js +40 -0
- package/dist/thread/player/display/videoobject.js +6 -0
- package/dist/thread/player/display/walk.js +127 -0
- package/dist/thread/player/files.js +334 -0
- package/dist/thread/player/hosts.js +207 -0
- package/dist/thread/player/input/avm1.js +82 -0
- package/dist/thread/player/input/context-menu.js +63 -0
- package/dist/thread/player/input/keyboard.js +458 -0
- package/dist/thread/player/input/pointer.js +863 -0
- package/dist/thread/player/input/text-editor.js +319 -0
- package/dist/thread/player/input/touch.js +209 -0
- package/dist/thread/player/localconnection.js +90 -0
- package/dist/thread/player/media/audio.js +376 -0
- package/dist/thread/player/media/dynamic-sound.js +90 -0
- package/dist/thread/player/media/extract.js +135 -0
- package/dist/thread/player/media/mp3.js +152 -0
- package/dist/thread/player/media/sounds.js +507 -0
- package/dist/thread/player/media/streaming-audio.js +133 -0
- package/dist/thread/player/player.js +616 -0
- package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
- package/dist/thread/player/playerglobal/air-library.js +8 -0
- package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
- package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
- package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
- package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
- package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
- package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
- package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
- package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
- package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
- package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
- package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
- package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
- package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
- package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
- package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
- package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
- package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
- package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
- package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
- package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
- package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
- package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
- package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
- package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
- package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
- package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
- package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
- package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
- package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
- package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
- package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
- package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
- package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
- package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
- package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
- package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
- package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
- package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
- package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
- package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
- package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
- package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
- package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
- package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
- package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
- package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
- package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
- package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
- package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
- package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
- package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
- package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
- package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
- package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
- package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
- package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
- package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
- package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
- package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
- package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
- package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
- package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
- package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
- package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
- package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
- package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
- package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
- package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
- package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
- package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
- package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
- package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
- package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
- package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
- package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
- package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
- package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
- package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
- package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
- package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
- package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
- package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
- package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
- package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
- package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
- package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
- package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
- package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
- package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
- package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
- package/dist/thread/player/playerglobal/index.js +224 -0
- package/dist/thread/player/playerglobal/libraries.js +10 -0
- package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
- package/dist/thread/player/playerglobal/toplevel.js +122 -0
- package/dist/thread/player/scripting/clipboard.js +146 -0
- package/dist/thread/player/scripting/code.js +900 -0
- package/dist/thread/player/scripting/evaluate.js +144 -0
- package/dist/thread/player/scripting/events.js +172 -0
- package/dist/thread/player/scripting/handover.js +182 -0
- package/dist/thread/player/scripting/lazy.js +38 -0
- package/dist/thread/player/scripting/lifecycle.js +272 -0
- package/dist/thread/player/scripting/loads.js +860 -0
- package/dist/thread/player/scripting/sha256.js +95 -0
- package/dist/thread/player/scripting/symbols.js +348 -0
- package/dist/thread/player/scripting/timers.js +434 -0
- package/dist/thread/player/scripting/workers.js +923 -0
- package/dist/thread/player/scripting.js +1018 -0
- package/dist/thread/player/stage.js +4 -0
- package/dist/thread/player/text/csm.js +113 -0
- package/dist/thread/player/text/css.js +167 -0
- package/dist/thread/player/text/fonts.js +97 -0
- package/dist/thread/player/text/layout.js +393 -0
- package/dist/thread/player/text/static.js +109 -0
- package/dist/thread/player/text/text.js +431 -0
- package/dist/thread/player/workers/thread.js +159 -0
- package/dist/thread/player/workers/wire.js +198 -0
- package/dist/thread/player-hosts/web-worker.js +19 -0
- package/dist/thread/runtime/avm1/activation.js +89 -0
- package/dist/thread/runtime/avm1/case.js +249 -0
- package/dist/thread/runtime/avm1/clips.js +334 -0
- package/dist/thread/runtime/avm1/control.js +280 -0
- package/dist/thread/runtime/avm1/errors.js +50 -0
- package/dist/thread/runtime/avm1/functions.js +249 -0
- package/dist/thread/runtime/avm1/globals/array.js +549 -0
- package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
- package/dist/thread/runtime/avm1/globals/date.js +436 -0
- package/dist/thread/runtime/avm1/globals/global.js +344 -0
- package/dist/thread/runtime/avm1/globals/math.js +139 -0
- package/dist/thread/runtime/avm1/globals/number.js +93 -0
- package/dist/thread/runtime/avm1/globals/string.js +201 -0
- package/dist/thread/runtime/avm1/globals/timers.js +129 -0
- package/dist/thread/runtime/avm1/host.js +5 -0
- package/dist/thread/runtime/avm1/index.js +14 -0
- package/dist/thread/runtime/avm1/inheritance.js +132 -0
- package/dist/thread/runtime/avm1/numbers.js +298 -0
- package/dist/thread/runtime/avm1/objects.js +896 -0
- package/dist/thread/runtime/avm1/operators.js +170 -0
- package/dist/thread/runtime/avm1/realm.js +529 -0
- package/dist/thread/runtime/avm1/runtime.js +882 -0
- package/dist/thread/runtime/avm1/scope.js +385 -0
- package/dist/thread/runtime/avm1/urls.js +180 -0
- package/dist/thread/runtime/avm1/values.js +97 -0
- package/dist/thread/runtime/avm2/amf-classes.js +66 -0
- package/dist/thread/runtime/avm2/amf.js +801 -0
- package/dist/thread/runtime/avm2/array-conversion.js +100 -0
- package/dist/thread/runtime/avm2/builtin-library.js +21 -0
- package/dist/thread/runtime/avm2/cache-fill.js +86 -0
- package/dist/thread/runtime/avm2/classes.js +211 -0
- package/dist/thread/runtime/avm2/definitions.js +69 -0
- package/dist/thread/runtime/avm2/descriptors.js +5 -0
- package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
- package/dist/thread/runtime/avm2/domain-memory.js +75 -0
- package/dist/thread/runtime/avm2/domain.js +280 -0
- package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
- package/dist/thread/runtime/avm2/enumeration.js +393 -0
- package/dist/thread/runtime/avm2/errors.js +45 -0
- package/dist/thread/runtime/avm2/float-library.js +66 -0
- package/dist/thread/runtime/avm2/float.js +26 -0
- package/dist/thread/runtime/avm2/hooks.js +19 -0
- package/dist/thread/runtime/avm2/index.js +38 -0
- package/dist/thread/runtime/avm2/messages.js +177 -0
- package/dist/thread/runtime/avm2/method-factories.js +95 -0
- package/dist/thread/runtime/avm2/modules.js +105 -0
- package/dist/thread/runtime/avm2/names.js +248 -0
- package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
- package/dist/thread/runtime/avm2/natives/array.js +390 -0
- package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
- package/dist/thread/runtime/avm2/natives/case.js +88 -0
- package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
- package/dist/thread/runtime/avm2/natives/date.js +581 -0
- package/dist/thread/runtime/avm2/natives/define.js +130 -0
- package/dist/thread/runtime/avm2/natives/describe.js +351 -0
- package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
- package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
- package/dist/thread/runtime/avm2/natives/float.js +96 -0
- package/dist/thread/runtime/avm2/natives/index.js +64 -0
- package/dist/thread/runtime/avm2/natives/json.js +514 -0
- package/dist/thread/runtime/avm2/natives/number.js +162 -0
- package/dist/thread/runtime/avm2/natives/object.js +237 -0
- package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
- package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
- package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
- package/dist/thread/runtime/avm2/natives/shell.js +557 -0
- package/dist/thread/runtime/avm2/natives/sort.js +377 -0
- package/dist/thread/runtime/avm2/natives/string.js +132 -0
- package/dist/thread/runtime/avm2/natives/sync.js +821 -0
- package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
- package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
- package/dist/thread/runtime/avm2/natives/vector.js +406 -0
- package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
- package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
- package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
- package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
- package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
- package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
- package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
- package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
- package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
- package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
- package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
- package/dist/thread/runtime/avm2/number-strings.js +110 -0
- package/dist/thread/runtime/avm2/numbers.js +558 -0
- package/dist/thread/runtime/avm2/options.js +16 -0
- package/dist/thread/runtime/avm2/player-messages.js +550 -0
- package/dist/thread/runtime/avm2/property-cache.js +135 -0
- package/dist/thread/runtime/avm2/runtime.js +2644 -0
- package/dist/thread/runtime/avm2/traits.js +509 -0
- package/dist/thread/runtime/index.js +7 -0
- package/dist/web-worker.d.ts +2 -0
- package/dist/web-worker.d.ts.map +1 -0
- package/dist/web-worker.js +20 -0
- package/dist/web-worker.js.map +1 -0
- package/dist/websocket.d.ts +4 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +27 -0
- package/dist/websocket.js.map +1 -0
- package/dist/workers.d.ts +35 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +171 -0
- package/dist/workers.js.map +1 -0
- package/package.json +62 -3
- package/src/indexeddb.ts +227 -0
- package/src/node-worker.ts +13 -0
- package/src/node.ts +49 -0
- package/src/precompiled.ts +166 -0
- package/src/stage3d.ts +76 -0
- package/src/web-worker.ts +24 -0
- package/src/websocket.ts +32 -0
- package/src/workers.ts +255 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// TextField.StyleSheet, AS2's, as Ruffle's (https://github.com/ruffle-rs/
|
|
2
|
+
// ruffle) core/src/avm1/globals/style_sheet.rs has it: MIT OR Apache-2.0,
|
|
3
|
+
// Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors. A sheet keeps
|
|
4
|
+
// each style object given it, copied, in `_css`, and the TextFormat its
|
|
5
|
+
// `transform` makes of it in `_styles`, both by the selector as given; and
|
|
6
|
+
// natively each TextFormat's format by the selector in lower case, which
|
|
7
|
+
// styles the HTML of a field the sheet is given to.
|
|
8
|
+
import { avm1 } from "../../../runtime/index.js";
|
|
9
|
+
import { camelCase, fontList, parseCss } from "../../text/css.js";
|
|
10
|
+
import { emptyFormat } from "../../text/text.js";
|
|
11
|
+
import { startLoad } from "./LoadVars.js";
|
|
12
|
+
import { formatOf, newTextFormat } from "./TextFormat.js";
|
|
13
|
+
const sheets = new WeakMap();
|
|
14
|
+
/** The formats of a sheet by selector in lower case; null for any other value. */
|
|
15
|
+
export function stylesOf(value) {
|
|
16
|
+
return value instanceof avm1.Avm1Object ? (sheets.get(value) ?? null) : null;
|
|
17
|
+
}
|
|
18
|
+
const FIXED = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.READ_ONLY | avm1.VERSION_7;
|
|
19
|
+
/** `TextField.StyleSheet`. */
|
|
20
|
+
export function styleSheetClass(host) {
|
|
21
|
+
const realm = host.realm;
|
|
22
|
+
const proto = new avm1.Avm1Object(realm.objectProto);
|
|
23
|
+
const constr = realm.classOf(proto, (self) => {
|
|
24
|
+
sheets.set(self, new Map());
|
|
25
|
+
return self;
|
|
26
|
+
}, () => undefined);
|
|
27
|
+
const method = (name, fn) => proto.define(name, realm.method(fn), FIXED);
|
|
28
|
+
/** An object's enumerable properties on a new Object; null for anything else. */
|
|
29
|
+
const copy = (value, version) => {
|
|
30
|
+
if (!(value instanceof avm1.Avm1Object)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const out = new avm1.Avm1Object(realm.objectProto);
|
|
34
|
+
for (const key of avm1.keys(value, version)) {
|
|
35
|
+
avm1.set(out, key, avm1.get(value, key, version), version);
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
};
|
|
39
|
+
/** `self[name]` as an object, an empty one for a primitive. */
|
|
40
|
+
const stored = (self, name, version) => realm.box(avm1.get(self, name, version), version);
|
|
41
|
+
const setStyle = (self, name, style, version) => {
|
|
42
|
+
for (const key of ["_styles", "_css"]) {
|
|
43
|
+
if (!avm1.has(self, key, version)) {
|
|
44
|
+
avm1.set(self, key, realm.newArray([], version), version);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
avm1.set(stored(self, "_css", version), name, copy(style, version), version);
|
|
48
|
+
const transform = avm1.get(self, "transform", version);
|
|
49
|
+
const format = transform instanceof avm1.Avm1Function
|
|
50
|
+
? transform.call(self, [copy(style, version)], version)
|
|
51
|
+
: undefined;
|
|
52
|
+
avm1.set(stored(self, "_styles", version), name, format, version);
|
|
53
|
+
const change = formatOf(format);
|
|
54
|
+
if (change !== null) {
|
|
55
|
+
sheets.get(self)?.set(name.toLowerCase(), change);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
method("setStyle", (self, args, version) => {
|
|
59
|
+
setStyle(self, avm1.stringOf(args[0], version), args[1], version);
|
|
60
|
+
return undefined;
|
|
61
|
+
});
|
|
62
|
+
method("clear", (self, _, version) => {
|
|
63
|
+
avm1.set(self, "_styles", realm.newArray([], version), version);
|
|
64
|
+
avm1.set(self, "_css", realm.newArray([], version), version);
|
|
65
|
+
return undefined;
|
|
66
|
+
});
|
|
67
|
+
method("getStyleNames", (self, _, version) => realm.newArray(avm1.keys(stored(self, "_css", version), version), version));
|
|
68
|
+
method("load", (self, args, version) => {
|
|
69
|
+
if (args.length === 0) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// StyleSheet shares the loading state with LoadVars, but sends no HTTP status callback.
|
|
73
|
+
startLoad(host, self, { url: avm1.stringOf(args[0], version), method: "GET", headers: [], body: null }, version, false);
|
|
74
|
+
return true;
|
|
75
|
+
});
|
|
76
|
+
method("getStyle", (self, args, version) => copy(avm1.get(stored(self, "_css", version), avm1.stringOf(args[0], version), version), version));
|
|
77
|
+
method("transform", (_, args, version) => transform(realm, args, version));
|
|
78
|
+
/** Each rule of the CSS set as a style; false for CSS Flash rejects. */
|
|
79
|
+
const parse = (self, css, version) => {
|
|
80
|
+
const rules = parseCss(css);
|
|
81
|
+
if (rules === null) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
for (const [selector, properties] of rules) {
|
|
85
|
+
if (selector === "") {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const style = new avm1.Avm1Object(realm.objectProto);
|
|
89
|
+
for (const [key, value] of properties) {
|
|
90
|
+
avm1.set(style, camelCase(key), value, version);
|
|
91
|
+
}
|
|
92
|
+
setStyle(self, selector, style, version);
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
};
|
|
96
|
+
method("parseCSS", (self, args, version) => parse(self, avm1.stringOf(args[0], version), version));
|
|
97
|
+
method("parse", (self, args, version) => parse(self, avm1.stringOf(args[0], version), version));
|
|
98
|
+
const callbackFlags = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.VERSION_7;
|
|
99
|
+
proto.define("onLoad", realm.method(() => undefined), callbackFlags);
|
|
100
|
+
proto.define("onData", realm.method((self, args, version) => {
|
|
101
|
+
const data = args[0];
|
|
102
|
+
const result = data === null || data === undefined
|
|
103
|
+
? false
|
|
104
|
+
: avm1.invoke(avm1.get(self, "parse", version), self, [data], version);
|
|
105
|
+
avm1.set(self, "loaded", result, version);
|
|
106
|
+
avm1.invoke(avm1.get(self, "onLoad", version), self, [result], version);
|
|
107
|
+
return undefined;
|
|
108
|
+
}), callbackFlags);
|
|
109
|
+
return constr;
|
|
110
|
+
}
|
|
111
|
+
/** A style object's TextFormat, by the TextFormat class `_global` has now; null for none given. */
|
|
112
|
+
function transform(realm, args, version) {
|
|
113
|
+
if (args.length === 0 || args[0] === undefined || args[0] === null) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const textFormat = avm1.get(realm.global, "TextFormat", version);
|
|
117
|
+
const proto = textFormat instanceof avm1.Avm1Object ? avm1.get(textFormat, "prototype", version) : undefined;
|
|
118
|
+
const format = emptyFormat();
|
|
119
|
+
format.kerning = false;
|
|
120
|
+
const style = args[0];
|
|
121
|
+
if (style instanceof avm1.Avm1Object) {
|
|
122
|
+
styleFormat(style, format, version);
|
|
123
|
+
}
|
|
124
|
+
return proto instanceof avm1.Avm1Object
|
|
125
|
+
? newTextFormat(proto, format)
|
|
126
|
+
: newTextFormat(realm.objectProto, format);
|
|
127
|
+
}
|
|
128
|
+
/** A number as parseInt reads it, any suffix after it ignored, to an int. */
|
|
129
|
+
const suffixed = (value, version) => avm1.parseIntAvm1(avm1.stringOf(value, version), undefined, false, version) | 0;
|
|
130
|
+
/** What a style object's CSS properties set in `format`. */
|
|
131
|
+
function styleFormat(style, format, version) {
|
|
132
|
+
const get = (name) => avm1.get(style, name, version);
|
|
133
|
+
// Some properties are read only where they convert to true.
|
|
134
|
+
const truthy = (name) => {
|
|
135
|
+
const v = get(name);
|
|
136
|
+
return avm1.toBoolean(v, version) ? v : undefined;
|
|
137
|
+
};
|
|
138
|
+
// #RRGGBB exactly, in a string.
|
|
139
|
+
const color = get("color");
|
|
140
|
+
if (typeof color === "string" && /^#[0-9a-fA-F]{6}$/.test(color)) {
|
|
141
|
+
format.color = Number.parseInt(color.slice(1), 16);
|
|
142
|
+
}
|
|
143
|
+
const display = get("display");
|
|
144
|
+
if (display !== undefined) {
|
|
145
|
+
const value = avm1.stringOf(display, version);
|
|
146
|
+
format.display = value === "none" || value === "inline" ? value : "block";
|
|
147
|
+
}
|
|
148
|
+
const family = truthy("fontFamily");
|
|
149
|
+
if (family !== undefined) {
|
|
150
|
+
format.font = fontList(avm1.stringOf(family, version));
|
|
151
|
+
}
|
|
152
|
+
const size = get("fontSize");
|
|
153
|
+
if (size !== undefined) {
|
|
154
|
+
const n = suffixed(size, version);
|
|
155
|
+
if (n > 0) {
|
|
156
|
+
format.size = n;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const fontStyle = avm1.stringOf(get("fontStyle"), version);
|
|
160
|
+
if (fontStyle === "normal" || fontStyle === "italic") {
|
|
161
|
+
format.italic = fontStyle === "italic";
|
|
162
|
+
}
|
|
163
|
+
const weight = avm1.stringOf(get("fontWeight"), version);
|
|
164
|
+
if (weight === "normal" || weight === "bold") {
|
|
165
|
+
format.bold = weight === "bold";
|
|
166
|
+
}
|
|
167
|
+
const kerning = get("kerning");
|
|
168
|
+
if (kerning !== undefined) {
|
|
169
|
+
format.kerning = kerning === "true" || suffixed(kerning, version) !== 0;
|
|
170
|
+
}
|
|
171
|
+
const leading = truthy("leading");
|
|
172
|
+
if (leading !== undefined) {
|
|
173
|
+
format.leading = suffixed(leading, version);
|
|
174
|
+
}
|
|
175
|
+
const spacing = truthy("letterSpacing");
|
|
176
|
+
if (spacing !== undefined) {
|
|
177
|
+
format.letterSpacing = avm1.parseIntAvm1(avm1.stringOf(spacing, version), undefined, false, version);
|
|
178
|
+
}
|
|
179
|
+
const left = truthy("marginLeft");
|
|
180
|
+
if (left !== undefined) {
|
|
181
|
+
format.leftMargin = Math.max(0, suffixed(left, version));
|
|
182
|
+
}
|
|
183
|
+
const right = truthy("marginRight");
|
|
184
|
+
if (right !== undefined) {
|
|
185
|
+
format.rightMargin = Math.max(0, suffixed(right, version));
|
|
186
|
+
}
|
|
187
|
+
const align = get("textAlign");
|
|
188
|
+
if (align !== undefined) {
|
|
189
|
+
const value = avm1.stringOf(align, version).toLowerCase();
|
|
190
|
+
if (["left", "center", "right", "justify"].includes(value)) {
|
|
191
|
+
format.align = value;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const decoration = get("textDecoration");
|
|
195
|
+
if (decoration !== undefined) {
|
|
196
|
+
const value = avm1.stringOf(decoration, version);
|
|
197
|
+
if (value === "none" || value === "underline") {
|
|
198
|
+
format.underline = value === "underline";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const indent = truthy("textIndent");
|
|
202
|
+
if (indent !== undefined) {
|
|
203
|
+
format.indent = suffixed(indent, version);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
// TextField, AS2's, as Ruffle's (https://github.com/ruffle-rs/ruffle)
|
|
2
|
+
// core/src/avm1/globals/text_field.rs has it: MIT OR Apache-2.0, Copyright
|
|
3
|
+
// (c) 2018-2022 Ruffle LLC and Ruffle contributors. A field's AVM1 object
|
|
4
|
+
// reads and writes the player's TextObject, its text and formats a
|
|
5
|
+
// TextModel (text/text.ts) as AS3's TextField's are; its properties are
|
|
6
|
+
// accessors on the prototype, which find the field each time, so that any
|
|
7
|
+
// other object given them reads undefined.
|
|
8
|
+
import { avm1 } from "../../../runtime/index.js";
|
|
9
|
+
import { CONTENT, TextObject } from "../../display/display.js";
|
|
10
|
+
import { maxScrollV, shownLines } from "../../text/layout.js";
|
|
11
|
+
import { applied, emptyFormat } from "../../text/text.js";
|
|
12
|
+
import { filtersProperty } from "./filters.js";
|
|
13
|
+
import { DEPTH_BIAS } from "./MovieClip.js";
|
|
14
|
+
import { stylesOf } from "./StyleSheet.js";
|
|
15
|
+
import { formatOf, newTextFormat } from "./TextFormat.js";
|
|
16
|
+
const states = new WeakMap();
|
|
17
|
+
/** `field`'s AVM1 state, at first as its DefineEditText gives it. */
|
|
18
|
+
export function stateOf(field) {
|
|
19
|
+
let state = states.get(field);
|
|
20
|
+
if (state === undefined) {
|
|
21
|
+
const edit = field.definition?.definition;
|
|
22
|
+
state = {
|
|
23
|
+
html: edit?.html ?? false,
|
|
24
|
+
variable: edit?.variable ? edit.variable : null,
|
|
25
|
+
tabIndex: undefined,
|
|
26
|
+
styleSheet: undefined,
|
|
27
|
+
selected: false,
|
|
28
|
+
};
|
|
29
|
+
states.set(field, state);
|
|
30
|
+
}
|
|
31
|
+
return state;
|
|
32
|
+
}
|
|
33
|
+
/** The field `self` is the AVM1 object of, where it is one's. */
|
|
34
|
+
function fieldOf(self) {
|
|
35
|
+
if (!(self instanceof avm1.Avm1Object) || self.display === null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const d = self.display.live()?.display?.target;
|
|
39
|
+
return d instanceof TextObject ? d : null;
|
|
40
|
+
}
|
|
41
|
+
/** The text or the field changed: drawn again, and fitted to its text under autoSize. */
|
|
42
|
+
function changed(field) {
|
|
43
|
+
field.invalidate(CONTENT);
|
|
44
|
+
field.fit();
|
|
45
|
+
}
|
|
46
|
+
/** Whether the field's text is read as HTML: an HTML field's, or one with a style sheet. */
|
|
47
|
+
const isHtml = (field) => {
|
|
48
|
+
const state = stateOf(field);
|
|
49
|
+
return state.html || state.styleSheet !== undefined;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* HTML read into the field: under a style sheet, styled by it, and kept,
|
|
53
|
+
* as htmlText gives it back and a new sheet styles it again.
|
|
54
|
+
*/
|
|
55
|
+
function parseHtml(field, html) {
|
|
56
|
+
const styles = stylesOf(stateOf(field).styleSheet);
|
|
57
|
+
if (styles === null) {
|
|
58
|
+
field.model.setHtml(html, field.multiline);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
field.htmlSource = html;
|
|
62
|
+
field.model.setHtml(html, field.multiline, false, (selector) => styles.get(selector) ?? null);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* `field`'s text set: as HTML under a style sheet. The text it has already
|
|
66
|
+
* changes nothing, its formats included (Ruffle's set_text).
|
|
67
|
+
*/
|
|
68
|
+
function setText(field, text) {
|
|
69
|
+
if (text === field.model.text) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (stateOf(field).styleSheet !== undefined) {
|
|
73
|
+
parseHtml(field, text);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
field.model.setText(text);
|
|
77
|
+
}
|
|
78
|
+
changed(field);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* `field`'s text set as HTML, as htmlText and a bound variable set it, in
|
|
82
|
+
* a field not HTML as its text. The HTML it has already changes nothing.
|
|
83
|
+
*/
|
|
84
|
+
export function setHtmlText(field, html) {
|
|
85
|
+
if (html === htmlTextOf(field)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!isHtml(field)) {
|
|
89
|
+
setText(field, html);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
parseHtml(field, html);
|
|
93
|
+
changed(field);
|
|
94
|
+
}
|
|
95
|
+
/** The field's text as HTML, the HTML a sheet styled as it was set, where it is HTML; else its text. */
|
|
96
|
+
export function htmlTextOf(field) {
|
|
97
|
+
if (!isHtml(field)) {
|
|
98
|
+
return field.model.text;
|
|
99
|
+
}
|
|
100
|
+
return field.htmlSource ?? field.model.toHtml();
|
|
101
|
+
}
|
|
102
|
+
/** An index as Rust's `as usize` makes a u32 of a value: wrapped to 32 bits. */
|
|
103
|
+
const indexOf = (v, version) => avm1.toNumber(v, version) >>> 0;
|
|
104
|
+
/** A colour as Flash keeps one: 24 bits of a u32. */
|
|
105
|
+
const rgbOf = (v, version) => (avm1.toNumber(v, version) >>> 0) & 0xffffff;
|
|
106
|
+
/** `_global.TextField`. */
|
|
107
|
+
export function textFieldClass(host) {
|
|
108
|
+
const realm = host.realm;
|
|
109
|
+
const proto = new avm1.Avm1Object(realm.objectProto);
|
|
110
|
+
const constr = realm.classOf(proto, (self) => self, () => undefined);
|
|
111
|
+
/** `_global.TextFormat.prototype`, as it is now. */
|
|
112
|
+
const formatProto = (version) => {
|
|
113
|
+
const textFormat = avm1.get(realm.global, "TextFormat", version);
|
|
114
|
+
return textFormat instanceof avm1.Avm1Object
|
|
115
|
+
? avm1.get(textFormat, "prototype", version)
|
|
116
|
+
: undefined;
|
|
117
|
+
};
|
|
118
|
+
const textFormat = (format, version) => {
|
|
119
|
+
const p = formatProto(version);
|
|
120
|
+
return p instanceof avm1.Avm1Object ? newTextFormat(p, format) : undefined;
|
|
121
|
+
};
|
|
122
|
+
const method = (name, flags, fn) => {
|
|
123
|
+
proto.define(name, realm.method((self, args, version) => {
|
|
124
|
+
const field = fieldOf(self);
|
|
125
|
+
return field === null ? undefined : fn(field, args, version);
|
|
126
|
+
}), avm1.DONT_ENUM | avm1.DONT_DELETE | flags);
|
|
127
|
+
};
|
|
128
|
+
const property = (name, get, set, flags = 0) => {
|
|
129
|
+
const p = proto.add(name, undefined, flags);
|
|
130
|
+
p.get = realm.method((self, _, version) => {
|
|
131
|
+
const field = fieldOf(self);
|
|
132
|
+
return field === null ? undefined : get(field, version);
|
|
133
|
+
});
|
|
134
|
+
if (set !== null) {
|
|
135
|
+
p.set = realm.method((self, args, version) => {
|
|
136
|
+
const field = fieldOf(self);
|
|
137
|
+
if (field !== null) {
|
|
138
|
+
set(field, args[0], version);
|
|
139
|
+
}
|
|
140
|
+
return undefined;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const flag = (name, get, set) => property(name, get, (field, value, version) => {
|
|
145
|
+
set(field, avm1.toBoolean(value, version));
|
|
146
|
+
changed(field);
|
|
147
|
+
});
|
|
148
|
+
// The selection replaced, at the start where there is none, the caret after what came in.
|
|
149
|
+
method("replaceSel", avm1.VERSION_6, (field, args, version) => {
|
|
150
|
+
const text = avm1.stringOf(args[0], version);
|
|
151
|
+
const state = stateOf(field);
|
|
152
|
+
const [begin, end] = state.selected ? field.selection : [0, 0];
|
|
153
|
+
state.selected = true;
|
|
154
|
+
field.model.replace(begin, end, text);
|
|
155
|
+
field.select(begin + text.length, begin + text.length);
|
|
156
|
+
changed(field);
|
|
157
|
+
host.textChanged(field);
|
|
158
|
+
return undefined;
|
|
159
|
+
});
|
|
160
|
+
// [begin, end), one character from begin, or the whole text.
|
|
161
|
+
method("getTextFormat", avm1.VERSION_6, (field, args, version) => {
|
|
162
|
+
const length = field.model.text.length;
|
|
163
|
+
let begin = 0;
|
|
164
|
+
let end = length;
|
|
165
|
+
if (args.length > 0) {
|
|
166
|
+
begin = indexOf(args[0], version);
|
|
167
|
+
end = args.length > 1 ? indexOf(args[1], version) : begin + 1;
|
|
168
|
+
}
|
|
169
|
+
end = Math.min(end, length);
|
|
170
|
+
if (begin >= end) {
|
|
171
|
+
return textFormat(emptyFormat(), version);
|
|
172
|
+
}
|
|
173
|
+
return textFormat(field.model.formatOf(begin, end), version);
|
|
174
|
+
});
|
|
175
|
+
method("setTextFormat", avm1.VERSION_6, (field, args, version) => {
|
|
176
|
+
const length = field.model.text.length;
|
|
177
|
+
let begin = 0;
|
|
178
|
+
let end = length;
|
|
179
|
+
let format;
|
|
180
|
+
if (args.length >= 3) {
|
|
181
|
+
begin = indexOf(args[0], version);
|
|
182
|
+
end = indexOf(args[1], version);
|
|
183
|
+
format = args[2];
|
|
184
|
+
}
|
|
185
|
+
else if (args.length === 2) {
|
|
186
|
+
begin = indexOf(args[0], version);
|
|
187
|
+
end = begin + 1;
|
|
188
|
+
format = args[1];
|
|
189
|
+
}
|
|
190
|
+
else if (args.length === 1) {
|
|
191
|
+
format = args[0];
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
const change = formatOf(format);
|
|
197
|
+
end = Math.min(end, length);
|
|
198
|
+
if (change !== null && begin < end) {
|
|
199
|
+
field.model.setFormat(change, begin, end);
|
|
200
|
+
changed(field);
|
|
201
|
+
}
|
|
202
|
+
return undefined;
|
|
203
|
+
});
|
|
204
|
+
method("removeTextField", avm1.VERSION_6, (field) => {
|
|
205
|
+
host.remove(field);
|
|
206
|
+
return undefined;
|
|
207
|
+
});
|
|
208
|
+
method("getNewTextFormat", avm1.VERSION_6, (field, _, version) => textFormat(field.model.defaultFormat, version));
|
|
209
|
+
method("setNewTextFormat", avm1.VERSION_6, (field, args) => {
|
|
210
|
+
const change = formatOf(args[0]);
|
|
211
|
+
if (change !== null) {
|
|
212
|
+
field.model.defaultFormat = applied(field.model.defaultFormat, change);
|
|
213
|
+
}
|
|
214
|
+
return undefined;
|
|
215
|
+
});
|
|
216
|
+
method("getDepth", avm1.READ_ONLY | avm1.VERSION_6, (field) => field.depth === null ? undefined : field.depth - DEPTH_BIAS);
|
|
217
|
+
// The indices as Rust casts them to usize, NaN and below 0 to 0; a range backwards is none.
|
|
218
|
+
method("replaceText", avm1.VERSION_7, (field, args, version) => {
|
|
219
|
+
const model = field.model;
|
|
220
|
+
const usize = (v) => Math.max(0, Math.trunc(avm1.toNumber(v, version)) || 0);
|
|
221
|
+
const from = usize(args[0]);
|
|
222
|
+
const to = usize(args[1]);
|
|
223
|
+
const text = avm1.stringOf(args[2], version);
|
|
224
|
+
if (to < from) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
model.replace(Math.min(from, model.text.length), Math.min(to, model.text.length), text);
|
|
228
|
+
changed(field);
|
|
229
|
+
return undefined;
|
|
230
|
+
});
|
|
231
|
+
// An unknown one is left as it was.
|
|
232
|
+
property("gridFitType", (field) => field.gridFitType, (field, value, version) => {
|
|
233
|
+
const type = avm1.stringOf(value, version);
|
|
234
|
+
if (type === "pixel" || type === "subpixel" || type === "none") {
|
|
235
|
+
field.gridFitType = type;
|
|
236
|
+
field.invalidate(CONTENT);
|
|
237
|
+
}
|
|
238
|
+
}, avm1.VERSION_8);
|
|
239
|
+
property("antiAliasType", (field) => field.antiAliasType, (field, value, version) => {
|
|
240
|
+
const type = avm1.stringOf(value, version);
|
|
241
|
+
if ((type === "normal" || type === "advanced") && type !== field.antiAliasType) {
|
|
242
|
+
field.antiAliasType = type;
|
|
243
|
+
changed(field);
|
|
244
|
+
}
|
|
245
|
+
}, avm1.VERSION_8);
|
|
246
|
+
property("thickness", (field) => field.thickness, (field, value, version) => {
|
|
247
|
+
field.thickness = Math.fround(avm1.toNumber(value, version));
|
|
248
|
+
field.invalidate(CONTENT);
|
|
249
|
+
}, avm1.VERSION_8);
|
|
250
|
+
property("sharpness", (field) => field.sharpness, (field, value, version) => {
|
|
251
|
+
field.sharpness = Math.fround(avm1.toNumber(value, version));
|
|
252
|
+
field.invalidate(CONTENT);
|
|
253
|
+
}, avm1.VERSION_8);
|
|
254
|
+
// No AS2 filter draws yet: a field has none, and takes none.
|
|
255
|
+
property("filters", (_, version) => realm.newArray([], version), () => { }, avm1.DONT_DELETE | avm1.VERSION_8);
|
|
256
|
+
property("scroll", (field) => field.scrollV,
|
|
257
|
+
// NaN, a negative line and one past where Flash's count overflows are the first (Ruffle).
|
|
258
|
+
(field, value, version) => {
|
|
259
|
+
const n = avm1.toNumber(value, version);
|
|
260
|
+
const line = Number.isNaN(n) || n < 0 || n >= 767100486418433 ? 1 : Math.trunc(n);
|
|
261
|
+
field.scrollV = Math.max(1, Math.min(line, maxScrollV(field)));
|
|
262
|
+
field.invalidate(CONTENT);
|
|
263
|
+
});
|
|
264
|
+
property("maxscroll", (field) => maxScrollV(field), null);
|
|
265
|
+
property("borderColor", (field) => field.borderColor, (field, value, version) => {
|
|
266
|
+
field.borderColor = rgbOf(value, version);
|
|
267
|
+
changed(field);
|
|
268
|
+
});
|
|
269
|
+
property("backgroundColor", (field) => field.backgroundColor, (field, value, version) => {
|
|
270
|
+
field.backgroundColor = rgbOf(value, version);
|
|
271
|
+
changed(field);
|
|
272
|
+
});
|
|
273
|
+
// The new text's colour, and every character's.
|
|
274
|
+
property("textColor", (field) => field.model.defaultFormat.color, (field, value, version) => {
|
|
275
|
+
const color = rgbOf(value, version);
|
|
276
|
+
const model = field.model;
|
|
277
|
+
const change = emptyFormat();
|
|
278
|
+
change.color = color;
|
|
279
|
+
model.setFormat(change, 0, model.text.length);
|
|
280
|
+
model.defaultFormat = { ...model.defaultFormat, color };
|
|
281
|
+
changed(field);
|
|
282
|
+
});
|
|
283
|
+
// A u32, kept as an int; nothing is none.
|
|
284
|
+
property("tabIndex", (field) => {
|
|
285
|
+
const index = stateOf(field).tabIndex;
|
|
286
|
+
return index === undefined ? undefined : index >>> 0;
|
|
287
|
+
}, (field, value, version) => {
|
|
288
|
+
stateOf(field).tabIndex =
|
|
289
|
+
value === undefined || value === null ? undefined : avm1.toNumber(value, version) | 0;
|
|
290
|
+
});
|
|
291
|
+
property("autoSize", (field) => field.autoSize, (field, value, version) => {
|
|
292
|
+
let mode = "none";
|
|
293
|
+
if (typeof value === "boolean") {
|
|
294
|
+
mode = value ? "left" : "none";
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
const name = avm1.stringOf(value, version).toLowerCase();
|
|
298
|
+
mode = name === "left" || name === "center" || name === "right" ? name : "none";
|
|
299
|
+
}
|
|
300
|
+
field.autoSize = mode;
|
|
301
|
+
field.fit();
|
|
302
|
+
});
|
|
303
|
+
property("text", (field) => field.model.text, (field, value, version) => {
|
|
304
|
+
setText(field, avm1.stringOf(value, version));
|
|
305
|
+
host.textChanged(field);
|
|
306
|
+
});
|
|
307
|
+
// Anything but input or dynamic, in any case, leaves it.
|
|
308
|
+
property("type", (field) => field.type, (field, value, version) => {
|
|
309
|
+
const type = avm1.stringOf(value, version).toLowerCase();
|
|
310
|
+
if (type === "input" || type === "dynamic") {
|
|
311
|
+
field.type = type;
|
|
312
|
+
changed(field);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
// Read as HTML only in an HTML field; it does not change a bound variable.
|
|
316
|
+
property("htmlText", (field) => htmlTextOf(field), (field, value, version) => setHtmlText(field, avm1.stringOf(value, version)));
|
|
317
|
+
// None is null.
|
|
318
|
+
property("variable", (field) => stateOf(field).variable, (field, value, version) => {
|
|
319
|
+
const name = value === undefined || value === null ? null : avm1.stringOf(value, version);
|
|
320
|
+
stateOf(field).variable = name === "" ? null : name;
|
|
321
|
+
host.variableChanged(field);
|
|
322
|
+
});
|
|
323
|
+
property("hscroll", (field) => field.scrollH, (field, value, version) => {
|
|
324
|
+
field.scrollH = Math.max(0, avm1.toNumber(value, version) | 0);
|
|
325
|
+
field.invalidate(CONTENT);
|
|
326
|
+
});
|
|
327
|
+
property("maxhscroll", (field) => maxHScroll(field), null);
|
|
328
|
+
// None is null.
|
|
329
|
+
property("maxChars", (field) => (field.maxChars === 0 ? null : field.maxChars), (field, value, version) => {
|
|
330
|
+
field.maxChars = avm1.toNumber(value, version) | 0;
|
|
331
|
+
});
|
|
332
|
+
flag("embedFonts", (field) => field.embedFonts, (field, v) => {
|
|
333
|
+
field.embedFonts = v;
|
|
334
|
+
});
|
|
335
|
+
property("html", (field) => stateOf(field).html, (field, value, version) => {
|
|
336
|
+
stateOf(field).html = avm1.toBoolean(value, version);
|
|
337
|
+
});
|
|
338
|
+
flag("border", (field) => field.border, (field, v) => {
|
|
339
|
+
field.border = v;
|
|
340
|
+
});
|
|
341
|
+
flag("background", (field) => field.background, (field, v) => {
|
|
342
|
+
field.background = v;
|
|
343
|
+
});
|
|
344
|
+
flag("wordWrap", (field) => field.wordWrap, (field, v) => {
|
|
345
|
+
field.wordWrap = v;
|
|
346
|
+
});
|
|
347
|
+
flag("password", (field) => field.displayAsPassword, (field, v) => {
|
|
348
|
+
field.displayAsPassword = v;
|
|
349
|
+
});
|
|
350
|
+
flag("multiline", (field) => field.multiline, (field, v) => {
|
|
351
|
+
field.multiline = v;
|
|
352
|
+
});
|
|
353
|
+
flag("selectable", (field) => field.selectable, (field, v) => {
|
|
354
|
+
field.selectable = v;
|
|
355
|
+
});
|
|
356
|
+
property("length", (field) => field.model.text.length, null);
|
|
357
|
+
property("bottomScroll", (field) => field.scrollV + shownLines(field, field.scrollV - 1) - 1, null);
|
|
358
|
+
// In whole pixels, cut.
|
|
359
|
+
property("textWidth", (field) => Math.trunc(field.layout.width / 20), null);
|
|
360
|
+
property("textHeight", (field) => Math.trunc(field.layout.height / 20), null);
|
|
361
|
+
// None, and an empty one, is null.
|
|
362
|
+
property("restrict", (field) => field.restrict, (field, value, version) => {
|
|
363
|
+
const restrict = value === undefined || value === null ? "" : avm1.stringOf(value, version);
|
|
364
|
+
field.restrict = restrict === "" ? null : restrict;
|
|
365
|
+
});
|
|
366
|
+
flag("condenseWhite", (field) => field.condenseWhite, (field, v) => {
|
|
367
|
+
field.condenseWhite = v;
|
|
368
|
+
});
|
|
369
|
+
flag("mouseWheelEnabled", (field) => field.mouseWheelEnabled, (field, v) => {
|
|
370
|
+
field.mouseWheelEnabled = v;
|
|
371
|
+
});
|
|
372
|
+
// Any object but a clip, and nothing for anything else (Ruffle, whose clips are values of
|
|
373
|
+
// their own). The HTML a sheet styled is styled again by a new one, and forgotten with
|
|
374
|
+
// none (Ruffle's set_style_sheet).
|
|
375
|
+
property("styleSheet", (field) => stateOf(field).styleSheet, (field, value) => {
|
|
376
|
+
const sheet = value instanceof avm1.Avm1Object && value.typeOf() !== "movieclip";
|
|
377
|
+
stateOf(field).styleSheet = sheet ? value : undefined;
|
|
378
|
+
if (stateOf(field).styleSheet === undefined) {
|
|
379
|
+
field.htmlSource = null;
|
|
380
|
+
}
|
|
381
|
+
else if (field.htmlSource !== null) {
|
|
382
|
+
parseHtml(field, field.htmlSource);
|
|
383
|
+
}
|
|
384
|
+
changed(field);
|
|
385
|
+
});
|
|
386
|
+
filtersProperty(realm, proto, avm1.DONT_DELETE | avm1.VERSION_8, (self) => fieldOf(self), () => host.filterFaces);
|
|
387
|
+
return { constr, proto };
|
|
388
|
+
}
|
|
389
|
+
/** How far the text scrolls sideways: its width past the field's, in whole pixels. */
|
|
390
|
+
function maxHScroll(field) {
|
|
391
|
+
if (field.wordWrap) {
|
|
392
|
+
return 0;
|
|
393
|
+
}
|
|
394
|
+
const over = field.layout.width / 20 + 4 - field.width;
|
|
395
|
+
return over > 0 ? Math.trunc(over) : 0;
|
|
396
|
+
}
|