author | Wes Kocher <wkocher@mozilla.com> |
Thu, 04 Sep 2014 18:30:01 -0700 | |
changeset 226883 | db7212847c14f56dc02dd5cab57efc1ce23dca69 |
parent 226820 | 4e7e1ce170ab031653d6ee4c96d57765b2e1276e (current diff) |
parent 226882 | 3fe58eba40c1ed9d2d0edcf3f3ed710b6502ea56 (diff) |
child 226884 | dddbe46f3ceb247018a0ec37fa43525ba3bfdb16 |
child 226939 | b6f79b0ae7c377f9abdb916f9b63905d287054de |
child 227012 | 19a76cb966351e70c200071a4a12a7d3d435c77a |
child 227037 | 9aa7c2b35358a83545f0a2124e980e3ddcc1ed36 |
push id | 4187 |
push user | bhearsum@mozilla.com |
push date | Fri, 28 Nov 2014 15:29:12 +0000 |
treeherder | mozilla-beta@f23cc6a30c11 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 35.0a1 |
first release with | nightly linux32
db7212847c14
/
35.0a1
/
20140905030206
/
files
nightly linux64
db7212847c14
/
35.0a1
/
20140905030206
/
files
nightly mac
db7212847c14
/
35.0a1
/
20140905030206
/
files
nightly win32
db7212847c14
/
35.0a1
/
20140905030206
/
files
nightly win64
db7212847c14
/
35.0a1
/
20140905030206
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
35.0a1
/
20140905030206
/
pushlog to previous
nightly linux64
35.0a1
/
20140905030206
/
pushlog to previous
nightly mac
35.0a1
/
20140905030206
/
pushlog to previous
nightly win32
35.0a1
/
20140905030206
/
pushlog to previous
nightly win64
35.0a1
/
20140905030206
/
pushlog to previous
|
browser/extensions/shumway/content/shumway-worker.js | file | annotate | diff | comparison | revisions | |
browser/extensions/shumway/content/shumway.js | file | annotate | diff | comparison | revisions | |
browser/extensions/shumway/content/web/avm-sandbox.js | file | annotate | diff | comparison | revisions | |
browser/extensions/shumway/content/web/preview.js | file | annotate | diff | comparison | revisions | |
browser/extensions/shumway/content/web/simple.html | file | annotate | diff | comparison | revisions | |
build/clang-plugin/configure | file | annotate | diff | comparison | revisions | |
dom/canvas/ImageEncoder.cpp | file | annotate | diff | comparison | revisions | |
dom/canvas/ImageEncoder.h | file | annotate | diff | comparison | revisions | |
dom/ipc/TabChild.cpp | file | annotate | diff | comparison | revisions |
--- a/.gitignore +++ b/.gitignore @@ -56,8 +56,11 @@ python/psutil/build/ browser/devtools/chrome.manifest toolkit/devtools/chrome.manifest # Tag files generated by GNU Global GTAGS GRTAGS GSYMS GPATH + +# Git clone directory for updating web-platform-tests +testing/web-platform/sync/
--- a/.hgignore +++ b/.hgignore @@ -70,8 +70,11 @@ GTAGS GRTAGS GSYMS GPATH # Unit tests for Loop ^browser/components/loop/standalone/content/config\.js$ ^browser/components/loop/standalone/node_modules/ + +# Git clone directory for updating web-platform-tests +^testing/web-platform/sync/
--- a/Makefile.in +++ b/Makefile.in @@ -310,32 +310,9 @@ source-package install: # Every export rule depends on config/export, but the rule for config/export # doesn't exist when building js non-standalone. .PHONY: config/export config/export: endif -# Interdependencies for parallel export. -js/xpconnect/src/export: dom/bindings/export xpcom/xpidl/export -accessible/xpcom/export: xpcom/xpidl/export -ifdef ENABLE_CLANG_PLUGIN -js/src/export config/host: build/clang-plugin/export -endif - -# Interdependencies that moz.build world don't know about yet for compilation. -# Note some others are hardcoded or "guessed" in recursivemake.py and emitter.py -ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3) -toolkit/library/target: widget/gtk/mozgtk/gtk3/target -endif -ifdef MOZ_LDAP_XPCOM -ldap/target: config/external/nss/target mozglue/build/target -toolkit/library/target: ldap/target -endif -ifndef MOZ_FOLD_LIBS -ifndef MOZ_NATIVE_SQLITE -config/external/nss/target: db/sqlite3/src/target -endif -endif -ifeq ($(MOZ_REPLACE_MALLOC_LINKAGE),dummy library) -mozglue/build/target: memory/replace/dummy/target -endif +# There used to be build interdependencies here. They are now in config/recurse.mk
--- a/accessible/base/nsAccessiblePivot.cpp +++ b/accessible/base/nsAccessiblePivot.cpp @@ -672,16 +672,23 @@ nsAccessiblePivot::AdjustStartPosition(A NS_ENSURE_SUCCESS(*aResult, nullptr); if (filtered & nsIAccessibleTraversalRule::FILTER_IGNORE_SUBTREE) { *aFilterResult = filtered; matched = temp; } } } + if (aAccessible == mPosition && mStartOffset != -1 && mEndOffset != -1) { + HyperTextAccessible* text = aAccessible->AsHyperText(); + if (text) { + matched = text->GetChildAtOffset(mStartOffset); + } + } + return matched; } Accessible* nsAccessiblePivot::SearchBackward(Accessible* aAccessible, nsIAccessibleTraversalRule* aRule, bool aSearchCurrent, nsresult* aResult)
--- a/accessible/tests/mochitest/jsat/test_content_text.html +++ b/accessible/tests/mochitest/jsat/test_content_text.html @@ -107,26 +107,16 @@ speak: 'These', speak_checkFunc: 'todo_is', // Bug 980509 android: [{ eventType: AndroidEvent.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY, fromIndex: 0, toIndex: 5 }] }], - // XXX: Bug 980510: doing next after text traversal should - // bring us to the next paragraph. - [ContentMessages.simpleMoveNext, { - speak: 'You\'re a good guy, mon frere. ' + - 'That means brother in French. ' + - 'I don\'t know how I know that. ' + - 'I took four years of Spanish.', - speak_checkFunc: 'todo_is' // Bug 980510 - }], - // XXX: extra move op here because of bug 980510. [ContentMessages.simpleMoveNext, { speak: 'You\'re a good guy, mon frere. ' + 'That means brother in French. ' + 'I don\'t know how I know that. ' + 'I took four years of Spanish.', }], // XXX: Word boundary should be past the apostraphe. [ContentMessages.moveNextBy('word'), {
--- a/aclocal.m4 +++ b/aclocal.m4 @@ -29,16 +29,17 @@ builtin(include, build/autoconf/expandli builtin(include, build/autoconf/arch.m4)dnl builtin(include, build/autoconf/android.m4)dnl builtin(include, build/autoconf/zlib.m4)dnl builtin(include, build/autoconf/linux.m4)dnl builtin(include, build/autoconf/python-virtualenv.m4)dnl builtin(include, build/autoconf/winsdk.m4)dnl builtin(include, build/autoconf/icu.m4)dnl builtin(include, build/autoconf/ffi.m4)dnl +builtin(include, build/autoconf/clang-plugin.m4)dnl MOZ_PROG_CHECKMSYS() # Read the user's .mozconfig script. We can't do this in # configure.in: autoconf puts the argument parsing code above anything # expanded from configure.in, and we need to get the configure options # from .mozconfig in place before that argument parsing code. MOZ_READ_MOZCONFIG(.)
--- a/browser/base/content/test/plugins/browser_CTP_crashreporting.js +++ b/browser/base/content/test/plugins/browser_CTP_crashreporting.js @@ -104,19 +104,19 @@ function onSubmitStatus(subj, topic, dat return; let propBag = subj.QueryInterface(Ci.nsIPropertyBag); if (data == "success") { let remoteID = getPropertyBagValue(propBag, "serverCrashID"); ok(!!remoteID, "serverCrashID should be set"); // Remove the submitted report file. - let file = Services.dirsvc.get("UAppData", Ci.nsILocalFile); - file.append("Crash Reports"); - file.append("submitted"); + let file = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsILocalFile); + file.initWithPath(Services.crashmanager._submittedDumpsDir); file.append(remoteID + ".txt"); ok(file.exists(), "Submitted report file should exist"); file.remove(false); } let extra = getPropertyBagValue(propBag, "extra"); ok(extra instanceof Ci.nsIPropertyBag, "Extra data should be property bag");
--- a/browser/base/content/test/plugins/browser_pluginCrashCommentAndURL.js +++ b/browser/base/content/test/plugins/browser_pluginCrashCommentAndURL.js @@ -1,12 +1,13 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +Cu.import("resource://gre/modules/CrashSubmit.jsm", this); Cu.import("resource://gre/modules/Services.jsm"); const CRASH_URL = "http://example.com/browser/browser/base/content/test/plugins/plugin_crashCommentAndURL.html"; const SERVER_URL = "http://example.com/browser/toolkit/crashreporter/test/browser/crashreport.sjs"; function test() { // Crashing the plugin takes up a lot of time, so extend the test timeout. @@ -80,27 +81,33 @@ function doNextRun() { // And now wait for the crash. } catch (err) { failWithException(err); finish(); } } -function onCrash() { +function onCrash(event) { try { let plugin = gBrowser.contentDocument.getElementById("plugin"); let elt = gPluginHandler.getPluginUI.bind(gPluginHandler, plugin); let style = gBrowser.contentWindow.getComputedStyle(elt("pleaseSubmit")); is(style.display, currentRun.shouldSubmissionUIBeVisible ? "block" : "none", "Submission UI visibility should be correct"); if (!currentRun.shouldSubmissionUIBeVisible) { - // Done with this run. + // Done with this run. We don't submit the crash, so we will have to + // remove the dump manually. + let propBag = event.detail.QueryInterface(Ci.nsIPropertyBag2); + let crashID = propBag.getPropertyAsAString("pluginDumpID"); + ok(!!crashID, "pluginDumpID should be set"); + CrashSubmit.delete(crashID); + doNextRun(); return; } elt("submitComment").value = currentRun.comment; elt("submitURLOptIn").checked = currentRun.urlOptIn; elt("submitButton").click(); // And now wait for the submission status notification. } @@ -111,18 +118,31 @@ function onCrash() { } function onSubmitStatus(subj, topic, data) { try { // Wait for success or failed, doesn't matter which. if (data != "success" && data != "failed") return; - let extra = getPropertyBagValue(subj.QueryInterface(Ci.nsIPropertyBag), - "extra"); + let propBag = subj.QueryInterface(Ci.nsIPropertyBag); + if (data == "success") { + let remoteID = getPropertyBagValue(propBag, "serverCrashID"); + ok(!!remoteID, "serverCrashID should be set"); + + // Remove the submitted report file. + let file = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsILocalFile); + file.initWithPath(Services.crashmanager._submittedDumpsDir); + file.append(remoteID + ".txt"); + ok(file.exists(), "Submitted report file should exist"); + file.remove(false); + } + + let extra = getPropertyBagValue(propBag, "extra"); ok(extra instanceof Ci.nsIPropertyBag, "Extra data should be property bag"); let val = getPropertyBagValue(extra, "PluginUserComment"); if (currentRun.comment) is(val, currentRun.comment, "Comment in extra data should match comment in textbox"); else ok(val === undefined,
--- a/browser/extensions/shumway/content/ShumwayStreamConverter.jsm +++ b/browser/extensions/shumway/content/ShumwayStreamConverter.jsm @@ -1,10 +1,8 @@ -/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */ -/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* * Copyright 2013 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 @@ -424,23 +422,16 @@ ChromeActions.prototype = { return; } // TODO other security checks? let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper); clipboard.copyString(data); }, - unsafeSetClipboard: function (data) { - if (typeof data !== 'string') { - return; - } - let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper); - clipboard.copyString(data); - }, endActivation: function () { if (ActivationQueue.currentNonActive === this) { ActivationQueue.activateNext(); } }, reportTelemetry: function (data) { var topic = data.topic; switch (topic) { @@ -547,18 +538,17 @@ RequestListener.prototype.receive = func var sync = event.detail.sync; var actions = this.actions; if (!(action in actions)) { log('Unknown action: ' + action); return; } if (sync) { var response = actions[action].call(this.actions, data); - var detail = event.detail; - detail.response = response; + event.detail.response = response; } else { var response; if (event.detail.callback) { var cookie = event.detail.cookie; response = function sendResponse(response) { var doc = actions.document; try { var listener = doc.createEvent('CustomEvent'); @@ -675,45 +665,39 @@ var ActivationQueue = { log('Timeout during shumway instance initialization'); this.activateNext(); }.bind(this), ACTIVATION_TIMEOUT, Ci.nsITimer.TYPE_ONE_SHOT); } }; function activateShumwayScripts(window, preview) { function loadScripts(scripts, callback) { - function scriptLoaded() { - leftToLoad--; - if (leftToLoad === 0) { + function loadScript(i) { + if (i >= scripts.length) { callback(); + return; } - } - var leftToLoad = scripts.length; - var document = window.document.wrappedJSObject; - var head = document.getElementsByTagName('head')[0]; - for (var i = 0; i < scripts.length; i++) { var script = document.createElement('script'); script.type = "text/javascript"; script.src = scripts[i]; - script.onload = scriptLoaded; + script.onload = function () { + loadScript(i + 1); + }; head.appendChild(script); } + var document = window.document.wrappedJSObject; + var head = document.getElementsByTagName('head')[0]; + loadScript(0); } function initScripts() { - if (preview) { - loadScripts(['resource://shumway/web/preview.js'], function () { - window.wrappedJSObject.runSniffer(); - }); - } else { - loadScripts(['resource://shumway/shumway.js', - 'resource://shumway/web/avm-sandbox.js'], function () { - window.wrappedJSObject.runViewer(); - }); - } + loadScripts(['resource://shumway/shumway.gfx.js', + 'resource://shumway/web/viewer.js'], function () { + window.wrappedJSObject.runViewer(); + }); } window.wrappedJSObject.SHUMWAY_ROOT = "resource://shumway/"; if (window.document.readyState === "interactive" || window.document.readyState === "complete") { initScripts(); } else {
--- a/browser/extensions/shumway/content/ShumwayTelemetry.jsm +++ b/browser/extensions/shumway/content/ShumwayTelemetry.jsm @@ -1,10 +1,8 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* Copyright 2013 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *
index 9295f6df8f4a6c7f69b9e909b5c1fbe4f86e3ea8..79d7cfb004bbef92db888c56630746b2db1bb2aa GIT binary patch literal 26644 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 ZV*b_Kzm)qobN{t`LbuS#HJxGe{|9Kdo|OOq
index 56268036afb9df5ebac4520d24f29160ce372db7..32981fe49ce173665c877cd454ab44f2f0ba653a GIT binary patch literal 81806 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ζ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
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/blurh.frag @@ -0,0 +1,127 @@ +/* +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +out vec4 FragmentColor; + +uniform float offset[5] = float[]( 0.0, 1.0, 2.0, 3.0, 4.0 ); +uniform float weight[5] = float[]( 0.2270270270, 0.1945945946, 0.1216216216, + 0.0540540541, 0.0162162162 ); + +void main(void) +{ + FragmentColor = texture2D( uSampler, vec2(vCoordinate) * weight[0]; + for (int i=1; i<5; i++) { + FragmentColor += + texture2D( uSampler, ( vec2(gl_FragCoord)+vec2(0.0, offset[i]) )/1024.0 ) + * weight[i]; + FragmentColor += + texture2D( uSampler, ( vec2(gl_FragCoord)-vec2(0.0, offset[i]) )/1024.0 ) + * weight[i]; + } +} +*/ + +/* +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + const int sampleRadius = 16; + const int samples = sampleRadius * 2 + 1; + float dy = 1.0 / 512.0; + vec4 sample = vec4(0, 0, 0, 0); + for (int i = -sampleRadius; i <= sampleRadius; i++) { + sample += texture2D(uSampler, vCoordinate + vec2(0, float(i) * dy)); + } + gl_FragColor = sample / float(samples); + // gl_FragColor = texture2D(uSampler, vCoordinate); +} +*/ + +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + vec4 sum = vec4(0.0); + float blur = 1.0 / 512.0 * 1.0; + sum += texture2D(uSampler, vec2(vCoordinate.x - 4.0 * blur, vCoordinate.y)) * 0.05; + sum += texture2D(uSampler, vec2(vCoordinate.x - 3.0 * blur, vCoordinate.y)) * 0.09; + sum += texture2D(uSampler, vec2(vCoordinate.x - 2.0 * blur, vCoordinate.y)) * 0.12; + sum += texture2D(uSampler, vec2(vCoordinate.x - blur, vCoordinate.y)) * 0.15; + sum += texture2D(uSampler, vec2(vCoordinate.x, vCoordinate.y)) * 0.16; + sum += texture2D(uSampler, vec2(vCoordinate.x + blur, vCoordinate.y)) * 0.15; + sum += texture2D(uSampler, vec2(vCoordinate.x + 2.0 * blur, vCoordinate.y)) * 0.12; + sum += texture2D(uSampler, vec2(vCoordinate.x + 3.0 * blur, vCoordinate.y)) * 0.09; + sum += texture2D(uSampler, vec2(vCoordinate.x + 4.0 * blur, vCoordinate.y)) * 0.05; + gl_FragColor = sum; + // gl_FragColor = texture2D(uSampler, vCoordinate); +} + +/* +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + vec4 sum = vec4(0.0); + float blur = 0.1; + sum += texture2D(uSampler, vec2(vCoordinate.x - 4.0 * blur, vCoordinate.y)) * 0.05; + sum += texture2D(uSampler, vec2(vCoordinate.x - 3.0 * blur, vCoordinate.y)) * 0.09; + sum += texture2D(uSampler, vec2(vCoordinate.x - 2.0 * blur, vCoordinate.y)) * 0.12; + sum += texture2D(uSampler, vec2(vCoordinate.x - blur, vCoordinate.y)) * 0.15; + sum += texture2D(uSampler, vec2(vCoordinate.x, vCoordinate.y)) * 0.16; + sum += texture2D(uSampler, vec2(vCoordinate.x + blur, vCoordinate.y)) * 0.15; + sum += texture2D(uSampler, vec2(vCoordinate.x + 2.0 * blur, vCoordinate.y)) * 0.12; + sum += texture2D(uSampler, vec2(vCoordinate.x + 3.0 * blur, vCoordinate.y)) * 0.09; + sum += texture2D(uSampler, vec2(vCoordinate.x + 4.0 * blur, vCoordinate.y)) * 0.05; + gl_FragColor = sum; + // gl_FragColor = texture2D(uSampler, vCoordinate); +} +*/ + +/* +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + gl_FragColor = texture2D(uSampler, vCoordinate); +} + +*/ + +/* +precision mediump float; +varying vec2 vCoordinate; +varying float vColor; +uniform float blur; +uniform sampler2D uSampler; +void main(void) { +vec4 sum = vec4(0.0); +sum += texture2D(uSampler, vec2(vCoordinate.x - 4.0*blur, vCoordinate.y)) * 0.05; +sum += texture2D(uSampler, vec2(vCoordinate.x - 3.0*blur, vCoordinate.y)) * 0.09; +sum += texture2D(uSampler, vec2(vCoordinate.x - 2.0*blur, vCoordinate.y)) * 0.12; +sum += texture2D(uSampler, vec2(vCoordinate.x - blur, vCoordinate.y)) * 0.15; +sum += texture2D(uSampler, vec2(vCoordinate.x, vCoordinate.y)) * 0.16; +sum += texture2D(uSampler, vec2(vCoordinate.x + blur, vCoordinate.y)) * 0.15; +sum += texture2D(uSampler, vec2(vCoordinate.x + 2.0*blur, vCoordinate.y)) * 0.12; +sum += texture2D(uSampler, vec2(vCoordinate.x + 3.0*blur, vCoordinate.y)) * 0.09; +sum += texture2D(uSampler, vec2(vCoordinate.x + 4.0*blur, vCoordinate.y)) * 0.05; +gl_FragColor = sum; +} + +*/ \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/blurv.frag @@ -0,0 +1,16 @@ +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + const int sampleRadius = 8; + const int samples = sampleRadius * 2 + 1; + float dx = 0.01; + vec4 sample = vec4(0, 0, 0, 0); + for (int i = -sampleRadius; i <= sampleRadius; i++) { + sample += texture2D(uSampler, vCoordinate + vec2(0, float(i) * dy)); + } + gl_FragColor = sample / float(samples); +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/canvas.vert @@ -0,0 +1,19 @@ +uniform vec2 uResolution; +uniform mat3 uTransformMatrix; +uniform float uZ; + +attribute vec2 aPosition; +attribute vec4 aColor; +attribute vec2 aCoordinate; + +varying vec4 vColor; +varying vec2 vCoordinate; + +void main() { + vec2 position = ((uTransformMatrix * vec3(aPosition, 1.0)).xy / uResolution) * 2.0 - 1.0; + position *= vec2(1.0, -1.0); + // position *= vec2(40.0, -4.0); + gl_Position = vec4(vec3(position, uZ), 1.0); + vColor = aColor; + vCoordinate = aCoordinate; +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/combined.frag @@ -0,0 +1,46 @@ +precision mediump float; + +varying vec4 vColor; +uniform mat4 uColorMatrix; +uniform vec4 uColorVector; +uniform sampler2D uSampler[8]; +varying vec2 vCoordinate; +varying float vKind; +varying float vSampler; + +void main() { + vec4 color; + int kind = int(floor(vKind + 0.5)); + if (kind == 0) { + color = vColor; + } else if (kind == 1 || kind == 2) { + int sampler = int(floor(vSampler + 0.5)); + if (sampler == 0) { + color = vColor * texture2D(uSampler[0], vCoordinate); + } else if (sampler == 1) { + color = vColor * texture2D(uSampler[1], vCoordinate); + } else if (sampler == 2) { + color = vColor * texture2D(uSampler[2], vCoordinate); + } else if (sampler == 3) { + color = vColor * texture2D(uSampler[3], vCoordinate); + } else if (sampler == 4) { + color = vColor * texture2D(uSampler[4], vCoordinate); + } else if (sampler == 5) { + color = vColor * texture2D(uSampler[5], vCoordinate); + } else if (sampler == 6) { + color = vColor * texture2D(uSampler[6], vCoordinate); + } else if (sampler == 7) { + color = vColor * texture2D(uSampler[7], vCoordinate); + } + if (kind == 2) { + color = color * uColorMatrix + uColorVector; + } + } else { + color = vec4(1.0, 0.0, 0.0, 1.0); + } + // color.rgb *= color.a; + if (color.a < 0.01) { + discard; + } + gl_FragColor = color; +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/combined.vert @@ -0,0 +1,22 @@ +uniform vec2 uResolution; +uniform mat3 uTransformMatrix; +uniform mat4 uTransformMatrix3D; + +attribute vec4 aPosition; +attribute vec4 aColor; +attribute vec2 aCoordinate; +attribute float aKind; +attribute float aSampler; + +varying vec4 vColor; +varying vec2 vCoordinate; +varying float vKind; +varying float vSampler; + +void main() { + gl_Position = uTransformMatrix3D * aPosition; + vColor = aColor; + vCoordinate = aCoordinate; + vKind = aKind; + vSampler = aSampler; +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/curve.frag @@ -0,0 +1,18 @@ +precision mediump float; + +uniform vec4 uColor; +varying vec2 vTextureCoordinate; + +void main() { + gl_FragColor = uColor; + gl_FragColor = vec4(vTextureCoordinate.x, vTextureCoordinate.y, 0, 0.5); + + float u = vTextureCoordinate.x; + float v = vTextureCoordinate.y; + float r = u * u - v; + if (r < 0.0) { + gl_FragColor = vec4(1, 0, 0, 1); + } else { + gl_FragColor = vec4(1, 0, 0, 0.2); + } +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/solid-fill.frag @@ -0,0 +1,7 @@ +precision mediump float; + +varying vec4 vColor; + +void main() { + gl_FragColor = vColor; +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/solid-fill.vert @@ -0,0 +1,15 @@ +uniform vec2 uResolution; +uniform mat3 uTransformMatrix; +uniform float uZ; + +attribute vec2 aPosition; +attribute vec4 aColor; + +varying vec4 vColor; + +void main() { + vec2 position = ((uTransformMatrix * vec3(aPosition, 1.0)).xy / uResolution) * 2.0 - 1.0; + position *= vec2(1.0, -1.0); + gl_Position = vec4(vec3(position, uZ), 1.0); + vColor = aColor; +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/texture-fill.frag @@ -0,0 +1,12 @@ +precision mediump float; + +varying vec4 vColor; +uniform sampler2D uSampler; +varying vec2 vCoordinate; + +void main() { + // gl_FragColor = vColor; + // gl_FragColor = vec4(vTextureCoordinate.x, vTextureCoordinate.y, 0, 0.5); + // gl_FragColor = gl_FragColor; // + texture2D(uSampler, vCoordinate); + gl_FragColor = texture2D(uSampler, vCoordinate); +} \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/browser/extensions/shumway/content/gfx/gl/shaders/texture-fill.vert @@ -0,0 +1,19 @@ +uniform vec2 uResolution; +uniform mat3 uTransformMatrix; +uniform float uZ; + +attribute vec2 aPosition; +attribute vec4 aColor; +attribute vec2 aCoordinate; + +varying vec4 vColor; +varying vec2 vCoordinate; + +void main() { + vec2 position = ((uTransformMatrix * vec3(aPosition, 1.0)).xy / uResolution) * 2.0 - 1.0; + position *= vec2(1.0, -1.0); + // position *= vec2(40.0, -4.0); + gl_Position = vec4(vec3(position, uZ), 1.0); + vColor = aColor; + vCoordinate = aCoordinate; +} \ No newline at end of file
index 3f6f9591dc46a261ec3fd19930dc496f3dbbcca3..329ac5bba16fd42cbbc4177ce22961efa4c80a28 GIT binary patch literal 203531 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
--- a/browser/extensions/shumway/content/playerglobal/playerglobal.json +++ b/browser/extensions/shumway/content/playerglobal/playerglobal.json @@ -104,2738 +104,2738 @@ "length": 356 }, { "name": "flash/display/Bitmap", "defs": [ "flash.display:Bitmap" ], "offset": 4951, - "length": 431 + "length": 390 }, { "name": "flash/display/BitmapData", "defs": [ "flash.display:BitmapData" ], - "offset": 5382, - "length": 1515 + "offset": 5341, + "length": 1471 }, { "name": "flash/display/BitmapDataChannel", "defs": [ "flash.display:BitmapDataChannel" ], - "offset": 6897, + "offset": 6812, "length": 274 }, { "name": "flash/display/BitmapEncodingColorSpace", "defs": [ "flash.display:BitmapEncodingColorSpace" ], - "offset": 7171, + "offset": 7086, "length": 355 }, { "name": "flash/display/BlendMode", "defs": [ "flash.display:BlendMode" ], - "offset": 7526, + "offset": 7441, "length": 624 }, { "name": "flash/display/CapsStyle", "defs": [ "flash.display:CapsStyle" ], - "offset": 8150, + "offset": 8065, "length": 256 }, { "name": "flash/display/ColorCorrection", "defs": [ "flash.display:ColorCorrection" ], - "offset": 8406, + "offset": 8321, "length": 262 }, { "name": "flash/display/ColorCorrectionSupport", "defs": [ "flash.display:ColorCorrectionSupport" ], - "offset": 8668, + "offset": 8583, "length": 314 }, { "name": "flash/display/DisplayObject", "defs": [ "flash.display:DisplayObject" ], - "offset": 8982, - "length": 1581 + "offset": 8897, + "length": 1500 }, { "name": "flash/display/DisplayObjectContainer", "defs": [ "flash.display:DisplayObjectContainer" ], - "offset": 10563, - "length": 912 + "offset": 10397, + "length": 898 }, { "name": "flash/display/FocusDirection", "defs": [ "flash.display:FocusDirection" ], - "offset": 11475, + "offset": 11295, "length": 262 }, { "name": "flash/display/FrameLabel", "defs": [ "flash.display:FrameLabel" ], - "offset": 11737, - "length": 325 + "offset": 11557, + "length": 278 }, { "name": "flash/display/Graphics", "defs": [ "flash.display:Graphics" ], - "offset": 12062, - "length": 1042 + "offset": 11835, + "length": 1028 }, { "name": "flash/display/GradientType", "defs": [ "flash.display:GradientType" ], - "offset": 13104, + "offset": 12863, "length": 239 }, { "name": "flash/display/GraphicsBitmapFill", "defs": [ "flash.display:GraphicsBitmapFill" ], - "offset": 13343, + "offset": 13102, "length": 346 }, { "name": "flash/display/GraphicsEndFill", "defs": [ "flash.display:GraphicsEndFill" ], - "offset": 13689, + "offset": 13448, "length": 215 }, { "name": "flash/display/GraphicsGradientFill", "defs": [ "flash.display:GraphicsGradientFill" ], - "offset": 13904, + "offset": 13663, "length": 697 }, { "name": "flash/display/GraphicsPath", "defs": [ "flash.display:GraphicsPath" ], - "offset": 14601, + "offset": 14360, "length": 1258 }, { "name": "flash/display/GraphicsPathCommand", "defs": [ "flash.display:GraphicsPathCommand" ], - "offset": 15859, + "offset": 15618, "length": 368 }, { "name": "flash/display/GraphicsPathWinding", "defs": [ "flash.display:GraphicsPathWinding" ], - "offset": 16227, + "offset": 15986, "length": 259 }, { "name": "flash/display/GraphicsShaderFill", "defs": [ "flash.display:GraphicsShaderFill" ], - "offset": 16486, + "offset": 16245, "length": 299 }, { "name": "flash/display/GraphicsSolidFill", "defs": [ "flash.display:GraphicsSolidFill" ], - "offset": 16785, + "offset": 16544, "length": 283 }, { "name": "flash/display/GraphicsStroke", "defs": [ "flash.display:GraphicsStroke" ], - "offset": 17068, + "offset": 16827, "length": 1542 }, { "name": "flash/display/GraphicsTrianglePath", "defs": [ "flash.display:GraphicsTrianglePath" ], - "offset": 18610, + "offset": 18369, "length": 680 }, { "name": "flash/display/IBitmapDrawable", "defs": [ "flash.display:IBitmapDrawable" ], - "offset": 19290, + "offset": 19049, "length": 105 }, { "name": "flash/display/IDrawCommand", "defs": [ "flash.display:IDrawCommand" ], - "offset": 19395, + "offset": 19154, "length": 102 }, { "name": "flash/display/IGraphicsData", "defs": [ "flash.display:IGraphicsData" ], - "offset": 19497, + "offset": 19256, "length": 103 }, { "name": "flash/display/IGraphicsFill", "defs": [ "flash.display:IGraphicsFill" ], - "offset": 19600, + "offset": 19359, "length": 103 }, { "name": "flash/display/IGraphicsPath", "defs": [ "flash.display:IGraphicsPath" ], - "offset": 19703, + "offset": 19462, "length": 103 }, { "name": "flash/display/IGraphicsStroke", "defs": [ "flash.display:IGraphicsStroke" ], - "offset": 19806, + "offset": 19565, "length": 105 }, { "name": "flash/display/InteractiveObject", "defs": [ "flash.display:InteractiveObject" ], - "offset": 19911, - "length": 778 + "offset": 19670, + "length": 764 }, { "name": "flash/display/InterpolationMethod", "defs": [ "flash.display:InterpolationMethod" ], - "offset": 20689, + "offset": 20434, "length": 254 }, { "name": "flash/display/JointStyle", "defs": [ "flash.display:JointStyle" ], - "offset": 20943, + "offset": 20688, "length": 258 }, { "name": "flash/display/JPEGEncoderOptions", "defs": [ "flash.display:JPEGEncoderOptions" ], - "offset": 21201, + "offset": 20946, "length": 216 }, { "name": "flash/display/JPEGXREncoderOptions", "defs": [ "flash.display:JPEGXREncoderOptions" ], - "offset": 21417, + "offset": 21162, "length": 295 }, { "name": "flash/display/LineScaleMode", "defs": [ "flash.display:LineScaleMode" ], - "offset": 21712, + "offset": 21457, "length": 307 }, { "name": "flash/display/Loader", "defs": [ "flash.display:Loader" ], - "offset": 22019, - "length": 1973 + "offset": 21764, + "length": 1320 }, { "name": "flash/display/LoaderInfo", "defs": [ "flash.display:LoaderInfo" ], - "offset": 23992, - "length": 1276 + "offset": 23084, + "length": 1227 }, { "name": "flash/display/MorphShape", "defs": [ "flash.display:MorphShape" ], - "offset": 25268, - "length": 230 + "offset": 24311, + "length": 263 }, { "name": "flash/display/MovieClip", "defs": [ "flash.display:MovieClip" ], - "offset": 25498, - "length": 885 + "offset": 24574, + "length": 871 }, { "name": "flash/display/NativeMenu", "defs": [ "flash.display:NativeMenu" ], - "offset": 26383, + "offset": 25445, "length": 207 }, { "name": "flash/display/NativeMenuItem", "defs": [ "flash.display:NativeMenuItem" ], - "offset": 26590, - "length": 293 + "offset": 25652, + "length": 279 }, { "name": "flash/display/PixelSnapping", "defs": [ "flash.display:PixelSnapping" ], - "offset": 26883, + "offset": 25931, "length": 264 }, { "name": "flash/display/PNGEncoderOptions", "defs": [ "flash.display:PNGEncoderOptions" ], - "offset": 27147, + "offset": 26195, "length": 224 }, { "name": "flash/display/Scene", "defs": [ "flash.display:Scene" ], - "offset": 27371, - "length": 344 + "offset": 26419, + "length": 255 }, { "name": "flash/display/Shader", "defs": [ "flash.display:Shader" ], - "offset": 27715, + "offset": 26674, "length": 368 }, { "name": "flash/display/ShaderData", "defs": [ "flash.display:ShaderData" ], - "offset": 28083, + "offset": 27042, "length": 195 }, { "name": "flash/display/ShaderInput", "defs": [ "flash.display:ShaderInput" ], - "offset": 28278, + "offset": 27237, "length": 334 }, { "name": "flash/display/ShaderJob", "defs": [ "flash.display:ShaderJob" ], - "offset": 28612, + "offset": 27571, "length": 492 }, { "name": "flash/display/ShaderParameter", "defs": [ "flash.display:ShaderParameter" ], - "offset": 29104, + "offset": 28063, "length": 308 }, { "name": "flash/display/ShaderParameterType", "defs": [ "flash.display:ShaderParameterType" ], - "offset": 29412, + "offset": 28371, "length": 618 }, { "name": "flash/display/ShaderPrecision", "defs": [ "flash.display:ShaderPrecision" ], - "offset": 30030, + "offset": 28989, "length": 237 }, { "name": "flash/display/Shape", "defs": [ "flash.display:Shape" ], - "offset": 30267, - "length": 280 + "offset": 29226, + "length": 266 }, { "name": "flash/display/SimpleButton", "defs": [ "flash.display:SimpleButton" ], - "offset": 30547, + "offset": 29492, "length": 682 }, { "name": "flash/display/SpreadMethod", "defs": [ "flash.display:SpreadMethod" ], - "offset": 31229, + "offset": 30174, "length": 264 }, { "name": "flash/display/Sprite", "defs": [ "flash.display:Sprite" ], - "offset": 31493, - "length": 718 + "offset": 30438, + "length": 670 }, { "name": "flash/display/Stage", "defs": [ "flash.display:Stage" ], - "offset": 32211, - "length": 3663 + "offset": 31108, + "length": 3649 }, { "name": "flash/display/Stage3D", "defs": [ "flash.display:Stage3D" ], - "offset": 35874, + "offset": 34757, "length": 443 }, { "name": "flash/display/StageAlign", "defs": [ "flash.display:StageAlign" ], - "offset": 36317, + "offset": 35200, "length": 383 }, { "name": "flash/display/StageDisplayState", "defs": [ "flash.display:StageDisplayState" ], - "offset": 36700, + "offset": 35583, "length": 319 }, { "name": "flash/display/StageQuality", "defs": [ "flash.display:StageQuality" ], - "offset": 37019, + "offset": 35902, "length": 429 }, { "name": "flash/display/StageScaleMode", "defs": [ "flash.display:StageScaleMode" ], - "offset": 37448, + "offset": 36331, "length": 317 }, { "name": "flash/display/SWFVersion", "defs": [ "flash.display:SWFVersion" ], - "offset": 37765, + "offset": 36648, "length": 454 }, { "name": "flash/display/TriangleCulling", "defs": [ "flash.display:TriangleCulling" ], - "offset": 38219, + "offset": 37102, "length": 278 }, { "name": "flash/external/ExternalInterface", "defs": [ "flash.external:ExternalInterface" ], - "offset": 38497, + "offset": 37380, "length": 3261 }, { "name": "flash/events/AccelerometerEvent", "defs": [ "flash.events:AccelerometerEvent" ], - "offset": 41758, + "offset": 40641, "length": 817 }, { "name": "flash/events/ActivityEvent", "defs": [ "flash.events:ActivityEvent" ], - "offset": 42575, + "offset": 41458, "length": 505 }, { "name": "flash/events/AsyncErrorEvent", "defs": [ "flash.events:AsyncErrorEvent" ], - "offset": 43080, + "offset": 41963, "length": 522 }, { "name": "flash/events/ContextMenuEvent", "defs": [ "flash.events:ContextMenuEvent" ], - "offset": 43602, + "offset": 42485, "length": 829 }, { "name": "flash/events/DataEvent", "defs": [ "flash.events:DataEvent" ], - "offset": 44431, + "offset": 43314, "length": 546 }, { "name": "flash/events/ErrorEvent", "defs": [ "flash.events:ErrorEvent" ], - "offset": 44977, + "offset": 43860, "length": 494 }, { "name": "flash/events/Event", "defs": [ "flash.events:Event" ], - "offset": 45471, - "length": 2319 + "offset": 44354, + "length": 2280 }, { "name": "flash/events/EventDispatcher", "defs": [ "flash.events:EventDispatcher" ], - "offset": 47790, - "length": 708 + "offset": 46634, + "length": 649 }, { "name": "flash/events/EventPhase", "defs": [ "flash.events:EventPhase" ], - "offset": 48498, + "offset": 47283, "length": 262 }, { "name": "flash/events/FocusEvent", "defs": [ "flash.events:FocusEvent" ], - "offset": 48760, + "offset": 47545, "length": 980 }, { "name": "flash/events/FullScreenEvent", "defs": [ "flash.events:FullScreenEvent" ], - "offset": 49740, + "offset": 48525, "length": 643 }, { "name": "flash/events/GameInputEvent", "defs": [ "flash.events:GameInputEvent" ], - "offset": 50383, + "offset": 49168, "length": 390 }, { "name": "flash/events/GeolocationEvent", "defs": [ "flash.events:GeolocationEvent" ], - "offset": 50773, + "offset": 49558, "length": 1137 }, { "name": "flash/events/GestureEvent", "defs": [ "flash.events:GestureEvent" ], - "offset": 51910, - "length": 1059 + "offset": 50695, + "length": 813 }, { "name": "flash/events/GesturePhase", "defs": [ "flash.events:GesturePhase" ], - "offset": 52969, + "offset": 51508, "length": 281 }, { "name": "flash/events/HTTPStatusEvent", "defs": [ "flash.events:HTTPStatusEvent" ], - "offset": 53250, + "offset": 51789, "length": 746 }, { "name": "flash/events/IEventDispatcher", "defs": [ "flash.events:IEventDispatcher" ], - "offset": 53996, + "offset": 52535, "length": 353 }, { "name": "flash/events/IMEEvent", "defs": [ "flash.events:IMEEvent" ], - "offset": 54349, + "offset": 52888, "length": 632 }, { "name": "flash/events/IOErrorEvent", "defs": [ "flash.events:IOErrorEvent" ], - "offset": 54981, + "offset": 53520, "length": 605 }, { "name": "flash/events/KeyboardEvent", "defs": [ "flash.events:KeyboardEvent" ], - "offset": 55586, + "offset": 54125, "length": 1044 }, { "name": "flash/events/MouseEvent", "defs": [ "flash.events:MouseEvent" ], - "offset": 56630, + "offset": 55169, "length": 2142 }, { "name": "flash/events/NetDataEvent", "defs": [ "flash.events:NetDataEvent" ], - "offset": 58772, + "offset": 57311, "length": 565 }, { "name": "flash/events/NetFilterEvent", "defs": [ "flash.events:NetFilterEvent" ], - "offset": 59337, + "offset": 57876, "length": 454 }, { "name": "flash/events/NetMonitorEvent", "defs": [ "flash.events:NetMonitorEvent" ], - "offset": 59791, + "offset": 58330, "length": 516 }, { "name": "flash/events/NetStatusEvent", "defs": [ "flash.events:NetStatusEvent" ], - "offset": 60307, + "offset": 58846, "length": 498 }, { "name": "flash/events/OutputProgressEvent", "defs": [ "flash.events:OutputProgressEvent" ], - "offset": 60805, + "offset": 59344, "length": 638 }, { "name": "flash/events/PressAndTapGestureEvent", "defs": [ "flash.events:PressAndTapGestureEvent" ], - "offset": 61443, + "offset": 59982, "length": 944 }, { "name": "flash/events/ProgressEvent", "defs": [ "flash.events:ProgressEvent" ], - "offset": 62387, - "length": 647 + "offset": 60926, + "length": 683 }, { "name": "flash/events/SampleDataEvent", "defs": [ "flash.events:SampleDataEvent" ], - "offset": 63034, + "offset": 61609, "length": 639 }, { "name": "flash/events/SecurityErrorEvent", "defs": [ "flash.events:SecurityErrorEvent" ], - "offset": 63673, + "offset": 62248, "length": 511 }, { "name": "flash/events/ShaderEvent", "defs": [ "flash.events:ShaderEvent" ], - "offset": 64184, + "offset": 62759, "length": 742 }, { "name": "flash/events/SoftKeyboardEvent", "defs": [ "flash.events:SoftKeyboardEvent" ], - "offset": 64926, + "offset": 63501, "length": 793 }, { "name": "flash/events/SoftKeyboardTrigger", "defs": [ "flash.events:SoftKeyboardTrigger" ], - "offset": 65719, + "offset": 64294, "length": 287 }, { "name": "flash/events/StageVideoAvailabilityEvent", "defs": [ "flash.events:StageVideoAvailabilityEvent" ], - "offset": 66006, + "offset": 64581, "length": 377 }, { "name": "flash/events/StageVideoEvent", "defs": [ "flash.events:StageVideoEvent" ], - "offset": 66383, + "offset": 64958, "length": 535 }, { "name": "flash/events/StatusEvent", "defs": [ "flash.events:StatusEvent" ], - "offset": 66918, + "offset": 65493, "length": 578 }, { "name": "flash/events/SyncEvent", "defs": [ "flash.events:SyncEvent" ], - "offset": 67496, + "offset": 66071, "length": 466 }, { "name": "flash/events/TextEvent", "defs": [ "flash.events:TextEvent" ], - "offset": 67962, + "offset": 66537, "length": 569 }, { "name": "flash/events/ThrottleEvent", "defs": [ "flash.events:ThrottleEvent" ], - "offset": 68531, + "offset": 67106, "length": 553 }, { "name": "flash/events/ThrottleType", "defs": [ "flash.events:ThrottleType" ], - "offset": 69084, + "offset": 67659, "length": 268 }, { "name": "flash/events/TimerEvent", "defs": [ "flash.events:TimerEvent" ], - "offset": 69352, + "offset": 67927, "length": 505 }, { "name": "flash/events/TouchEvent", "defs": [ "flash.events:TouchEvent" ], - "offset": 69857, + "offset": 68432, "length": 2322 }, { "name": "flash/events/TransformGestureEvent", "defs": [ "flash.events:TransformGestureEvent" ], - "offset": 72179, + "offset": 70754, "length": 1154 }, { "name": "flash/events/UncaughtErrorEvent", "defs": [ "flash.events:UncaughtErrorEvent" ], - "offset": 73333, + "offset": 71908, "length": 525 }, { "name": "flash/events/UncaughtErrorEvents", "defs": [ "flash.events:UncaughtErrorEvents" ], - "offset": 73858, + "offset": 72433, "length": 208 }, { "name": "flash/events/VideoEvent", "defs": [ "flash.events:VideoEvent" ], - "offset": 74066, + "offset": 72641, "length": 461 }, { "name": "flash/geom/ColorTransform", "defs": [ "flash.geom:ColorTransform" ], - "offset": 74527, - "length": 885 + "offset": 73102, + "length": 586 }, { "name": "flash/geom/Matrix", "defs": [ "flash.geom:Matrix" ], - "offset": 75412, - "length": 2147 + "offset": 73688, + "length": 814 }, { "name": "flash/geom/Matrix3D", "defs": [ "flash.geom:Matrix3D" ], - "offset": 77559, - "length": 1132 + "offset": 74502, + "length": 1092 }, { "name": "flash/geom/Orientation3D", "defs": [ "flash.geom:Orientation3D" ], - "offset": 78691, + "offset": 75594, "length": 290 }, { "name": "flash/geom/PerspectiveProjection", "defs": [ "flash.geom:PerspectiveProjection" ], - "offset": 78981, + "offset": 75884, "length": 389 }, { "name": "flash/geom/Point", "defs": [ "flash.geom:Point" ], - "offset": 79370, - "length": 1010 + "offset": 76273, + "length": 516 }, { "name": "flash/geom/Rectangle", "defs": [ "flash.geom:Rectangle" ], - "offset": 80380, - "length": 1992 + "offset": 76789, + "length": 889 }, { "name": "flash/geom/Transform", "defs": [ "flash.geom:Transform" ], - "offset": 82372, - "length": 590 + "offset": 77678, + "length": 553 }, { "name": "flash/geom/Utils3D", "defs": [ "flash.geom:Utils3D" ], - "offset": 82962, + "offset": 78231, "length": 342 }, { "name": "flash/geom/Vector3D", "defs": [ "flash.geom:Vector3D" ], - "offset": 83304, - "length": 1664 + "offset": 78573, + "length": 830 }, { "name": "flash/filters/BevelFilter", "defs": [ "flash.filters:BevelFilter" ], - "offset": 84968, - "length": 808 + "offset": 79403, + "length": 685 }, { "name": "flash/filters/BitmapFilter", "defs": [ "flash.filters:BitmapFilter" ], - "offset": 85776, - "length": 200 + "offset": 80088, + "length": 209 }, { "name": "flash/filters/BitmapFilterQuality", "defs": [ "flash.filters:BitmapFilterQuality" ], - "offset": 85976, + "offset": 80297, "length": 256 }, { "name": "flash/filters/BitmapFilterType", "defs": [ "flash.filters:BitmapFilterType" ], - "offset": 86232, + "offset": 80553, "length": 268 }, { "name": "flash/filters/BlurFilter", "defs": [ "flash.filters:BlurFilter" ], - "offset": 86500, - "length": 393 + "offset": 80821, + "length": 342 }, { "name": "flash/filters/ColorMatrixFilter", "defs": [ "flash.filters:ColorMatrixFilter" ], - "offset": 86893, - "length": 337 + "offset": 81163, + "length": 294 }, { "name": "flash/filters/ConvolutionFilter", "defs": [ "flash.filters:ConvolutionFilter" ], - "offset": 87230, - "length": 675 + "offset": 81457, + "length": 570 }, { "name": "flash/filters/DisplacementMapFilter", "defs": [ "flash.filters:DisplacementMapFilter" ], - "offset": 87905, - "length": 743 + "offset": 82027, + "length": 632 }, { "name": "flash/filters/DisplacementMapFilterMode", "defs": [ "flash.filters:DisplacementMapFilterMode" ], - "offset": 88648, + "offset": 82659, "length": 315 }, { "name": "flash/filters/DropShadowFilter", "defs": [ "flash.filters:DropShadowFilter" ], - "offset": 88963, - "length": 742 + "offset": 82974, + "length": 627 }, { "name": "flash/filters/GlowFilter", "defs": [ "flash.filters:GlowFilter" ], - "offset": 89705, - "length": 608 + "offset": 83601, + "length": 517 }, { "name": "flash/filters/GradientBevelFilter", "defs": [ "flash.filters:GradientBevelFilter" ], - "offset": 90313, - "length": 784 + "offset": 84118, + "length": 649 }, { "name": "flash/filters/GradientGlowFilter", "defs": [ "flash.filters:GradientGlowFilter" ], - "offset": 91097, - "length": 781 + "offset": 84767, + "length": 646 }, { "name": "flash/filters/ShaderFilter", "defs": [ "flash.filters:ShaderFilter" ], - "offset": 91878, + "offset": 85413, "length": 626 }, { "name": "flash/globalization/Collator", "defs": [ "flash.globalization:Collator" ], - "offset": 92504, + "offset": 86039, "length": 692 }, { "name": "flash/globalization/CollatorMode", "defs": [ "flash.globalization:CollatorMode" ], - "offset": 93196, + "offset": 86731, "length": 257 }, { "name": "flash/globalization/CurrencyFormatter", "defs": [ "flash.globalization:CurrencyFormatter" ], - "offset": 93453, + "offset": 86988, "length": 1104 }, { "name": "flash/globalization/CurrencyParseResult", "defs": [ "flash.globalization:CurrencyParseResult" ], - "offset": 94557, + "offset": 88092, "length": 350 }, { "name": "flash/globalization/DateTimeFormatter", "defs": [ "flash.globalization:DateTimeFormatter" ], - "offset": 94907, + "offset": 88442, "length": 830 }, { "name": "flash/globalization/DateTimeNameContext", "defs": [ "flash.globalization:DateTimeNameContext" ], - "offset": 95737, + "offset": 89272, "length": 273 }, { "name": "flash/globalization/DateTimeNameStyle", "defs": [ "flash.globalization:DateTimeNameStyle" ], - "offset": 96010, + "offset": 89545, "length": 330 }, { "name": "flash/globalization/DateTimeStyle", "defs": [ "flash.globalization:DateTimeStyle" ], - "offset": 96340, + "offset": 89875, "length": 330 }, { "name": "flash/globalization/LastOperationStatus", "defs": [ "flash.globalization:LastOperationStatus" ], - "offset": 96670, + "offset": 90205, "length": 1104 }, { "name": "flash/globalization/LocaleID", "defs": [ "flash.globalization:LocaleID" ], - "offset": 97774, + "offset": 91309, "length": 560 }, { "name": "flash/globalization/NationalDigitsType", "defs": [ "flash.globalization:NationalDigitsType" ], - "offset": 98334, + "offset": 91869, "length": 1055 }, { "name": "flash/globalization/NumberFormatter", "defs": [ "flash.globalization:NumberFormatter" ], - "offset": 99389, + "offset": 92924, "length": 946 }, { "name": "flash/globalization/NumberParseResult", "defs": [ "flash.globalization:NumberParseResult" ], - "offset": 100335, + "offset": 93870, "length": 367 }, { "name": "flash/globalization/StringTools", "defs": [ "flash.globalization:StringTools" ], - "offset": 100702, + "offset": 94237, "length": 460 }, { "name": "flash/media/AudioDecoder", "defs": [ "flash.media:AudioDecoder" ], - "offset": 101162, + "offset": 94697, "length": 448 }, { "name": "flash/media/Camera", "defs": [ "flash.media:Camera" ], - "offset": 101610, + "offset": 95145, "length": 1029 }, { "name": "flash/media/H264Level", "defs": [ "flash.media:H264Level" ], - "offset": 102639, + "offset": 96174, "length": 613 }, { "name": "flash/media/H264Profile", "defs": [ "flash.media:H264Profile" ], - "offset": 103252, + "offset": 96787, "length": 233 }, { "name": "flash/media/H264VideoStreamSettings", "defs": [ "flash.media:H264VideoStreamSettings" ], - "offset": 103485, + "offset": 97020, "length": 1137 }, { "name": "flash/media/ID3Info", "defs": [ "flash.media:ID3Info" ], - "offset": 104622, - "length": 270 + "offset": 98157, + "length": 300 }, { "name": "flash/media/Microphone", "defs": [ "flash.media:Microphone" ], - "offset": 104892, + "offset": 98457, "length": 986 }, { "name": "flash/media/MicrophoneEnhancedMode", "defs": [ "flash.media:MicrophoneEnhancedMode" ], - "offset": 105878, + "offset": 99443, "length": 367 }, { "name": "flash/media/MicrophoneEnhancedOptions", "defs": [ "flash.media:MicrophoneEnhancedOptions" ], - "offset": 106245, + "offset": 99810, "length": 604 }, { "name": "flash/media/Sound", "defs": [ "flash.media:Sound" ], - "offset": 106849, + "offset": 100414, "length": 837 }, { "name": "flash/media/SoundChannel", "defs": [ "flash.media:SoundChannel" ], - "offset": 107686, + "offset": 101251, "length": 390 }, { "name": "flash/media/SoundCodec", "defs": [ "flash.media:SoundCodec" ], - "offset": 108076, + "offset": 101641, "length": 287 }, { "name": "flash/media/SoundLoaderContext", "defs": [ "flash.media:SoundLoaderContext" ], - "offset": 108363, + "offset": 101928, "length": 261 }, { "name": "flash/media/SoundMixer", "defs": [ "flash.media:SoundMixer" ], - "offset": 108624, + "offset": 102189, "length": 513 }, { "name": "flash/media/SoundTransform", "defs": [ "flash.media:SoundTransform" ], - "offset": 109137, - "length": 536 + "offset": 102702, + "length": 422 }, { "name": "flash/media/StageVideo", "defs": [ "flash.media:StageVideo" ], - "offset": 109673, + "offset": 103124, "length": 570 }, { "name": "flash/media/StageVideoAvailability", "defs": [ "flash.media:StageVideoAvailability" ], - "offset": 110243, + "offset": 103694, "length": 271 }, { "name": "flash/media/Video", "defs": [ "flash.media:Video" ], - "offset": 110514, + "offset": 103965, "length": 533 }, { "name": "flash/media/VideoCodec", "defs": [ "flash.media:VideoCodec" ], - "offset": 111047, + "offset": 104498, "length": 256 }, { "name": "flash/media/VideoStatus", "defs": [ "flash.media:VideoStatus" ], - "offset": 111303, + "offset": 104754, "length": 286 }, { "name": "flash/media/VideoStreamSettings", "defs": [ "flash.media:VideoStreamSettings" ], - "offset": 111589, + "offset": 105040, "length": 651 }, { "name": "flash/profiler/Telemetry", "defs": [ "flash.profiler:Telemetry" ], - "offset": 112240, + "offset": 105691, "length": 422 }, { "name": "flash/printing/PrintJob", "defs": [ "flash.printing:PrintJob" ], - "offset": 112662, + "offset": 106113, "length": 711 }, { "name": "flash/printing/PrintJobOptions", "defs": [ "flash.printing:PrintJobOptions" ], - "offset": 113373, + "offset": 106824, "length": 216 }, { "name": "flash/printing/PrintJobOrientation", "defs": [ "flash.printing:PrintJobOrientation" ], - "offset": 113589, + "offset": 107040, "length": 265 }, { "name": "flash/security/CertificateStatus", "defs": [ "flash.security:CertificateStatus" ], - "offset": 113854, + "offset": 107305, "length": 533 }, { "name": "flash/security/X500DistinguishedName", "defs": [ "flash.security:X500DistinguishedName" ], - "offset": 114387, + "offset": 107838, "length": 427 }, { "name": "flash/security/X509Certificate", "defs": [ "flash.security:X509Certificate" ], - "offset": 114814, + "offset": 108265, "length": 635 }, { "name": "flash/sampler/ClassFactory", "defs": [ "flash.sampler:ClassFactory" ], - "offset": 115449, + "offset": 108900, "length": 285 }, { "name": "flash/sampler/DeleteObjectSample", "defs": [ "flash.sampler:DeleteObjectSample" ], - "offset": 115734, + "offset": 109185, "length": 233 }, { "name": "flash/sampler/NewObjectSample", "defs": [ "flash.sampler:NewObjectSample" ], - "offset": 115967, + "offset": 109418, "length": 308 }, { "name": "flash/sampler/Sample", "defs": [ "flash.sampler:Sample" ], - "offset": 116275, + "offset": 109726, "length": 205 }, { "name": "flash/sampler/StackFrame", "defs": [ "flash.sampler:StackFrame" ], - "offset": 116480, + "offset": 109931, "length": 310 }, { "name": "flash/system/ApplicationDomain", "defs": [ "flash.system:ApplicationDomain" ], - "offset": 116790, - "length": 543 + "offset": 110241, + "length": 498 }, { "name": "flash/system/ApplicationInstaller", "defs": [ "flash.system:ApplicationInstaller" ], - "offset": 117333, + "offset": 110739, "length": 426 }, { "name": "flash/system/AuthorizedFeatures", "defs": [ "flash.system:AuthorizedFeatures" ], - "offset": 117759, + "offset": 111165, "length": 456 }, { "name": "flash/system/AuthorizedFeaturesLoader", "defs": [ "flash.system:AuthorizedFeaturesLoader" ], - "offset": 118215, + "offset": 111621, "length": 398 }, { "name": "flash/system/Capabilities", "defs": [ "flash.system:Capabilities" ], - "offset": 118613, + "offset": 112019, "length": 1133 }, { "name": "flash/system/DomainMemoryWithStage3D", "defs": [ "flash.system:DomainMemoryWithStage3D" ], - "offset": 119746, + "offset": 113152, "length": 191 }, { "name": "flash/system/FSCommand", "defs": [ "flash.system:FSCommand", "flash.system:fscommand" ], - "offset": 119937, + "offset": 113343, "length": 285 }, { "name": "flash/system/ImageDecodingPolicy", "defs": [ "flash.system:ImageDecodingPolicy" ], - "offset": 120222, + "offset": 113628, "length": 257 }, { "name": "flash/system/IME", "defs": [ "flash.system:IME" ], - "offset": 120479, + "offset": 113885, "length": 507 }, { "name": "flash/system/IMEConversionMode", "defs": [ "flash.system:IMEConversionMode" ], - "offset": 120986, + "offset": 114392, "length": 432 }, { "name": "flash/system/JPEGLoaderContext", "defs": [ "flash.system:JPEGLoaderContext" ], - "offset": 121418, + "offset": 114824, "length": 309 }, { "name": "flash/system/LoaderContext", "defs": [ "flash.system:LoaderContext" ], - "offset": 121727, + "offset": 115133, "length": 515 }, { "name": "flash/system/MessageChannel", "defs": [ "flash.system:MessageChannel" ], - "offset": 122242, + "offset": 115648, "length": 584 }, { "name": "flash/system/MessageChannelState", "defs": [ "flash.system:MessageChannelState" ], - "offset": 122826, + "offset": 116232, "length": 278 }, { "name": "flash/system/Security", "defs": [ "flash.system:Security" ], - "offset": 123104, + "offset": 116510, "length": 773 }, { "name": "flash/system/SecurityDomain", "defs": [ "flash.system:SecurityDomain" ], - "offset": 123877, + "offset": 117283, "length": 265 }, { "name": "flash/system/SecurityPanel", "defs": [ "flash.system:SecurityPanel" ], - "offset": 124142, + "offset": 117548, "length": 430 }, { "name": "flash/system/System", "defs": [ "flash.system:System" ], - "offset": 124572, + "offset": 117978, "length": 629 }, { "name": "flash/system/SystemUpdater", "defs": [ "flash.system:SystemUpdater" ], - "offset": 125201, + "offset": 118607, "length": 322 }, { "name": "flash/system/SystemUpdaterType", "defs": [ "flash.system:SystemUpdaterType" ], - "offset": 125523, + "offset": 118929, "length": 241 }, { "name": "flash/system/TouchscreenType", "defs": [ "flash.system:TouchscreenType" ], - "offset": 125764, + "offset": 119170, "length": 268 }, { "name": "flash/trace/Trace", "defs": [ "flash.trace:Trace" ], - "offset": 126032, + "offset": 119438, "length": 488 }, { "name": "flash/ui/ContextMenu", "defs": [ "flash.ui:ContextMenu" ], - "offset": 126520, + "offset": 119926, "length": 1036 }, { "name": "flash/ui/ContextMenuBuiltInItems", "defs": [ "flash.ui:ContextMenuBuiltInItems" ], - "offset": 127556, + "offset": 120962, "length": 871 }, { "name": "flash/ui/ContextMenuClipboardItems", "defs": [ "flash.ui:ContextMenuClipboardItems" ], - "offset": 128427, + "offset": 121833, "length": 587 }, { "name": "flash/ui/ContextMenuItem", "defs": [ "flash.ui:ContextMenuItem" ], - "offset": 129014, - "length": 472 + "offset": 122420, + "length": 458 }, { "name": "flash/ui/GameInput", "defs": [ "flash.ui:GameInput" ], - "offset": 129486, + "offset": 122878, "length": 333 }, { "name": "flash/ui/GameInputControl", "defs": [ "flash.ui:GameInputControl" ], - "offset": 129819, + "offset": 123211, "length": 458 }, { "name": "flash/ui/GameInputControlType", "defs": [ "flash.ui:GameInputControlType" ], - "offset": 130277, + "offset": 123669, "length": 389 }, { "name": "flash/ui/GameInputDevice", "defs": [ "flash.ui:GameInputDevice" ], - "offset": 130666, + "offset": 124058, "length": 623 }, { "name": "flash/ui/GameInputFinger", "defs": [ "flash.ui:GameInputFinger" ], - "offset": 131289, + "offset": 124681, "length": 291 }, { "name": "flash/ui/GameInputHand", "defs": [ "flash.ui:GameInputHand" ], - "offset": 131580, + "offset": 124972, "length": 256 }, { "name": "flash/ui/Keyboard", "defs": [ "flash.ui:Keyboard" ], - "offset": 131836, + "offset": 125228, "length": 9336 }, { "name": "flash/ui/KeyboardType", "defs": [ "flash.ui:KeyboardType" ], - "offset": 141172, + "offset": 134564, "length": 266 }, { "name": "flash/ui/KeyLocation", "defs": [ "flash.ui:KeyLocation" ], - "offset": 141438, + "offset": 134830, "length": 273 }, { "name": "flash/ui/Mouse", "defs": [ "flash.ui:Mouse" ], - "offset": 141711, + "offset": 135103, "length": 397 }, { "name": "flash/ui/MouseCursor", "defs": [ "flash.ui:MouseCursor" ], - "offset": 142108, + "offset": 135500, "length": 302 }, { "name": "flash/ui/MouseCursorData", "defs": [ "flash.ui:MouseCursorData" ], - "offset": 142410, + "offset": 135802, "length": 352 }, { "name": "flash/ui/Multitouch", "defs": [ "flash.ui:Multitouch" ], - "offset": 142762, + "offset": 136154, "length": 435 }, { "name": "flash/ui/MultitouchInputMode", "defs": [ "flash.ui:MultitouchInputMode" ], - "offset": 143197, + "offset": 136589, "length": 279 }, { "name": "flash/sensors/Accelerometer", "defs": [ "flash.sensors:Accelerometer" ], - "offset": 143476, + "offset": 136868, "length": 357 }, { "name": "flash/sensors/Geolocation", "defs": [ "flash.sensors:Geolocation" ], - "offset": 143833, + "offset": 137225, "length": 351 }, { - "name": "flash/display3d/Context3D", + "name": "flash/display3D/Context3D", "defs": [ "flash.display3D:Context3D" ], - "offset": 144184, + "offset": 137576, "length": 2088 }, { - "name": "flash/display3d/Context3DBlendFactor", + "name": "flash/display3D/Context3DBlendFactor", "defs": [ "flash.display3D:Context3DBlendFactor" ], - "offset": 146272, + "offset": 139664, "length": 681 }, { - "name": "flash/display3d/Context3DClearMask", + "name": "flash/display3D/Context3DClearMask", "defs": [ "flash.display3D:Context3DClearMask" ], - "offset": 146953, + "offset": 140345, "length": 292 }, { - "name": "flash/display3d/Context3DProfile", + "name": "flash/display3D/Context3DProfile", "defs": [ "flash.display3D:Context3DProfile" ], - "offset": 147245, + "offset": 140637, "length": 282 }, { - "name": "flash/display3d/Context3DProgramType", + "name": "flash/display3D/Context3DProgramType", "defs": [ "flash.display3D:Context3DProgramType" ], - "offset": 147527, + "offset": 140919, "length": 263 }, { - "name": "flash/display3d/Context3DRenderMode", + "name": "flash/display3D/Context3DRenderMode", "defs": [ "flash.display3D:Context3DRenderMode" ], - "offset": 147790, + "offset": 141182, "length": 257 }, { - "name": "flash/display3d/Context3DCompareMode", + "name": "flash/display3D/Context3DCompareMode", "defs": [ "flash.display3D:Context3DCompareMode" ], - "offset": 148047, + "offset": 141439, "length": 452 }, { - "name": "flash/display3d/Context3DStencilAction", + "name": "flash/display3D/Context3DStencilAction", "defs": [ "flash.display3D:Context3DStencilAction" ], - "offset": 148499, + "offset": 141891, "length": 499 }, { - "name": "flash/display3d/Context3DTextureFormat", + "name": "flash/display3D/Context3DTextureFormat", "defs": [ "flash.display3D:Context3DTextureFormat" ], - "offset": 148998, + "offset": 142390, "length": 315 }, { - "name": "flash/display3d/Context3DTriangleFace", + "name": "flash/display3D/Context3DTriangleFace", "defs": [ "flash.display3D:Context3DTriangleFace" ], - "offset": 149313, + "offset": 142705, "length": 323 }, { - "name": "flash/display3d/Context3DVertexBufferFormat", + "name": "flash/display3D/Context3DVertexBufferFormat", "defs": [ "flash.display3D:Context3DVertexBufferFormat" ], - "offset": 149636, + "offset": 143028, "length": 365 }, { - "name": "flash/display3d/IndexBuffer3D", + "name": "flash/display3D/IndexBuffer3D", "defs": [ "flash.display3D:IndexBuffer3D" ], - "offset": 150001, + "offset": 143393, "length": 364 }, { - "name": "flash/display3d/Program3D", + "name": "flash/display3D/Program3D", "defs": [ "flash.display3D:Program3D" ], - "offset": 150365, + "offset": 143757, "length": 275 }, { - "name": "flash/display3d/VertexBuffer3D", + "name": "flash/display3D/VertexBuffer3D", "defs": [ "flash.display3D:VertexBuffer3D" ], - "offset": 150640, + "offset": 144032, "length": 367 }, { - "name": "flash/display3d/textures/CubeTexture", + "name": "flash/display3D/textures/CubeTexture", "defs": [ "flash.display3D.textures:CubeTexture" ], - "offset": 151007, + "offset": 144399, "length": 501 }, { - "name": "flash/display3d/textures/Texture", + "name": "flash/display3D/textures/Texture", "defs": [ "flash.display3D.textures:Texture" ], - "offset": 151508, + "offset": 144900, "length": 487 }, { - "name": "flash/display3d/textures/TextureBase", + "name": "flash/display3D/textures/TextureBase", "defs": [ "flash.display3D.textures:TextureBase" ], - "offset": 151995, + "offset": 145387, "length": 292 }, { "name": "flash/net/DynamicPropertyOutput", "defs": [ "flash.net:DynamicPropertyOutput" ], - "offset": 152287, + "offset": 145679, "length": 308 }, { "name": "flash/net/FileFilter", "defs": [ "flash.net:FileFilter" ], - "offset": 152595, + "offset": 145987, "length": 318 }, { "name": "flash/net/FileReference", "defs": [ "flash.net:FileReference" ], - "offset": 152913, + "offset": 146305, "length": 666 }, { "name": "flash/net/FileReferenceList", "defs": [ "flash.net:FileReferenceList" ], - "offset": 153579, + "offset": 146971, "length": 315 }, { "name": "flash/net/GroupSpecifier", "defs": [ "flash.net:GroupSpecifier" ], - "offset": 153894, + "offset": 147286, "length": 1492 }, { "name": "flash/net/IDynamicPropertyOutput", "defs": [ "flash.net:IDynamicPropertyOutput" ], - "offset": 155386, + "offset": 148778, "length": 197 }, { "name": "flash/net/IDynamicPropertyWriter", "defs": [ "flash.net:IDynamicPropertyWriter" ], - "offset": 155583, + "offset": 148975, "length": 225 }, { "name": "flash/net/LocalConnection", "defs": [ "flash.net:LocalConnection" ], - "offset": 155808, + "offset": 149200, "length": 495 }, { "name": "flash/net/NetConnection", "defs": [ "flash.net:NetConnection" ], - "offset": 156303, + "offset": 149695, "length": 906 }, { "name": "flash/net/NetGroup", "defs": [ "flash.net:NetGroup" ], - "offset": 157209, + "offset": 150601, "length": 1299 }, { "name": "flash/net/NetGroupInfo", "defs": [ "flash.net:NetGroupInfo" ], - "offset": 158508, + "offset": 151900, "length": 768 }, { "name": "flash/net/NetGroupReceiveMode", "defs": [ "flash.net:NetGroupReceiveMode" ], - "offset": 159276, + "offset": 152668, "length": 245 }, { "name": "flash/net/NetGroupReplicationStrategy", "defs": [ "flash.net:NetGroupReplicationStrategy" ], - "offset": 159521, + "offset": 152913, "length": 283 }, { "name": "flash/net/NetGroupSendMode", "defs": [ "flash.net:NetGroupSendMode" ], - "offset": 159804, + "offset": 153196, "length": 273 }, { "name": "flash/net/NetGroupSendResult", "defs": [ "flash.net:NetGroupSendResult" ], - "offset": 160077, + "offset": 153469, "length": 270 }, { "name": "flash/net/NetMonitor", "defs": [ "flash.net:NetMonitor" ], - "offset": 160347, + "offset": 153739, "length": 279 }, { "name": "flash/net/NetStream", "defs": [ "flash.net:NetStream" ], - "offset": 160626, + "offset": 154018, "length": 3103 }, { "name": "flash/net/NetStreamAppendBytesAction", "defs": [ "flash.net:NetStreamAppendBytesAction" ], - "offset": 163729, + "offset": 157121, "length": 315 }, { "name": "flash/net/NetStreamMulticastInfo", "defs": [ "flash.net:NetStreamMulticastInfo" ], - "offset": 164044, + "offset": 157436, "length": 2712 }, { "name": "flash/net/NetStreamInfo", "defs": [ "flash.net:NetStreamInfo" ], - "offset": 166756, + "offset": 160148, "length": 1958 }, { "name": "flash/net/NetStreamPlayOptions", "defs": [ "flash.net:NetStreamPlayOptions" ], - "offset": 168714, + "offset": 162106, "length": 355 }, { "name": "flash/net/NetStreamPlayTransitions", "defs": [ "flash.net:NetStreamPlayTransitions" ], - "offset": 169069, + "offset": 162461, "length": 406 }, { "name": "flash/net/ObjectEncoding", "defs": [ "flash.net:ObjectEncoding" ], - "offset": 169475, + "offset": 162867, "length": 345 }, { "name": "flash/net/Responder", "defs": [ "flash.net:Responder" ], - "offset": 169820, + "offset": 163212, "length": 239 }, { "name": "flash/net/SecureSocket", "defs": [ "flash.net:SecureSocket" ], - "offset": 170059, + "offset": 163451, "length": 566 }, { "name": "flash/net/SharedObject", "defs": [ "flash.net:SharedObject" ], - "offset": 170625, - "length": 1122 + "offset": 164017, + "length": 1108 }, { "name": "flash/net/SharedObjectFlushStatus", "defs": [ "flash.net:SharedObjectFlushStatus" ], - "offset": 171747, + "offset": 165125, "length": 257 }, { "name": "flash/net/URLLoader", "defs": [ "flash.net:URLLoader" ], - "offset": 172004, + "offset": 165382, "length": 1501 }, { "name": "flash/net/Socket", "defs": [ "flash.net:Socket" ], - "offset": 173505, + "offset": 166883, "length": 1282 }, { "name": "flash/net/URLLoaderDataFormat", "defs": [ "flash.net:URLLoaderDataFormat" ], - "offset": 174787, + "offset": 168165, "length": 276 }, { "name": "flash/net/URLRequest", "defs": [ "flash.net:URLRequest" ], - "offset": 175063, - "length": 610 + "offset": 168441, + "length": 402 }, { "name": "flash/net/URLRequestHeader", "defs": [ "flash.net:URLRequestHeader" ], - "offset": 175673, + "offset": 168843, "length": 223 }, { "name": "flash/net/URLStream", "defs": [ "flash.net:URLStream" ], - "offset": 175896, + "offset": 169066, "length": 908 }, { "name": "flash/net/URLRequestMethod", "defs": [ "flash.net:URLRequestMethod" ], - "offset": 176804, + "offset": 169974, "length": 304 }, { "name": "flash/net/URLVariables", "defs": [ "flash.net:URLVariables" ], - "offset": 177108, - "length": 937 + "offset": 170278, + "length": 972 }, { "name": "flash/net/XMLSocket", "defs": [ "flash.net:XMLSocket" ], - "offset": 178045, + "offset": 171250, "length": 480 }, { "name": "flash/text/AntiAliasType", "defs": [ "flash.text:AntiAliasType" ], - "offset": 178525, + "offset": 171730, "length": 239 }, { "name": "flash/text/CSMSettings", "defs": [ "flash.text:CSMSettings" ], - "offset": 178764, + "offset": 171969, "length": 248 }, { "name": "flash/text/Font", "defs": [ "flash.text:Font" ], - "offset": 179012, + "offset": 172217, "length": 361 }, { "name": "flash/text/FontStyle", "defs": [ "flash.text:FontStyle" ], - "offset": 179373, + "offset": 172578, "length": 292 }, { "name": "flash/text/FontType", "defs": [ "flash.text:FontType" ], - "offset": 179665, + "offset": 172870, "length": 269 }, { "name": "flash/text/GridFitType", "defs": [ "flash.text:GridFitType" ], - "offset": 179934, + "offset": 173139, "length": 258 }, { "name": "flash/text/StaticText", "defs": [ "flash.text:StaticText" ], - "offset": 180192, + "offset": 173397, "length": 299 }, { "name": "flash/text/StyleSheet", "defs": [ "flash.text:StyleSheet" ], - "offset": 180491, + "offset": 173696, "length": 523 }, { "name": "flash/text/TextColorType", "defs": [ "flash.text:TextColorType" ], - "offset": 181014, + "offset": 174219, "length": 241 }, { "name": "flash/text/TextDisplayMode", "defs": [ "flash.text:TextDisplayMode" ], - "offset": 181255, + "offset": 174460, "length": 258 }, { "name": "flash/text/TextField", "defs": [ "flash.text:TextField" ], - "offset": 181513, + "offset": 174718, "length": 2507 }, { "name": "flash/text/TextFieldAutoSize", "defs": [ "flash.text:TextFieldAutoSize" ], - "offset": 184020, + "offset": 177225, "length": 291 }, { "name": "flash/text/TextFieldType", "defs": [ "flash.text:TextFieldType" ], - "offset": 184311, + "offset": 177516, "length": 235 }, { "name": "flash/text/TextFormat", "defs": [ "flash.text:TextFormat" ], - "offset": 184546, - "length": 943 + "offset": 177751, + "length": 778 }, { "name": "flash/text/TextFormatAlign", "defs": [ "flash.text:TextFormatAlign" ], - "offset": 185489, + "offset": 178529, "length": 343 }, { "name": "flash/text/TextFormatDisplay", "defs": [ "flash.text:TextFormatDisplay" ], - "offset": 185832, + "offset": 178872, "length": 241 }, { "name": "flash/text/TextInteractionMode", "defs": [ "flash.text:TextInteractionMode" ], - "offset": 186073, + "offset": 179113, "length": 253 }, { "name": "flash/text/TextLineMetrics", "defs": [ "flash.text:TextLineMetrics" ], - "offset": 186326, + "offset": 179366, "length": 300 }, { "name": "flash/text/TextRenderer", "defs": [ "flash.text:TextRenderer" ], - "offset": 186626, + "offset": 179666, "length": 373 }, { "name": "flash/text/TextRun", "defs": [ "flash.text:TextRun" ], - "offset": 186999, - "length": 246 + "offset": 180039, + "length": 294 }, { "name": "flash/text/TextSnapshot", "defs": [ "flash.text:TextSnapshot" ], - "offset": 187245, + "offset": 180333, "length": 513 }, { "name": "flash/text/engine/BreakOpportunity", "defs": [ "flash.text.engine:BreakOpportunity" ], - "offset": 187758, + "offset": 180846, "length": 293 }, { "name": "flash/text/engine/CFFHinting", "defs": [ "flash.text.engine:CFFHinting" ], - "offset": 188051, + "offset": 181139, "length": 256 }, { "name": "flash/text/engine/ContentElement", "defs": [ "flash.text.engine:ContentElement" ], - "offset": 188307, + "offset": 181395, "length": 624 }, { "name": "flash/text/engine/DigitCase", "defs": [ "flash.text.engine:DigitCase" ], - "offset": 188931, + "offset": 182019, "length": 277 }, { "name": "flash/text/engine/DigitWidth", "defs": [ "flash.text.engine:DigitWidth" ], - "offset": 189208, + "offset": 182296, "length": 288 }, { "name": "flash/text/engine/EastAsianJustifier", "defs": [ "flash.text.engine:EastAsianJustifier" ], - "offset": 189496, + "offset": 182584, "length": 495 }, { "name": "flash/text/engine/ElementFormat", "defs": [ "flash.text.engine:ElementFormat" ], - "offset": 189991, + "offset": 183079, "length": 1204 }, { "name": "flash/text/engine/FontDescription", "defs": [ "flash.text.engine:FontDescription" ], - "offset": 191195, + "offset": 184283, "length": 672 }, { "name": "flash/text/engine/FontLookup", "defs": [ "flash.text.engine:FontLookup" ], - "offset": 191867, + "offset": 184955, "length": 254 }, { "name": "flash/text/engine/FontMetrics", "defs": [ "flash.text.engine:FontMetrics" ], - "offset": 192121, + "offset": 185209, "length": 512 }, { "name": "flash/text/engine/FontPosture", "defs": [ "flash.text.engine:FontPosture" ], - "offset": 192633, + "offset": 185721, "length": 245 }, { "name": "flash/text/engine/FontWeight", "defs": [ "flash.text.engine:FontWeight" ], - "offset": 192878, + "offset": 185966, "length": 239 }, { "name": "flash/text/engine/GraphicElement", "defs": [ "flash.text.engine:GraphicElement" ], - "offset": 193117, + "offset": 186205, "length": 497 }, { "name": "flash/text/engine/GroupElement", "defs": [ "flash.text.engine:GroupElement" ], - "offset": 193614, + "offset": 186702, "length": 714 }, { "name": "flash/text/engine/JustificationStyle", "defs": [ "flash.text.engine:JustificationStyle" ], - "offset": 194328, + "offset": 187416, "length": 356 }, { "name": "flash/text/engine/Kerning", "defs": [ "flash.text.engine:Kerning" ], - "offset": 194684, + "offset": 187772, "length": 248 }, { "name": "flash/text/engine/LigatureLevel", "defs": [ "flash.text.engine:LigatureLevel" ], - "offset": 194932, + "offset": 188020, "length": 338 }, { "name": "flash/text/engine/LineJustification", "defs": [ "flash.text.engine:LineJustification" ], - "offset": 195270, + "offset": 188358, "length": 388 }, { "name": "flash/text/engine/RenderingMode", "defs": [ "flash.text.engine:RenderingMode" ], - "offset": 195658, + "offset": 188746, "length": 243 }, { "name": "flash/text/engine/SpaceJustifier", "defs": [ "flash.text.engine:SpaceJustifier" ], - "offset": 195901, + "offset": 188989, "length": 527 }, { "name": "flash/text/engine/TabAlignment", "defs": [ "flash.text.engine:TabAlignment" ], - "offset": 196428, + "offset": 189516, "length": 299 }, { "name": "flash/text/engine/TabStop", "defs": [ "flash.text.engine:TabStop" ], - "offset": 196727, + "offset": 189815, "length": 357 }, { "name": "flash/text/engine/TextBaseline", "defs": [ "flash.text.engine:TextBaseline" ], - "offset": 197084, + "offset": 190172, "length": 483 }, { "name": "flash/text/engine/TextBlock", "defs": [ "flash.text.engine:TextBlock" ], - "offset": 197567, + "offset": 190655, "length": 2184 }, { "name": "flash/text/engine/TextElement", "defs": [ "flash.text.engine:TextElement" ], - "offset": 199751, + "offset": 192839, "length": 383 }, { "name": "flash/text/engine/TextJustifier", "defs": [ "flash.text.engine:TextJustifier" ], - "offset": 200134, + "offset": 193222, "length": 774 }, { "name": "flash/text/engine/TextLine", "defs": [ "flash.text.engine:TextLine" ], - "offset": 200908, + "offset": 193996, "length": 2027 }, { "name": "flash/text/engine/TextLineCreationResult", "defs": [ "flash.text.engine:TextLineCreationResult" ], - "offset": 202935, + "offset": 196023, "length": 360 }, { "name": "flash/text/engine/TextLineMirrorRegion", "defs": [ "flash.text.engine:TextLineMirrorRegion" ], - "offset": 203295, + "offset": 196383, "length": 451 }, { "name": "flash/text/engine/TextLineValidity", "defs": [ "flash.text.engine:TextLineValidity" ], - "offset": 203746, + "offset": 196834, "length": 332 }, { "name": "flash/text/engine/TextRotation", "defs": [ "flash.text.engine:TextRotation" ], - "offset": 204078, + "offset": 197166, "length": 352 }, { "name": "flash/text/engine/TypographicCase", "defs": [ "flash.text.engine:TypographicCase" ], - "offset": 204430, + "offset": 197518, "length": 436 }, { "name": "flash/text/ime/CompositionAttributeRange", "defs": [ "flash.text.ime:CompositionAttributeRange" ], - "offset": 204866, + "offset": 197954, "length": 315 }, { "name": "flash/text/ime/IIMEClient", "defs": [ "flash.text.ime:IIMEClient" ], - "offset": 205181, + "offset": 198269, "length": 525 }, { "name": "flash/net/FlashNetScript", "defs": [ "flash.net:navigateToURL", "flash.net:sendToURL", "flash.net:registerClassAlias", "flash.net:getClassByAlias" ], - "offset": 205706, + "offset": 198794, "length": 343 }, { "name": "flash/utils/FlashUtilScript", "defs": [ "flash.utils:describeType", "flash.utils:getAliasName", "flash.utils:getQualifiedClassName", "flash.utils:getDefinitionByName", "flash.utils:getQualifiedSuperclassName", "flash.utils:getTimer", "flash.utils:escapeMultiByte", "flash.utils:unescapeMultiByte" ], - "offset": 206049, + "offset": 199137, "length": 606 }, { "name": "flash/utils/Endian", "defs": [ "flash.utils:Endian" ], - "offset": 206655, + "offset": 199743, "length": 243 }, { "name": "flash/utils/IExternalizable", "defs": [ "flash.utils:IExternalizable" ], - "offset": 206898, + "offset": 199986, "length": 223 }, { "name": "flash/utils/ObjectInput", "defs": [ "flash.utils:ObjectInput" ], - "offset": 207121, + "offset": 200209, "length": 706 }, { "name": "flash/utils/ObjectOutput", "defs": [ "flash.utils:ObjectOutput" ], - "offset": 207827, + "offset": 200915, "length": 648 }, { "name": "flash/utils/Timer", "defs": [ "flash.utils:Timer" ], - "offset": 208475, + "offset": 201563, "length": 973 }, { "name": "flash/utils/SetIntervalTimer", "defs": [ "flash.utils:SetIntervalTimer", "flash.utils:setInterval", "flash.utils:setTimeout", "flash.utils:clearInterval", "flash.utils:clearTimeout" ], - "offset": 209448, + "offset": 202536, "length": 995 } ] \ No newline at end of file
deleted file mode 100644 --- a/browser/extensions/shumway/content/shumway-worker.js +++ /dev/null @@ -1,6180 +0,0 @@ -/* - * Copyright 2013 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file is automatically generated - -(function (global) { - if (global.DataView) - return; - if (!global.ArrayBuffer) - fail('ArrayBuffer not supported'); - if (!Object.defineProperties) - fail('This module requires ECMAScript 5'); - var nativele = new Int8Array(new Int32Array([ - 1 - ]).buffer)[0] === 1; - var temp = new Uint8Array(8); - global.DataView = function DataView(buffer, offset, length) { - if (!(buffer instanceof ArrayBuffer)) - fail('Bad ArrayBuffer'); - offset = offset || 0; - length = length || buffer.byteLength - offset; - if (offset < 0 || length < 0 || offset + length > buffer.byteLength) - fail('Illegal offset and/or length'); - Object.defineProperties(this, { - buffer: { - value: buffer, - enumerable: false, - writable: false, - configurable: false - }, - byteOffset: { - value: offset, - enumerable: false, - writable: false, - configurable: false - }, - byteLength: { - value: length, - enumerable: false, - writable: false, - configurable: false - }, - _bytes: { - value: new Uint8Array(buffer, offset, length), - enumerable: false, - writable: false, - configurable: false - } - }); - }; - global.DataView.prototype = { - constructor: DataView, - getInt8: function getInt8(offset) { - return get(this, Int8Array, 1, offset); - }, - getUint8: function getUint8(offset) { - return get(this, Uint8Array, 1, offset); - }, - getInt16: function getInt16(offset, le) { - return get(this, Int16Array, 2, offset, le); - }, - getUint16: function getUint16(offset, le) { - return get(this, Uint16Array, 2, offset, le); - }, - getInt32: function getInt32(offset, le) { - return get(this, Int32Array, 4, offset, le); - }, - getUint32: function getUint32(offset, le) { - return get(this, Uint32Array, 4, offset, le); - }, - getFloat32: function getFloat32(offset, le) { - return get(this, Float32Array, 4, offset, le); - }, - getFloat64: function getFloat32(offset, le) { - return get(this, Float64Array, 8, offset, le); - }, - setInt8: function setInt8(offset, value) { - set(this, Int8Array, 1, offset, value); - }, - setUint8: function setUint8(offset, value) { - set(this, Uint8Array, 1, offset, value); - }, - setInt16: function setInt16(offset, value, le) { - set(this, Int16Array, 2, offset, value, le); - }, - setUint16: function setUint16(offset, value, le) { - set(this, Uint16Array, 2, offset, value, le); - }, - setInt32: function setInt32(offset, value, le) { - set(this, Int32Array, 4, offset, value, le); - }, - setUint32: function setUint32(offset, value, le) { - set(this, Uint32Array, 4, offset, value, le); - }, - setFloat32: function setFloat32(offset, value, le) { - set(this, Float32Array, 4, offset, value, le); - }, - setFloat64: function setFloat64(offset, value, le) { - set(this, Float64Array, 8, offset, value, le); - } - }; - function get(view, type, size, offset, le) { - if (offset === undefined) - fail('Missing required offset argument'); - if (offset < 0 || offset + size > view.byteLength) - fail('Invalid index: ' + offset); - if (size === 1 || !(!le) === nativele) { - if ((view.byteOffset + offset) % size === 0) - return new type(view.buffer, view.byteOffset + offset, 1)[0]; - else { - for (var i = 0; i < size; i++) - temp[i] = view._bytes[offset + i]; - return new type(temp.buffer)[0]; - } - } else { - for (var i = 0; i < size; i++) - temp[size - i - 1] = view._bytes[offset + i]; - return new type(temp.buffer)[0]; - } - } - function set(view, type, size, offset, value, le) { - if (offset === undefined) - fail('Missing required offset argument'); - if (value === undefined) - fail('Missing required value argument'); - if (offset < 0 || offset + size > view.byteLength) - fail('Invalid index: ' + offset); - if (size === 1 || !(!le) === nativele) { - if ((view.byteOffset + offset) % size === 0) { - new type(view.buffer, view.byteOffset + offset, 1)[0] = value; - } else { - new type(temp.buffer)[0] = value; - for (var i = 0; i < size; i++) - view._bytes[i + offset] = temp[i]; - } - } else { - new type(temp.buffer)[0] = value; - for (var i = 0; i < size; i++) - view._bytes[offset + i] = temp[size - 1 - i]; - } - } - function fail(msg) { - throw new Error(msg); - } -}(this)); -var create = Object.create; -var defineProperty = Object.defineProperty; -var keys = Object.keys; -var isArray = Array.isArray; -var fromCharCode = String.fromCharCode; -var logE = Math.log; -var max = Math.max; -var min = Math.min; -var pow = Math.pow; -var push = Array.prototype.push; -var slice = Array.prototype.slice; -var splice = Array.prototype.splice; -function fail(msg, context) { - throw new Error((context ? context + ': ' : '') + msg); -} -function assert(cond, msg, context) { - if (!cond) - fail(msg, context); -} -function scriptProperties(namespace, props) { - return props.reduce(function (o, p) { - o[p] = namespace + ' ' + p; - return o; - }, {}); -} -function cloneObject(obj) { - var clone = Object.create(null); - for (var prop in obj) - clone[prop] = obj[prop]; - return clone; -} -function sortNumeric(a, b) { - return a - b; -} -function sortByZindex(a, b) { - return a._zindex - b._zindex; -} -function rgbaObjToStr(color) { - return 'rgba(' + color.red + ',' + color.green + ',' + color.blue + ',' + color.alpha / 255 + ')'; -} -function rgbIntAlphaToStr(color, alpha) { - color |= 0; - if (alpha >= 1) { - var colorStr = color.toString(16); - while (colorStr.length < 6) { - colorStr = '0' + colorStr; - } - return '#' + colorStr; - } - var red = color >> 16 & 255; - var green = color >> 8 & 255; - var blue = color & 255; - return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')'; -} -function argbUintToStr(argb) { - return 'rgba(' + (argb >>> 16 & 255) + ',' + (argb >>> 8 & 255) + ',' + (argb & 255) + ',' + (argb >>> 24 & 255) / 255 + ')'; -} -(function functionNameSupport() { - if (eval('function t() {} t.name === \'t\'')) { - return; - } - Object.defineProperty(Function.prototype, 'name', { - get: function () { - if (this.__name) { - return this.__name; - } - var m = /function\s([^\(]+)/.exec(this.toString()); - var name = m && m[1] !== 'anonymous' ? m[1] : null; - this.__name = name; - return name; - }, - configurable: true, - enumerable: false - }); -}()); -var randomStyleCache; -var nextStyle = 0; -function randomStyle() { - if (!randomStyleCache) { - randomStyleCache = [ - '#ff5e3a', - '#ff9500', - '#ffdb4c', - '#87fc70', - '#52edc7', - '#1ad6fd', - '#c644fc', - '#ef4db6', - '#4a4a4a', - '#dbddde', - '#ff3b30', - '#ff9500', - '#ffcc00', - '#4cd964', - '#34aadc', - '#007aff', - '#5856d6', - '#ff2d55', - '#8e8e93', - '#c7c7cc', - '#5ad427', - '#c86edf', - '#d1eefc', - '#e0f8d8', - '#fb2b69', - '#f7f7f7', - '#1d77ef', - '#d6cec3', - '#55efcb', - '#ff4981', - '#ffd3e0', - '#f7f7f7', - '#ff1300', - '#1f1f21', - '#bdbec2', - '#ff3a2d' - ]; - } - return randomStyleCache[nextStyle++ % randomStyleCache.length]; -} -(function PromiseClosure() { - var global = Function('return this')(); - if (global.Promise) { - if (typeof global.Promise.all !== 'function') { - global.Promise.all = function (iterable) { - var count = 0, results = [], resolve, reject; - var promise = new global.Promise(function (resolve_, reject_) { - resolve = resolve_; - reject = reject_; - }); - iterable.forEach(function (p, i) { - count++; - p.then(function (result) { - results[i] = result; - count--; - if (count === 0) { - resolve(results); - } - }, reject); - }); - if (count === 0) { - resolve(results); - } - return promise; - }; - } - if (typeof global.Promise.resolve !== 'function') { - global.Promise.resolve = function (x) { - return new global.Promise(function (resolve) { - resolve(x); - }); - }; - } - return; - } - function getDeferred(C) { - if (typeof C !== 'function') { - throw new TypeError('Invalid deferred constructor'); - } - var resolver = createDeferredConstructionFunctions(); - var promise = new C(resolver); - var resolve = resolver.resolve; - if (typeof resolve !== 'function') { - throw new TypeError('Invalid resolve construction function'); - } - var reject = resolver.reject; - if (typeof reject !== 'function') { - throw new TypeError('Invalid reject construction function'); - } - return { - promise: promise, - resolve: resolve, - reject: reject - }; - } - function updateDeferredFromPotentialThenable(x, deferred) { - if (typeof x !== 'object' || x === null) { - return false; - } - try { - var then = x.then; - if (typeof then !== 'function') { - return false; - } - var thenCallResult = then.call(x, deferred.resolve, deferred.reject); - } catch (e) { - var reject = deferred.reject; - reject(e); - } - return true; - } - function isPromise(x) { - return typeof x === 'object' && x !== null && typeof x.promiseStatus !== 'undefined'; - } - function rejectPromise(promise, reason) { - if (promise.promiseStatus !== 'unresolved') { - return; - } - var reactions = promise.rejectReactions; - promise.result = reason; - promise.resolveReactions = undefined; - promise.rejectReactions = undefined; - promise.promiseStatus = 'has-rejection'; - triggerPromiseReactions(reactions, reason); - } - function resolvePromise(promise, resolution) { - if (promise.promiseStatus !== 'unresolved') { - return; - } - var reactions = promise.resolveReactions; - promise.result = resolution; - promise.resolveReactions = undefined; - promise.rejectReactions = undefined; - promise.promiseStatus = 'has-resolution'; - triggerPromiseReactions(reactions, resolution); - } - function triggerPromiseReactions(reactions, argument) { - for (var i = 0; i < reactions.length; i++) { - queueMicrotask({ - reaction: reactions[i], - argument: argument - }); - } - } - function queueMicrotask(task) { - if (microtasksQueue.length === 0) { - setTimeout(handleMicrotasksQueue, 0); - } - microtasksQueue.push(task); - } - function executePromiseReaction(reaction, argument) { - var deferred = reaction.deferred; - var handler = reaction.handler; - var handlerResult, updateResult; - try { - handlerResult = handler(argument); - } catch (e) { - var reject = deferred.reject; - return reject(e); - } - if (handlerResult === deferred.promise) { - var reject = deferred.reject; - return reject(new TypeError('Self resolution')); - } - try { - updateResult = updateDeferredFromPotentialThenable(handlerResult, deferred); - if (!updateResult) { - var resolve = deferred.resolve; - return resolve(handlerResult); - } - } catch (e) { - var reject = deferred.reject; - return reject(e); - } - } - var microtasksQueue = []; - function handleMicrotasksQueue() { - while (microtasksQueue.length > 0) { - var task = microtasksQueue[0]; - try { - executePromiseReaction(task.reaction, task.argument); - } catch (e) { - if (typeof Promise.onerror === 'function') { - Promise.onerror(e); - } - } - microtasksQueue.shift(); - } - } - function throwerFunction(e) { - throw e; - } - function identityFunction(x) { - return x; - } - function createRejectPromiseFunction(promise) { - return function (reason) { - rejectPromise(promise, reason); - }; - } - function createResolvePromiseFunction(promise) { - return function (resolution) { - resolvePromise(promise, resolution); - }; - } - function createDeferredConstructionFunctions() { - var fn = function (resolve, reject) { - fn.resolve = resolve; - fn.reject = reject; - }; - return fn; - } - function createPromiseResolutionHandlerFunctions(promise, fulfillmentHandler, rejectionHandler) { - return function (x) { - if (x === promise) { - return rejectionHandler(new TypeError('Self resolution')); - } - var cstr = promise.promiseConstructor; - if (isPromise(x)) { - var xConstructor = x.promiseConstructor; - if (xConstructor === cstr) { - return x.then(fulfillmentHandler, rejectionHandler); - } - } - var deferred = getDeferred(cstr); - var updateResult = updateDeferredFromPotentialThenable(x, deferred); - if (updateResult) { - var deferredPromise = deferred.promise; - return deferredPromise.then(fulfillmentHandler, rejectionHandler); - } - return fulfillmentHandler(x); - }; - } - function createPromiseAllCountdownFunction(index, values, deferred, countdownHolder) { - return function (x) { - values[index] = x; - countdownHolder.countdown--; - if (countdownHolder.countdown === 0) { - deferred.resolve(values); - } - }; - } - function Promise(resolver) { - if (typeof resolver !== 'function') { - throw new TypeError('resolver is not a function'); - } - var promise = this; - if (typeof promise !== 'object') { - throw new TypeError('Promise to initialize is not an object'); - } - promise.promiseStatus = 'unresolved'; - promise.resolveReactions = []; - promise.rejectReactions = []; - promise.result = undefined; - var resolve = createResolvePromiseFunction(promise); - var reject = createRejectPromiseFunction(promise); - try { - var result = resolver(resolve, reject); - } catch (e) { - rejectPromise(promise, e); - } - promise.promiseConstructor = Promise; - return promise; - } - Promise.all = function (iterable) { - var deferred = getDeferred(this); - var values = []; - var countdownHolder = { - countdown: 0 - }; - var index = 0; - iterable.forEach(function (nextValue) { - var nextPromise = this.cast(nextValue); - var fn = createPromiseAllCountdownFunction(index, values, deferred, countdownHolder); - nextPromise.then(fn, deferred.reject); - index++; - countdownHolder.countdown++; - }, this); - if (index === 0) { - deferred.resolve(values); - } - return deferred.promise; - }; - Promise.cast = function (x) { - if (isPromise(x)) { - return x; - } - var deferred = getDeferred(this); - deferred.resolve(x); - return deferred.promise; - }; - Promise.reject = function (r) { - var deferred = getDeferred(this); - var rejectResult = deferred.reject(r); - return deferred.promise; - }; - Promise.resolve = function (x) { - var deferred = getDeferred(this); - var rejectResult = deferred.resolve(x); - return deferred.promise; - }; - Promise.prototype = { - 'catch': function (onRejected) { - this.then(undefined, onRejected); - }, - then: function (onFulfilled, onRejected) { - var promise = this; - if (!isPromise(promise)) { - throw new TypeError('this is not a Promises'); - } - var cstr = promise.promiseConstructor; - var deferred = getDeferred(cstr); - var rejectionHandler = typeof onRejected === 'function' ? onRejected : throwerFunction; - var fulfillmentHandler = typeof onFulfilled === 'function' ? onFulfilled : identityFunction; - var resolutionHandler = createPromiseResolutionHandlerFunctions(promise, fulfillmentHandler, rejectionHandler); - var resolveReaction = { - deferred: deferred, - handler: resolutionHandler - }; - var rejectReaction = { - deferred: deferred, - handler: rejectionHandler - }; - switch (promise.promiseStatus) { - case 'unresolved': - promise.resolveReactions.push(resolveReaction); - promise.rejectReactions.push(rejectReaction); - break; - case 'has-resolution': - var resolution = promise.result; - queueMicrotask({ - reaction: resolveReaction, - argument: resolution - }); - break; - case 'has-rejection': - var rejection = promise.result; - queueMicrotask({ - reaction: rejectReaction, - argument: rejection - }); - break; - } - return deferred.promise; - } - }; - global.Promise = Promise; -}()); -var QuadTree = function (x, y, width, height, parent) { - this.x = x | 0; - this.y = y | 0; - this.width = width | 0; - this.height = height | 0; - if (parent) { - this.root = parent.root; - this.parent = parent; - this.level = parent.level + 1; - } else { - this.root = this; - this.parent = null; - this.level = 0; - } - this.reset(); -}; -QuadTree.prototype.reset = function () { - this.stuckObjects = null; - this.objects = null; - this.nodes = []; -}; -QuadTree.prototype._findIndex = function (xMin, xMax, yMin, yMax) { - var midX = this.x + (this.width / 2 | 0); - var midY = this.y + (this.height / 2 | 0); - var top = yMin < midY && yMax < midY; - var bottom = yMin > midY; - if (xMin < midX && xMax < midX) { - if (top) { - return 1; - } else if (bottom) { - return 2; - } - } else if (xMin > midX) { - if (top) { - return 0; - } else if (bottom) { - return 3; - } - } - return -1; -}; -QuadTree.prototype.insert = function (obj) { - var nodes = this.nodes; - if (nodes.length) { - var index = this._findIndex(obj.xMin, obj.xMax, obj.yMin, obj.yMax); - if (index > -1) { - nodes[index].insert(obj); - } else { - obj.prev = null; - if (this.stuckObjects) { - obj.next = this.stuckObjects; - this.stuckObjects.prev = obj; - } else { - obj.next = null; - } - this.stuckObjects = obj; - obj.parent = this; - } - return; - } - var numChildren = 1; - var item = this.objects; - if (!item) { - obj.prev = null; - obj.next = null; - this.objects = obj; - } else { - while (item.next) { - numChildren++; - item = item.next; - } - obj.prev = item; - obj.next = null; - item.next = obj; - } - if (numChildren > 4 && this.level < 10) { - this._subdivide(); - item = this.objects; - while (item) { - var next = item.next; - this.insert(item); - item = next; - } - this.objects = null; - return; - } - obj.parent = this; -}; -QuadTree.prototype.update = function (obj) { - var node = obj.parent; - if (node) { - if (obj.xMin >= node.x && obj.xMax <= node.x + node.width && obj.yMin >= node.y && obj.yMax <= node.y + node.height) { - if (node.nodes.length) { - var index = this._findIndex(obj.xMin, obj.xMax, obj.yMin, obj.yMax); - if (index > -1) { - node.remove(obj); - node = this.nodes[index]; - node.insert(obj); - } - } else { - node.remove(obj); - node.insert(obj); - } - return; - } - node.remove(obj); - } - this.root.insert(obj); -}; -QuadTree.prototype.remove = function (obj) { - var prev = obj.prev; - var next = obj.next; - if (prev) { - prev.next = next; - obj.prev = null; - } else { - var node = obj.parent; - if (node.objects === obj) { - node.objects = next; - } else if (node.stuckObjects === obj) { - node.stuckObjects = next; - } - } - if (next) { - next.prev = prev; - obj.next = null; - } - obj.parent = null; -}; -QuadTree.prototype.retrieve = function (xMin, xMax, yMin, yMax) { - var stack = []; - var out = []; - var node = this; - do { - if (node.nodes.length) { - var index = node._findIndex(xMin, xMax, yMin, yMax); - if (index > -1) { - stack.push(node.nodes[index]); - } else { - stack.push.apply(stack, node.nodes); - } - } - var item = node.objects; - for (var i = 0; i < 2; i++) { - while (item) { - if (!(item.xMin > xMax || item.xMax < xMin || item.yMin > yMax || item.yMax < yMin)) { - out.push(item); - } - item = item.next; - } - item = node.stuckObjects; - } - node = stack.pop(); - } while (node); - return out; -}; -QuadTree.prototype._subdivide = function () { - var halfWidth = this.width / 2 | 0; - var halfHeight = this.height / 2 | 0; - var midX = this.x + halfWidth; - var midY = this.y + halfHeight; - this.nodes[0] = new QuadTree(midX, this.y, halfWidth, halfHeight, this); - this.nodes[1] = new QuadTree(this.x, this.y, halfWidth, halfHeight, this); - this.nodes[2] = new QuadTree(this.x, midY, halfWidth, halfHeight, this); - this.nodes[3] = new QuadTree(midX, midY, halfWidth, halfHeight, this); -}; -var RegionCluster = function () { - this.regions = []; -}; -RegionCluster.prototype.reset = function () { - this.regions.length = 0; -}; -RegionCluster.prototype.insert = function (region) { - var regions = this.regions; - if (regions.length < 3) { - regions.push({ - xMin: region.xMin, - xMax: region.xMax, - yMin: region.yMin, - yMax: region.yMax - }); - return; - } - var a = region; - var b = regions[0]; - var c = regions[1]; - var d = regions[2]; - var ab = (max(a.xMax, b.xMax) - min(a.xMin, b.xMin)) * (max(a.yMax, b.yMax) - min(a.yMin, b.yMin)); - var rb = regions[0]; - var ac = (max(a.xMax, c.xMax) - min(a.xMin, c.xMin)) * (max(a.yMax, c.yMax) - min(a.yMin, c.yMin)); - var ad = (max(a.xMax, d.xMax) - min(a.xMin, d.xMin)) * (max(a.yMax, d.yMax) - min(a.yMin, d.yMin)); - if (ac < ab) { - ab = ac; - rb = c; - } - if (ad < ab) { - ab = ad; - rb = d; - } - var bc = (max(b.xMax, c.xMax) - min(b.xMin, c.xMin)) * (max(b.yMax, c.yMax) - min(b.yMin, c.yMin)); - var bd = (max(b.xMax, d.xMax) - min(b.xMin, d.xMin)) * (max(b.yMax, d.yMax) - min(b.yMin, d.yMin)); - var cd = (max(c.xMax, d.xMax) - min(c.xMin, d.xMin)) * (max(c.yMax, d.yMax) - min(c.yMin, d.yMin)); - if (ab < bc && ab < bd && ab < cd) { - if (a.xMin < rb.xMin) { - rb.xMin = a.xMin; - } - if (a.xMax > rb.xMax) { - rb.xMax = a.xMax; - } - if (a.yMin < rb.yMin) { - rb.yMin = a.yMin; - } - if (a.yMax > rb.yMax) { - rb.yMax = a.yMax; - } - return; - } - rb = regions[0]; - var rc = regions[1]; - if (bd < bc) { - bc = bd; - rc = regions[2]; - } - if (cd < bc) { - rb = regions[1]; - rc = regions[2]; - } - if (rc.xMin < rb.xMin) { - rb.xMin = rc.xMin; - } - if (rc.xMax > rb.xMax) { - rb.xMax = rc.xMax; - } - if (rc.yMin < rb.yMin) { - rb.yMin = rc.yMin; - } - if (rc.yMax > rb.yMax) { - rb.yMax = rc.yMax; - } - rc.xMin = a.xMin; - rc.xMax = a.xMax; - rc.yMin = a.yMin; - rc.yMax = a.yMax; -}; -RegionCluster.prototype.retrieve = function () { - return this.regions; -}; -var EXTERNAL_INTERFACE_FEATURE = 1; -var CLIPBOARD_FEATURE = 2; -var SHAREDOBJECT_FEATURE = 3; -var VIDEO_FEATURE = 4; -var SOUND_FEATURE = 5; -var NETCONNECTION_FEATURE = 6; -if (!this.performance) { - this.performance = {}; -} -if (!this.performance.now) { - this.performance.now = Date.now; -} -var SWF_TAG_CODE_CSM_TEXT_SETTINGS = 74; -var SWF_TAG_CODE_DEFINE_BINARY_DATA = 87; -var SWF_TAG_CODE_DEFINE_BITS = 6; -var SWF_TAG_CODE_DEFINE_BITS_JPEG2 = 21; -var SWF_TAG_CODE_DEFINE_BITS_JPEG3 = 35; -var SWF_TAG_CODE_DEFINE_BITS_JPEG4 = 90; -var SWF_TAG_CODE_DEFINE_BITS_LOSSLESS = 20; -var SWF_TAG_CODE_DEFINE_BITS_LOSSLESS2 = 36; -var SWF_TAG_CODE_DEFINE_BUTTON = 7; -var SWF_TAG_CODE_DEFINE_BUTTON2 = 34; -var SWF_TAG_CODE_DEFINE_BUTTON_CXFORM = 23; -var SWF_TAG_CODE_DEFINE_BUTTON_SOUND = 17; -var SWF_TAG_CODE_DEFINE_EDIT_TEXT = 37; -var SWF_TAG_CODE_DEFINE_FONT = 10; -var SWF_TAG_CODE_DEFINE_FONT2 = 48; -var SWF_TAG_CODE_DEFINE_FONT3 = 75; -var SWF_TAG_CODE_DEFINE_FONT4 = 91; -var SWF_TAG_CODE_DEFINE_FONT_ALIGN_ZONES = 73; -var SWF_TAG_CODE_DEFINE_FONT_INFO = 13; -var SWF_TAG_CODE_DEFINE_FONT_INFO2 = 62; -var SWF_TAG_CODE_DEFINE_FONT_NAME = 88; -var SWF_TAG_CODE_DEFINE_MORPH_SHAPE = 46; -var SWF_TAG_CODE_DEFINE_MORPH_SHAPE2 = 84; -var SWF_TAG_CODE_DEFINE_SCALING_GRID = 78; -var SWF_TAG_CODE_DEFINE_SCENE_AND_FRAME_LABEL_DATA = 86; -var SWF_TAG_CODE_DEFINE_SHAPE = 2; -var SWF_TAG_CODE_DEFINE_SHAPE2 = 22; -var SWF_TAG_CODE_DEFINE_SHAPE3 = 32; -var SWF_TAG_CODE_DEFINE_SHAPE4 = 83; -var SWF_TAG_CODE_DEFINE_SOUND = 14; -var SWF_TAG_CODE_DEFINE_SPRITE = 39; -var SWF_TAG_CODE_DEFINE_TEXT = 11; -var SWF_TAG_CODE_DEFINE_TEXT2 = 33; -var SWF_TAG_CODE_DEFINE_VIDEO_STREAM = 60; -var SWF_TAG_CODE_DO_ABC = 82; -var SWF_TAG_CODE_DO_ABC_ = 72; -var SWF_TAG_CODE_DO_ACTION = 12; -var SWF_TAG_CODE_DO_INIT_ACTION = 59; -var SWF_TAG_CODE_ENABLE_DEBUGGER = 58; -var SWF_TAG_CODE_ENABLE_DEBUGGER2 = 64; -var SWF_TAG_CODE_END = 0; -var SWF_TAG_CODE_EXPORT_ASSETS = 56; -var SWF_TAG_CODE_FILE_ATTRIBUTES = 69; -var SWF_TAG_CODE_FRAME_LABEL = 43; -var SWF_TAG_CODE_IMPORT_ASSETS = 57; -var SWF_TAG_CODE_IMPORT_ASSETS2 = 71; -var SWF_TAG_CODE_JPEG_TABLES = 8; -var SWF_TAG_CODE_METADATA = 77; -var SWF_TAG_CODE_PLACE_OBJECT = 4; -var SWF_TAG_CODE_PLACE_OBJECT2 = 26; -var SWF_TAG_CODE_PLACE_OBJECT3 = 70; -var SWF_TAG_CODE_PROTECT = 24; -var SWF_TAG_CODE_REMOVE_OBJECT = 5; -var SWF_TAG_CODE_REMOVE_OBJECT2 = 28; -var SWF_TAG_CODE_SCRIPT_LIMITS = 65; -var SWF_TAG_CODE_SET_BACKGROUND_COLOR = 9; -var SWF_TAG_CODE_SET_TAB_INDEX = 66; -var SWF_TAG_CODE_SHOW_FRAME = 1; -var SWF_TAG_CODE_SOUND_STREAM_BLOCK = 19; -var SWF_TAG_CODE_SOUND_STREAM_HEAD = 18; -var SWF_TAG_CODE_SOUND_STREAM_HEAD2 = 45; -var SWF_TAG_CODE_START_SOUND = 15; -var SWF_TAG_CODE_START_SOUND2 = 89; -var SWF_TAG_CODE_SYMBOL_CLASS = 76; -var SWF_TAG_CODE_VIDEO_FRAME = 61; -self.SWF = {}; -var FORMAT_COLORMAPPED = 3; -var FORMAT_15BPP = 4; -var FORMAT_24BPP = 5; -var FACTOR_5BBP = 255 / 31; -var crcTable = []; -for (var i = 0; i < 256; i++) { - var c = i; - for (var h = 0; h < 8; h++) { - if (c & 1) - c = 3988292384 ^ c >> 1 & 2147483647; - else - c = c >> 1 & 2147483647; - } - crcTable[i] = c; -} -function crc32(data, start, end) { - var crc = -1; - for (var i = start; i < end; i++) { - var a = (crc ^ data[i]) & 255; - var b = crcTable[a]; - crc = crc >>> 8 ^ b; - } - return crc ^ -1; -} -function createPngChunk(type, data) { - var chunk = new Uint8Array(12 + data.length); - var p = 0; - var len = data.length; - chunk[p] = len >> 24 & 255; - chunk[p + 1] = len >> 16 & 255; - chunk[p + 2] = len >> 8 & 255; - chunk[p + 3] = len & 255; - chunk[p + 4] = type.charCodeAt(0) & 255; - chunk[p + 5] = type.charCodeAt(1) & 255; - chunk[p + 6] = type.charCodeAt(2) & 255; - chunk[p + 7] = type.charCodeAt(3) & 255; - if (data instanceof Uint8Array) - chunk.set(data, 8); - p = 8 + len; - var crc = crc32(chunk, 4, p); - chunk[p] = crc >> 24 & 255; - chunk[p + 1] = crc >> 16 & 255; - chunk[p + 2] = crc >> 8 & 255; - chunk[p + 3] = crc & 255; - return chunk; -} -function adler32(data, start, end) { - var a = 1; - var b = 0; - for (var i = start; i < end; ++i) { - a = (a + (data[i] & 255)) % 65521; - b = (b + a) % 65521; - } - return b << 16 | a; -} -function defineBitmap(tag) { - var width = tag.width; - var height = tag.height; - var hasAlpha = tag.hasAlpha; - var plte = ''; - var trns = ''; - var literals; - var bmpData = tag.bmpData; - switch (tag.format) { - case FORMAT_COLORMAPPED: - var colorType = 3; - var bytesPerLine = width + 3 & ~3; - var colorTableSize = tag.colorTableSize + 1; - var paletteSize = colorTableSize * (tag.hasAlpha ? 4 : 3); - var datalen = paletteSize + bytesPerLine * height; - var stream = createInflatedStream(bmpData, datalen); - var bytes = stream.bytes; - var pos = 0; - stream.ensure(paletteSize); - if (hasAlpha) { - var palette = new Uint8Array(paletteSize / 4 * 3); - var pp = 0; - var alphaValues = new Uint8Array(paletteSize / 4); - var pa = 0; - while (pos < paletteSize) { - palette[pp++] = bytes[pos]; - palette[pp++] = bytes[pos + 1]; - palette[pp++] = bytes[pos + 2]; - alphaValues[pa++] = bytes[pos + 3]; - pos += 4; - } - plte = createPngChunk('PLTE', palette); - trns = createPngChunk('tRNS', alphaValues); - } else { - plte = createPngChunk('PLTE', bytes.subarray(pos, pos + paletteSize)); - pos += paletteSize; - } - literals = new Uint8Array(width * height + height); - var pl = 0; - while (pos < datalen) { - stream.ensure(bytesPerLine); - var begin = pos; - var end = begin + width; - pl++; - literals.set(bytes.subarray(begin, end), pl); - pl += end - begin; - stream.pos = pos += bytesPerLine; - } - break; - case FORMAT_15BPP: - var colorType = 2; - var bytesPerLine = width * 2 + 3 & ~3; - var stream = createInflatedStream(bmpData, bytesPerLine * height); - var pos = 0; - literals = new Uint8Array(width * height * 3 + height); - var pl = 0; - for (var y = 0; y < height; ++y) { - pl++; - stream.ensure(bytesPerLine); - for (var x = 0; x < width; ++x) { - var word = stream.getUint16(pos); - pos += 2; - literals[pl++] = 0 | FACTOR_5BBP * (word >> 10 & 31); - literals[pl++] = 0 | FACTOR_5BBP * (word >> 5 & 31); - literals[pl++] = 0 | FACTOR_5BBP * (word & 31); - } - stream.pos = pos += bytesPerLine; - } - break; - case FORMAT_24BPP: - var padding; - if (hasAlpha) { - var colorType = 6; - padding = 0; - literals = new Uint8Array(width * height * 4 + height); - } else { - var colorType = 2; - padding = 1; - literals = new Uint8Array(width * height * 3 + height); - } - var bytesPerLine = width * 4; - var stream = createInflatedStream(bmpData, bytesPerLine * height); - var bytes = stream.bytes; - var pos = 0; - var pl = 0; - for (var y = 0; y < height; ++y) { - stream.ensure(bytesPerLine); - pl++; - for (var x = 0; x < width; ++x) { - pos += padding; - if (hasAlpha) { - var alpha = bytes[pos]; - if (alpha) { - var opacity = alpha / 255; - literals[pl++] = 0 | bytes[pos + 1] / opacity; - literals[pl++] = 0 | bytes[pos + 2] / opacity; - literals[pl++] = 0 | bytes[pos + 3] / opacity; - literals[pl++] = alpha; - } else { - pl += 4; - } - } else { - literals[pl++] = bytes[pos]; - literals[pl++] = bytes[pos + 1]; - literals[pl++] = bytes[pos + 2]; - } - pos += 4 - padding; - } - stream.pos = pos; - } - break; - default: - fail('invalid format', 'bitmap'); - } - var ihdr = new Uint8Array([ - width >> 24 & 255, - width >> 16 & 255, - width >> 8 & 255, - width & 255, - height >> 24 & 255, - height >> 16 & 255, - height >> 8 & 255, - height & 255, - 8, - colorType, - 0, - 0, - 0 - ]); - var len = literals.length; - var maxBlockLength = 65535; - var idat = new Uint8Array(2 + len + Math.ceil(len / maxBlockLength) * 5 + 4); - var pi = 0; - idat[pi++] = 120; - idat[pi++] = 156; - var pos = 0; - while (len > maxBlockLength) { - idat[pi++] = 0; - idat[pi++] = 255; - idat[pi++] = 255; - idat[pi++] = 0; - idat[pi++] = 0; - idat.set(literals.subarray(pos, pos + maxBlockLength), pi); - pi += maxBlockLength; - pos += maxBlockLength; - len -= maxBlockLength; - } - idat[pi++] = 1; - idat[pi++] = len & 255; - idat[pi++] = len >> 8 & 255; - idat[pi++] = ~len & 65535 & 255; - idat[pi++] = (~len & 65535) >> 8 & 255; - idat.set(literals.subarray(pos), pi); - pi += literals.length - pos; - var adler = adler32(literals, 0, literals.length); - idat[pi++] = adler >> 24 & 255; - idat[pi++] = adler >> 16 & 255; - idat[pi++] = adler >> 8 & 255; - idat[pi++] = adler & 255; - var chunks = [ - new Uint8Array([ - 137, - 80, - 78, - 71, - 13, - 10, - 26, - 10 - ]), - createPngChunk('IHDR', ihdr), - plte, - trns, - createPngChunk('IDAT', idat), - createPngChunk('IEND', '') - ]; - return { - type: 'image', - id: tag.id, - width: width, - height: height, - mimeType: 'image/png', - data: new Blob(chunks, { - type: 'image/png' - }) - }; -} -function defineButton(tag, dictionary) { - var characters = tag.characters; - var states = { - up: {}, - over: {}, - down: {}, - hitTest: {} - }; - var i = 0, character; - while (character = characters[i++]) { - if (character.eob) - break; - var characterItem = dictionary[character.symbolId]; - var entry = { - symbolId: characterItem.id, - hasMatrix: !(!character.matrix), - matrix: character.matrix - }; - if (character.stateUp) - states.up[character.depth] = entry; - if (character.stateOver) - states.over[character.depth] = entry; - if (character.stateDown) - states.down[character.depth] = entry; - if (character.stateHitTest) - states.hitTest[character.depth] = entry; - } - var button = { - type: 'button', - id: tag.id, - buttonActions: tag.buttonActions, - states: states - }; - return button; -} -var nextFontId = 1; -function maxPower2(num) { - var maxPower = 0; - var val = num; - while (val >= 2) { - val /= 2; - ++maxPower; - } - return pow(2, maxPower); -} -function toString16(val) { - return fromCharCode(val >> 8 & 255, val & 255); -} -function toString32(val) { - return toString16(val >> 16) + toString16(val); -} -function defineFont(tag, dictionary) { - var tables = {}; - var codes = []; - var glyphIndex = {}; - var ranges = []; - var glyphs = tag.glyphs; - var glyphCount = glyphs.length; - if (tag.codes) { - codes = codes.concat(tag.codes); - for (var i = 0, code; code = codes[i]; ++i) - glyphIndex[code] = i; - codes.sort(function (a, b) { - return a - b; - }); - var i = 0; - var code; - while (code = codes[i++]) { - var start = code; - var end = start; - var indices = [ - i - 1 - ]; - while ((code = codes[i]) && end + 1 === code) { - ++end; - indices.push(i); - ++i; - } - ranges.push([ - start, - end, - indices - ]); - } - } else { - var indices = []; - var UAC_OFFSET = 57344; - for (var i = 0; i < glyphCount; i++) { - var code = UAC_OFFSET + i; - codes.push(code); - glyphIndex[code] = i; - indices.push(i); - } - ranges.push([ - UAC_OFFSET, - UAC_OFFSET + glyphCount - 1, - indices - ]); - } - var resolution = tag.resolution || 1; - var ascent = Math.ceil(tag.ascent / resolution) || 1024; - var descent = -Math.ceil(tag.descent / resolution) | 0; - var leading = tag.leading / resolution | 0; - tables['OS/2'] = '\0\x01\0\0' + toString16(tag.bold ? 700 : 400) + '\0\x05' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0\0\0\0\0\0\0\0\0' + '\0\0\0\0' + '\0\0\0\0' + '\0\0\0\0' + '\0\0\0\0' + 'ALF ' + toString16((tag.italic ? 1 : 0) | (tag.bold ? 32 : 0)) + toString16(codes[0]) + toString16(codes[codes.length - 1]) + toString16(ascent) + toString16(descent) + toString16(leading) + toString16(ascent) + toString16(-descent) + '\0\0\0\0' + '\0\0\0\0'; - ; - var startCount = ''; - var endCount = ''; - var idDelta = ''; - var idRangeOffset = ''; - var i = 0; - var range; - while (range = ranges[i++]) { - var start = range[0]; - var end = range[1]; - var code = range[2][0]; - startCount += toString16(start); - endCount += toString16(end); - idDelta += toString16(code - start + 1 & 65535); - idRangeOffset += toString16(0); - } - endCount += '\xff\xff'; - startCount += '\xff\xff'; - idDelta += '\0\x01'; - idRangeOffset += '\0\0'; - var segCount = ranges.length + 1; - var searchRange = maxPower2(segCount) * 2; - var rangeShift = 2 * segCount - searchRange; - var format314 = '\0\0' + toString16(segCount * 2) + toString16(searchRange) + toString16(logE(segCount) / logE(2)) + toString16(rangeShift) + endCount + '\0\0' + startCount + idDelta + idRangeOffset; - ; - tables['cmap'] = '\0\0\0\x01\0\x03\0\x01\0\0\0\f\0\x04' + toString16(format314.length + 4) + format314; - ; - var glyf = '\0\x01\0\0\0\0\0\0\0\0\0\0\0\x001\0'; - var loca = '\0\0'; - var offset = 16; - var maxPoints = 0; - var xMins = []; - var xMaxs = []; - var yMins = []; - var yMaxs = []; - var maxContours = 0; - var i = 0; - var code; - while (code = codes[i++]) { - var glyph = glyphs[glyphIndex[code]]; - var records = glyph.records; - var numberOfContours = 1; - var endPoint = 0; - var endPtsOfContours = ''; - var flags = ''; - var xCoordinates = ''; - var yCoordinates = ''; - var x = 0; - var y = 0; - var xMin = 1024; - var xMax = -1024; - var yMin = 1024; - var yMax = -1024; - for (var j = 0, record; record = records[j]; ++j) { - if (record.type) { - if (record.isStraight) { - if (record.isGeneral) { - flags += '\x01'; - var dx = record.deltaX / resolution; - var dy = -record.deltaY / resolution; - xCoordinates += toString16(dx); - yCoordinates += toString16(dy); - x += dx; - y += dy; - } else if (record.isVertical) { - flags += '\x11'; - var dy = -record.deltaY / resolution; - yCoordinates += toString16(dy); - y += dy; - } else { - flags += '!'; - var dx = record.deltaX / resolution; - xCoordinates += toString16(dx); - x += dx; - } - } else { - flags += '\0'; - var cx = record.controlDeltaX / resolution; - var cy = -record.controlDeltaY / resolution; - xCoordinates += toString16(cx); - yCoordinates += toString16(cy); - flags += '\x01'; - var dx = record.anchorDeltaX / resolution; - var dy = -record.anchorDeltaY / resolution; - xCoordinates += toString16(dx); - yCoordinates += toString16(dy); - ++endPoint; - x += cx + dx; - y += cy + dy; - } - if (x < xMin) - xMin = x; - if (x > xMax) - xMax = x; - if (y < yMin) - yMin = y; - if (y > yMax) - yMax = y; - ++endPoint; - } else { - if (record.eos) - break; - if (record.move) { - if (endPoint) { - ++numberOfContours; - endPtsOfContours += toString16(endPoint - 1); - } - flags += '\x01'; - var moveX = record.moveX / resolution; - var moveY = -record.moveY / resolution; - var dx = moveX - x; - var dy = moveY - y; - xCoordinates += toString16(dx); - yCoordinates += toString16(dy); - x = moveX; - y = moveY; - if (endPoint > maxPoints) - maxPoints = endPoint; - if (x < xMin) - xMin = x; - if (x > xMax) - xMax = x; - if (y < yMin) - yMin = y; - if (y > yMax) - yMax = y; - ++endPoint; - } - } - } - endPtsOfContours += toString16((endPoint || 1) - 1); - if (!j) { - xMin = xMax = yMin = yMax = 0; - flags += '1'; - } - var entry = toString16(numberOfContours) + toString16(xMin) + toString16(yMin) + toString16(xMax) + toString16(yMax) + endPtsOfContours + '\0\0' + flags + xCoordinates + yCoordinates; - ; - if (entry.length & 1) - entry += '\0'; - glyf += entry; - loca += toString16(offset / 2); - offset += entry.length; - xMins.push(xMin); - xMaxs.push(xMax); - yMins.push(yMin); - yMaxs.push(yMax); - if (numberOfContours > maxContours) - maxContours = numberOfContours; - if (endPoint > maxPoints) - maxPoints = endPoint; - } - loca += toString16(offset / 2); - tables['glyf'] = glyf; - tables['head'] = '\0\x01\0\0\0\x01\0\0\0\0\0\0_\x0f<\xf5\0\v\x04\0\0\0\0\0' + toString32(Date.now()) + '\0\0\0\0' + toString32(Date.now()) + toString16(min.apply(null, xMins)) + toString16(min.apply(null, yMins)) + toString16(max.apply(null, xMaxs)) + toString16(max.apply(null, yMaxs)) + toString16((tag.italic ? 2 : 0) | (tag.bold ? 1 : 0)) + '\0\b' + '\0\x02' + '\0\0' + '\0\0'; - ; - var advance = tag.advance; - tables['hhea'] = '\0\x01\0\0' + toString16(ascent) + toString16(descent) + toString16(leading) + toString16(advance ? max.apply(null, advance) : 1024) + '\0\0' + '\0\0' + '\x03\xb8' + '\0\x01' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + toString16(glyphCount + 1); - ; - var hmtx = '\0\0\0\0'; - for (var i = 0; i < glyphCount; ++i) - hmtx += toString16(advance ? advance[i] / resolution : 1024) + '\0\0'; - tables['hmtx'] = hmtx; - if (tag.kerning) { - var kerning = tag.kerning; - var nPairs = kerning.length; - var searchRange = maxPower2(nPairs) * 2; - var kern = '\0\0\0\x01\0\0' + toString16(14 + nPairs * 6) + '\0\x01' + toString16(nPairs) + toString16(searchRange) + toString16(logE(nPairs) / logE(2)) + toString16(2 * nPairs - searchRange); - ; - var i = 0; - var record; - while (record = kerning[i++]) { - kern += toString16(glyphIndex[record.code1]) + toString16(glyphIndex[record.code2]) + toString16(record.adjustment); - ; - } - tables['kern'] = kern; - } - tables['loca'] = loca; - tables['maxp'] = '\0\x01\0\0' + toString16(glyphCount + 1) + toString16(maxPoints) + toString16(maxContours) + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0' + '\0\0'; - ; - var uniqueId = 'swf-font-' + nextFontId++; - var fontName = tag.name || uniqueId; - var psName = fontName.replace(/ /g, ''); - var strings = [ - tag.copyright || 'Original licence', - fontName, - 'Unknown', - uniqueId, - fontName, - '1.0', - psName, - 'Unknown', - 'Unknown', - 'Unknown' - ]; - var count = strings.length; - var name = '\0\0' + toString16(count) + toString16(count * 12 + 6); - var offset = 0; - var i = 0; - var str; - while (str = strings[i++]) { - name += '\0\x01\0\0\0\0' + toString16(i - 1) + toString16(str.length) + toString16(offset); - offset += str.length; - } - tables['name'] = name + strings.join(''); - tables['post'] = '\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'; - ; - var names = keys(tables); - var numTables = names.length; - var header = '\0\x01\0\0' + toString16(numTables) + '\0\x80' + '\0\x03' + '\0 '; - ; - var data = ''; - var offset = numTables * 16 + header.length; - var i = 0; - var name; - while (name = names[i++]) { - var table = tables[name]; - var length = table.length; - header += name + '\0\0\0\0' + toString32(offset) + toString32(length); - ; - while (length & 3) { - table += '\0'; - ++length; - } - data += table; - while (offset & 3) - ++offset; - offset += length; - } - var otf = header + data; - var unitPerEm = 1024; - var metrics = { - ascent: ascent / unitPerEm, - descent: -descent / unitPerEm, - leading: leading / unitPerEm - }; - return { - type: 'font', - id: tag.id, - name: fontName, - uniqueName: psName + uniqueId, - codes: codes, - metrics: metrics, - bold: tag.bold === 1, - italic: tag.italic === 1, - data: otf - }; -} -function getUint16(buff, pos) { - return buff[pos] << 8 | buff[pos + 1]; -} -function parseJpegChunks(imgDef, bytes) { - var i = 0; - var n = bytes.length; - var chunks = []; - var code; - do { - var begin = i; - while (i < n && bytes[i] !== 255) - ++i; - while (i < n && bytes[i] === 255) - ++i; - code = bytes[i++]; - if (code === 218) { - i = n; - } else if (code === 217) { - i += 2; - continue; - } else if (code < 208 || code > 216) { - var length = getUint16(bytes, i); - if (code >= 192 && code <= 195) { - imgDef.height = getUint16(bytes, i + 3); - imgDef.width = getUint16(bytes, i + 5); - } - i += length; - } - chunks.push(bytes.subarray(begin, i)); - } while (i < n); - return chunks; -} -function defineImage(tag, dictionary) { - var img = { - type: 'image', - id: tag.id, - mimeType: tag.mimeType - }; - var imgData = tag.imgData; - var chunks; - if (tag.mimeType === 'image/jpeg') { - chunks = parseJpegChunks(img, imgData); - var alphaData = tag.alphaData; - if (alphaData) { - img.mask = createInflatedStream(alphaData, img.width * img.height).bytes; - } - if (tag.incomplete) { - var tables = dictionary[0]; - var header = tables.data; - if (header && header.size) { - chunks[0] = chunks[0].subarray(2); - chunks.unshift(header.slice(0, header.size - 2)); - } - } - } else { - chunks = [ - imgData - ]; - } - img.data = new Blob(chunks, { - type: tag.mimeType - }); - return img; -} -function defineLabel(tag, dictionary) { - var records = tag.records; - var m = tag.matrix; - var cmds = [ - 'c.save()', - 'c.transform(' + [ - m.a, - m.b, - m.c, - m.d, - m.tx / 20, - m.ty / 20 - ].join(',') + ')', - 'c.scale(0.05, 0.05)' - ]; - var dependencies = []; - var x = 0; - var y = 0; - var i = 0; - var record; - var codes; - while (record = records[i++]) { - if (record.eot) - break; - if (record.hasFont) { - var font = dictionary[record.fontId]; - codes = font.codes; - cmds.push('c.font="' + record.fontHeight + 'px \'' + font.uniqueName + '\'"'); - dependencies.push(font.id); - } - if (record.hasColor) { - cmds.push('ct.setFillStyle(c,"' + rgbaObjToStr(record.color) + '")'); - cmds.push('ct.setAlpha(c)'); - } else { - cmds.push('ct.setAlpha(c,true)'); - } - if (record.hasMoveX) - x = record.moveX; - if (record.hasMoveY) - y = record.moveY; - var entries = record.entries; - var j = 0; - var entry; - while (entry = entries[j++]) { - var code = codes[entry.glyphIndex]; - var text = code >= 32 && code != 34 && code != 92 ? fromCharCode(code) : '\\u' + (code + 65536).toString(16).substring(1); - cmds.push('c.fillText("' + text + '",' + x + ',' + y + ')'); - x += entry.advance; - } - } - cmds.push('c.restore()'); - var label = { - type: 'label', - id: tag.id, - bbox: tag.bbox, - data: cmds.join('\n') - }; - if (dependencies.length) - label.require = dependencies; - return label; -} -var GRAPHICS_FILL_CLIPPED_BITMAP = 65; -var GRAPHICS_FILL_FOCAL_RADIAL_GRADIENT = 19; -var GRAPHICS_FILL_LINEAR_GRADIENT = 16; -var GRAPHICS_FILL_NONSMOOTHED_CLIPPED_BITMAP = 67; -var GRAPHICS_FILL_NONSMOOTHED_REPEATING_BITMAP = 66; -var GRAPHICS_FILL_RADIAL_GRADIENT = 18; -var GRAPHICS_FILL_REPEATING_BITMAP = 64; -var GRAPHICS_FILL_SOLID = 0; -function applySegmentToStyles(segment, styles, linePaths, fillPaths, isMorph) { - if (!segment) { - return; - } - var commands = segment.commands; - var data = segment.data; - var morphData = segment.morphData; - if (morphData) { - } - var path; - var targetSegment; - var command; - var i; - if (styles.fill0) { - path = fillPaths[styles.fill0 - 1]; - if (!(styles.fill1 || styles.line)) { - targetSegment = path.head(); - targetSegment.commands = []; - targetSegment.data = []; - targetSegment.morphData = isMorph ? [] : null; - } else { - targetSegment = path.addSegment([], [], isMorph ? [] : null); - } - var targetCommands = targetSegment.commands; - var targetData = targetSegment.data; - var targetMorphData = targetSegment.morphData; - targetCommands.push(SHAPE_MOVE_TO); - var j = data.length - 2; - targetData.push(data[j], data[j + 1]); - if (isMorph) { - targetMorphData.push(morphData[j], morphData[j + 1]); - } - for (i = commands.length; i-- > 1; j -= 2) { - command = commands[i]; - targetCommands.push(command); - targetData.push(data[j - 2], data[j - 1]); - if (isMorph) { - targetMorphData.push(morphData[j - 2], morphData[j - 1]); - } - if (command === SHAPE_CURVE_TO) { - targetData.push(data[j - 4], data[j - 3]); - if (isMorph) { - targetMorphData.push(morphData[j - 4], morphData[j - 3]); - } - j -= 2; - } - } - if (isMorph) { - } - } - if (styles.line && styles.fill1) { - path = linePaths[styles.line - 1]; - path.addSegment(commands, data, morphData); - } -} -function convertRecordsToStyledPaths(records, fillPaths, linePaths, dictionary, dependencies, recordsMorph, transferables) { - var isMorph = recordsMorph !== null; - var styles = { - fill0: 0, - fill1: 0, - line: 0 - }; - var segment = null; - var allPaths; - var defaultPath; - var numRecords = records.length - 1; - var x = 0; - var y = 0; - var morphX = 0; - var morphY = 0; - var path; - for (var i = 0, j = 0; i < numRecords; i++) { - var record = records[i]; - var morphRecord; - if (isMorph) { - morphRecord = recordsMorph[j++]; - } - if (record.type === 0) { - if (segment) { - applySegmentToStyles(segment, styles, linePaths, fillPaths, isMorph); - } - if (record.hasNewStyles) { - if (!allPaths) { - allPaths = []; - } - push.apply(allPaths, fillPaths); - fillPaths = createPathsList(record.fillStyles, false, dictionary, dependencies); - push.apply(allPaths, linePaths); - linePaths = createPathsList(record.lineStyles, true, dictionary, dependencies); - if (defaultPath) { - allPaths.push(defaultPath); - defaultPath = null; - } - styles = { - fill0: 0, - fill1: 0, - line: 0 - }; - } - if (record.hasFillStyle0) { - styles.fill0 = record.fillStyle0; - } - if (record.hasFillStyle1) { - styles.fill1 = record.fillStyle1; - } - if (record.hasLineStyle) { - styles.line = record.lineStyle; - } - if (styles.fill1) { - path = fillPaths[styles.fill1 - 1]; - } else if (styles.line) { - path = linePaths[styles.line - 1]; - } else if (styles.fill0) { - path = fillPaths[styles.fill0 - 1]; - } - if (record.move) { - x = record.moveX | 0; - y = record.moveY | 0; - } - if (path) { - segment = path.addSegment([], [], isMorph ? [] : null); - segment.commands.push(SHAPE_MOVE_TO); - segment.data.push(x, y); - if (isMorph) { - if (morphRecord.type === 0) { - morphX = morphRecord.moveX | 0; - morphY = morphRecord.moveY | 0; - } else { - morphX = x; - morphY = y; - j--; - } - segment.morphData.push(morphX, morphY); - } - } - } else { - if (!segment) { - if (!defaultPath) { - var style = { - color: { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }, - width: 20 - }; - defaultPath = new SegmentedPath(null, processStyle(style, true)); - } - segment = defaultPath.addSegment([], [], isMorph ? [] : null); - segment.commands.push(SHAPE_MOVE_TO); - segment.data.push(x, y); - if (isMorph) { - segment.morphData.push(morphX, morphY); - } - } - if (isMorph) { - while (morphRecord && morphRecord.type === 0) { - morphRecord = recordsMorph[j++]; - } - if (!morphRecord) { - morphRecord = record; - } - } - if (record.isStraight && (!isMorph || morphRecord.isStraight)) { - x += record.deltaX | 0; - y += record.deltaY | 0; - segment.commands.push(SHAPE_LINE_TO); - segment.data.push(x, y); - if (isMorph) { - morphX += morphRecord.deltaX | 0; - morphY += morphRecord.deltaY | 0; - segment.morphData.push(morphX, morphY); - } - } else { - var cx, cy; - var deltaX, deltaY; - if (!record.isStraight) { - cx = x + record.controlDeltaX | 0; - cy = y + record.controlDeltaY | 0; - x = cx + record.anchorDeltaX | 0; - y = cy + record.anchorDeltaY | 0; - } else { - deltaX = record.deltaX | 0; - deltaY = record.deltaY | 0; - cx = x + (deltaX >> 1); - cy = y + (deltaY >> 1); - x += deltaX; - y += deltaY; - } - segment.commands.push(SHAPE_CURVE_TO); - segment.data.push(cx, cy, x, y); - if (isMorph) { - if (!morphRecord.isStraight) { - cx = morphX + morphRecord.controlDeltaX | 0; - cy = morphY + morphRecord.controlDeltaY | 0; - morphX = cx + morphRecord.anchorDeltaX | 0; - morphY = cy + morphRecord.anchorDeltaY | 0; - } else { - deltaX = morphRecord.deltaX | 0; - deltaY = morphRecord.deltaY | 0; - cx = morphX + (deltaX >> 1); - cy = morphY + (deltaY >> 1); - morphX += deltaX; - morphY += deltaY; - } - segment.morphData.push(cx, cy, morphX, morphY); - } - } - } - } - applySegmentToStyles(segment, styles, linePaths, fillPaths, isMorph); - if (allPaths) { - push.apply(allPaths, fillPaths); - } else { - allPaths = fillPaths; - } - push.apply(allPaths, linePaths); - if (defaultPath) { - allPaths.push(defaultPath); - } - var removeCount = 0; - for (i = 0; i < allPaths.length; i++) { - path = allPaths[i]; - if (!path.head()) { - removeCount++; - continue; - } - allPaths[i - removeCount] = segmentedPathToShapePath(path, isMorph, transferables); - } - allPaths.length -= removeCount; - return allPaths; -} -function segmentedPathToShapePath(path, isMorph, transferables) { - var start = path.head(); - var end = start; - var finalRoot = null; - var finalHead = null; - var skippedMoves = 0; - var current = start.prev; - while (start) { - while (current) { - if (path.segmentsConnect(current, start)) { - if (current.next !== start) { - path.removeSegment(current); - path.insertSegment(current, start); - } - start = current; - current = start.prev; - skippedMoves++; - continue; - } - if (path.segmentsConnect(end, current)) { - path.removeSegment(current); - end.next = current; - current = current.prev; - end.next.prev = end; - end.next.next = null; - end = end.next; - skippedMoves++; - continue; - } - current = current.prev; - } - current = start.prev; - if (!finalRoot) { - finalRoot = start; - finalHead = end; - } else { - finalHead.next = start; - start.prev = finalHead; - finalHead = end; - finalHead.next = null; - } - if (!current) { - break; - } - start = end = current; - current = start.prev; - } - var totalCommandsLength = -skippedMoves; - var totalDataLength = -skippedMoves << 1; - current = finalRoot; - while (current) { - totalCommandsLength += current.commands.length; - totalDataLength += current.data.length; - current = current.next; - } - var shape = new ShapePath(path.fillStyle, path.lineStyle, totalCommandsLength, totalDataLength, isMorph, transferables); - var allCommands = shape.commands; - var allData = shape.data; - var allMorphData = shape.morphData; - var commandsIndex = 0; - var dataIndex = 0; - current = finalRoot; - while (current) { - var commands = current.commands; - var data = current.data; - var morphData = current.morphData; - var offset = +(data[0] === allData[dataIndex - 2] && data[1] === allData[dataIndex - 1]); - for (var i = offset; i < commands.length; i++, commandsIndex++) { - allCommands[commandsIndex] = commands[i]; - } - for (i = offset << 1; i < data.length; i++, dataIndex++) { - allData[dataIndex] = data[i]; - if (isMorph) { - allMorphData[dataIndex] = morphData[i]; - } - } - current = current.next; - } - return shape; -} -var CAPS_STYLE_TYPES = [ - 'round', - 'none', - 'square' - ]; -var JOIN_STYLE_TYPES = [ - 'round', - 'bevel', - 'miter' - ]; -function processStyle(style, isLineStyle, dictionary, dependencies) { - if (isLineStyle) { - style.lineCap = CAPS_STYLE_TYPES[style.endCapStyle | 0]; - style.lineJoin = JOIN_STYLE_TYPES[style.joinStyle | 0]; - style.miterLimit = (style.miterLimitFactor || 1.5) * 2; - if (!style.color && style.hasFill) { - var fillStyle = processStyle(style.fillStyle, false, dictionary, dependencies); - style.style = fillStyle.style; - style.type = fillStyle.type; - style.transform = fillStyle.transform; - style.records = fillStyle.records; - style.focalPoint = fillStyle.focalPoint; - style.bitmapId = fillStyle.bitmapId; - style.repeat = fillStyle.repeat; - style.fillStyle = null; - return style; - } - } - var color; - if (style.type === undefined || style.type === GRAPHICS_FILL_SOLID) { - color = style.color; - style.style = 'rgba(' + color.red + ',' + color.green + ',' + color.blue + ',' + color.alpha / 255 + ')'; - style.color = null; - return style; - } - var scale; - switch (style.type) { - case GRAPHICS_FILL_LINEAR_GRADIENT: - case GRAPHICS_FILL_RADIAL_GRADIENT: - case GRAPHICS_FILL_FOCAL_RADIAL_GRADIENT: - scale = 819.2; - break; - case GRAPHICS_FILL_REPEATING_BITMAP: - case GRAPHICS_FILL_CLIPPED_BITMAP: - case GRAPHICS_FILL_NONSMOOTHED_REPEATING_BITMAP: - case GRAPHICS_FILL_NONSMOOTHED_CLIPPED_BITMAP: - if (dictionary[style.bitmapId]) { - dependencies.push(dictionary[style.bitmapId].id); - scale = 0.05; - } - break; - default: - fail('invalid fill style', 'shape'); - } - if (!style.matrix) { - return style; - } - var matrix = style.matrix; - style.transform = { - a: matrix.a * scale, - b: matrix.b * scale, - c: matrix.c * scale, - d: matrix.d * scale, - e: matrix.tx, - f: matrix.ty - }; - style.matrix = null; - return style; -} -function createPathsList(styles, isLineStyle, dictionary, dependencies) { - var paths = []; - for (var i = 0; i < styles.length; i++) { - var style = processStyle(styles[i], isLineStyle, dictionary, dependencies); - if (!isLineStyle) { - paths[i] = new SegmentedPath(style, null); - } else { - paths[i] = new SegmentedPath(null, style); - } - } - return paths; -} -function defineShape(tag, dictionary) { - var dependencies = []; - var transferables = []; - var fillPaths = createPathsList(tag.fillStyles, false, dictionary, dependencies); - var linePaths = createPathsList(tag.lineStyles, true, dictionary, dependencies); - var paths = convertRecordsToStyledPaths(tag.records, fillPaths, linePaths, dictionary, dependencies, tag.recordsMorph || null, transferables); - if (tag.bboxMorph) { - var mbox = tag.bboxMorph; - extendBoundsByPoint(tag.bbox, mbox.xMin, mbox.yMin); - extendBoundsByPoint(tag.bbox, mbox.xMax, mbox.yMax); - mbox = tag.strokeBboxMorph; - if (mbox) { - extendBoundsByPoint(tag.strokeBbox, mbox.xMin, mbox.yMin); - extendBoundsByPoint(tag.strokeBbox, mbox.xMax, mbox.yMax); - } - } - return { - type: 'shape', - id: tag.id, - strokeBbox: tag.strokeBbox, - strokeBboxMorph: tag.strokeBboxMorph, - bbox: tag.bbox, - bboxMorph: tag.bboxMorph, - isMorph: tag.isMorph, - paths: paths, - require: dependencies.length ? dependencies : null, - transferables: transferables - }; -} -function logShape(paths, bbox) { - var output = '{"bounds":' + JSON.stringify(bbox) + ',"paths":[' + paths.map(function (path) { - return path.serialize(); - }).join() + ']}'; - console.log(output); -} -function SegmentedPath(fillStyle, lineStyle) { - this.fillStyle = fillStyle; - this.lineStyle = lineStyle; - this._head = null; -} -SegmentedPath.prototype = { - addSegment: function (commands, data, morphData) { - var segment = { - commands: commands, - data: data, - morphData: morphData, - prev: this._head, - next: null - }; - if (this._head) { - this._head.next = segment; - } - this._head = segment; - return segment; - }, - removeSegment: function (segment) { - if (segment.prev) { - segment.prev.next = segment.next; - } - if (segment.next) { - segment.next.prev = segment.prev; - } - }, - insertSegment: function (segment, next) { - var prev = next.prev; - segment.prev = prev; - segment.next = next; - if (prev) { - prev.next = segment; - } - next.prev = segment; - }, - head: function () { - return this._head; - }, - segmentsConnect: function (first, second) { - var firstLength = first.data.length; - return first.data[firstLength - 2] === second.data[0] && first.data[firstLength - 1] === second.data[1]; - } -}; -var SHAPE_MOVE_TO = 1; -var SHAPE_LINE_TO = 2; -var SHAPE_CURVE_TO = 3; -var SHAPE_WIDE_MOVE_TO = 4; -var SHAPE_WIDE_LINE_TO = 5; -var SHAPE_CUBIC_CURVE_TO = 6; -var SHAPE_CIRCLE = 7; -var SHAPE_ELLIPSE = 8; -function ShapePath(fillStyle, lineStyle, commandsCount, dataLength, isMorph, transferables) { - this.fillStyle = fillStyle; - this.lineStyle = lineStyle; - if (commandsCount) { - this.commands = new Uint8Array(commandsCount); - this.data = new Int32Array(dataLength); - this.morphData = isMorph ? new Int32Array(dataLength) : null; - } else { - this.commands = []; - this.data = []; - } - this.bounds = null; - this.strokeBounds = null; - this.isMorph = !(!isMorph); - this.fullyInitialized = false; - if (inWorker) { - this.buffers = [ - this.commands.buffer, - this.data.buffer - ]; - transferables.push(this.commands.buffer, this.data.buffer); - if (isMorph) { - this.buffers.push(this.morphData.buffer); - transferables.push(this.morphData.buffer); - } - } else { - this.buffers = null; - } -} -ShapePath.prototype = { - get isEmpty() { - return this.commands.length === 0; - }, - moveTo: function (x, y) { - if (this.commands[this.commands.length - 1] === SHAPE_MOVE_TO) { - this.data[this.data.length - 2] = x; - this.data[this.data.length - 1] = y; - return; - } - this.commands.push(SHAPE_MOVE_TO); - this.data.push(x, y); - }, - lineTo: function (x, y) { - this.commands.push(SHAPE_LINE_TO); - this.data.push(x, y); - }, - curveTo: function (controlX, controlY, anchorX, anchorY) { - this.commands.push(SHAPE_CURVE_TO); - this.data.push(controlX, controlY, anchorX, anchorY); - }, - cubicCurveTo: function (control1X, control1Y, control2X, control2Y, anchorX, anchorY) { - this.commands.push(SHAPE_CUBIC_CURVE_TO); - this.data.push(control1X, control1Y, control2X, control2Y, anchorX, anchorY); - }, - rect: function (x, y, w, h) { - var x2 = x + w; - var y2 = y + h; - this.commands.push(SHAPE_MOVE_TO, SHAPE_LINE_TO, SHAPE_LINE_TO, SHAPE_LINE_TO, SHAPE_LINE_TO); - this.data.push(x, y, x2, y, x2, y2, x, y2, x, y); - }, - circle: function (x, y, radius) { - this.commands.push(SHAPE_CIRCLE); - this.data.push(x, y, radius); - }, - ellipse: function (x, y, radiusX, radiusY) { - this.commands.push(SHAPE_ELLIPSE); - this.data.push(x, y, radiusX, radiusY); - }, - draw: function (ctx, clip, ratio, colorTransform) { - if (clip && !this.fillStyle) { - return; - } - ctx.beginPath(); - var commands = this.commands; - var data = this.data; - var morphData = this.morphData; - var formOpen = false; - var formOpenX = 0; - var formOpenY = 0; - if (!this.isMorph) { - for (var j = 0, k = 0; j < commands.length; j++) { - switch (commands[j]) { - case SHAPE_MOVE_TO: - formOpen = true; - formOpenX = data[k++] / 20; - formOpenY = data[k++] / 20; - ctx.moveTo(formOpenX, formOpenY); - break; - case SHAPE_WIDE_MOVE_TO: - ctx.moveTo(data[k++] / 20, data[k++] / 20); - k += 2; - break; - case SHAPE_LINE_TO: - ctx.lineTo(data[k++] / 20, data[k++] / 20); - break; - case SHAPE_WIDE_LINE_TO: - ctx.lineTo(data[k++] / 20, data[k++] / 20); - k += 2; - break; - case SHAPE_CURVE_TO: - ctx.quadraticCurveTo(data[k++] / 20, data[k++] / 20, data[k++] / 20, data[k++] / 20); - break; - case SHAPE_CUBIC_CURVE_TO: - ctx.bezierCurveTo(data[k++] / 20, data[k++] / 20, data[k++] / 20, data[k++] / 20, data[k++] / 20, data[k++] / 20); - break; - case SHAPE_CIRCLE: - if (formOpen) { - ctx.lineTo(formOpenX, formOpenY); - formOpen = false; - } - ctx.moveTo((data[k] + data[k + 2]) / 20, data[k + 1] / 20); - ctx.arc(data[k++] / 20, data[k++] / 20, data[k++] / 20, 0, Math.PI * 2, false); - break; - case SHAPE_ELLIPSE: - if (formOpen) { - ctx.lineTo(formOpenX, formOpenY); - formOpen = false; - } - var x = data[k++]; - var y = data[k++]; - var rX = data[k++]; - var rY = data[k++]; - var radius; - if (rX !== rY) { - ctx.save(); - var ellipseScale; - if (rX > rY) { - ellipseScale = rX / rY; - radius = rY; - x /= ellipseScale; - ctx.scale(ellipseScale, 1); - } else { - ellipseScale = rY / rX; - radius = rX; - y /= ellipseScale; - ctx.scale(1, ellipseScale); - } - } - ctx.moveTo((x + radius) / 20, y / 20); - ctx.arc(x / 20, y / 20, radius / 20, 0, Math.PI * 2, false); - if (rX !== rY) { - ctx.restore(); - } - break; - default: - if (commands[j] === 0 && j === commands.length - 1) { - break; - } - console.warn('Unknown drawing command encountered: ' + commands[j]); - } - } - } else { - for (var j = 0, k = 0; j < commands.length; j++) { - switch (commands[j]) { - case SHAPE_MOVE_TO: - ctx.moveTo(morph(data[k] / 20, morphData[k++] / 20, ratio), morph(data[k] / 20, morphData[k++] / 20, ratio)); - break; - case SHAPE_LINE_TO: - ctx.lineTo(morph(data[k] / 20, morphData[k++] / 20, ratio), morph(data[k] / 20, morphData[k++] / 20, ratio)); - break; - case SHAPE_CURVE_TO: - ctx.quadraticCurveTo(morph(data[k] / 20, morphData[k++] / 20, ratio), morph(data[k] / 20, morphData[k++] / 20, ratio), morph(data[k] / 20, morphData[k++] / 20, ratio), morph(data[k] / 20, morphData[k++] / 20, ratio)); - break; - default: - console.warn('Drawing command not supported for morph shapes: ' + commands[j]); - } - } - } - if (!clip) { - var fillStyle = this.fillStyle; - if (fillStyle) { - colorTransform.setFillStyle(ctx, fillStyle.style); - ctx.imageSmoothingEnabled = ctx.mozImageSmoothingEnabled = fillStyle.smooth; - var m = fillStyle.transform; - ctx.save(); - colorTransform.setAlpha(ctx); - if (m) { - ctx.transform(m.a, m.b, m.c, m.d, m.e / 20, m.f / 20); - } - ctx.fill(); - ctx.restore(); - } - var lineStyle = this.lineStyle; - if (lineStyle) { - colorTransform.setStrokeStyle(ctx, lineStyle.style); - ctx.save(); - colorTransform.setAlpha(ctx); - ctx.lineWidth = Math.max(lineStyle.width / 20, 1); - ctx.lineCap = lineStyle.lineCap; - ctx.lineJoin = lineStyle.lineJoin; - ctx.miterLimit = lineStyle.miterLimit; - ctx.stroke(); - ctx.restore(); - } - } else { - ctx.fill(); - } - ctx.closePath(); - }, - isPointInPath: function (x, y) { - if (!(this.fillStyle || this.lineStyle)) { - return false; - } - var bounds = this.strokeBounds || this.bounds || this._calculateBounds(); - if (x < bounds.xMin || x > bounds.xMax || y < bounds.yMin || y > bounds.yMax) { - return false; - } - if (this.fillStyle && this.isPointInFill(x, y)) { - return true; - } - return this.lineStyle && this.lineStyle.width !== undefined && this.isPointInStroke(x, y); - }, - isPointInFill: function (x, y) { - var commands = this.commands; - var data = this.data; - var length = commands.length; - var inside = false; - var fromX = 0; - var fromY = 0; - var toX = 0; - var toY = 0; - var localX; - var localY; - var cpX; - var cpY; - var rX; - var rY; - var formOpen = false; - var formOpenX = 0; - var formOpenY = 0; - for (var commandIndex = 0, dataIndex = 0; commandIndex < length; commandIndex++) { - switch (commands[commandIndex]) { - case SHAPE_WIDE_MOVE_TO: - dataIndex += 2; - case SHAPE_MOVE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - if (formOpen && intersectsLine(x, y, fromX, fromY, formOpenX, formOpenY)) { - inside = !inside; - } - formOpen = true; - formOpenX = toX; - formOpenY = toY; - break; - case SHAPE_WIDE_LINE_TO: - dataIndex += 2; - case SHAPE_LINE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - if (intersectsLine(x, y, fromX, fromY, toX, toY)) { - inside = !inside; - } - break; - case SHAPE_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - if (cpY > y === fromY > y && toY > y === fromY > y) { - break; - } - if (fromX >= x && cpX >= x && toX >= x) { - inside = !inside; - break; - } - var a = fromY - 2 * cpY + toY; - var c = fromY - y; - var b = 2 * (cpY - fromY); - var d = b * b - 4 * a * c; - if (d < 0) { - break; - } - d = Math.sqrt(d); - a = 1 / (a + a); - var t1 = (d - b) * a; - var t2 = (-b - d) * a; - if (t1 >= 0 && t1 <= 1 && quadraticBezier(fromX, cpX, toX, t1) > x) { - inside = !inside; - } - if (t2 >= 0 && t2 <= 1 && quadraticBezier(fromX, cpX, toX, t2) > x) { - inside = !inside; - } - break; - case SHAPE_CUBIC_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - var cp2X = data[dataIndex++]; - var cp2Y = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - if (cpY > y === fromY > y && cp2Y > y === fromY > y && toY > y === fromY > y) { - break; - } - if (fromX >= x && cpX >= x && cp2X >= x && toX >= x) { - inside = !inside; - break; - } - var roots = cubicXAtY(fromX, fromY, cpX, cpY, cp2X, cp2Y, toX, toY, y); - for (var i = roots.length; i--;) { - if (roots[i] >= x) { - inside = !inside; - } - } - break; - case SHAPE_CIRCLE: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - var r = data[dataIndex++]; - localX = x - toX; - localY = y - toY; - if (localX * localX + localY * localY < r * r) { - inside = !inside; - } - toX += r; - break; - case SHAPE_ELLIPSE: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - rX = data[dataIndex++]; - rY = data[dataIndex++]; - localX = x - cpX; - localY = y - cpY; - if (localX * localX / (rX * rX) + localY * localY / (rY * rY) <= 1) { - inside = !inside; - } - toX = cpX + rX; - toY = cpY; - break; - default: - if (!inWorker) { - console.warn('Drawing command not handled in isPointInPath: ' + commands[commandIndex]); - } - } - fromX = toX; - fromY = toY; - } - if (formOpen && intersectsLine(x, y, fromX, fromY, formOpenX, formOpenY)) { - inside = !inside; - } - return inside; - }, - isPointInStroke: function (x, y) { - var commands = this.commands; - var data = this.data; - var length = commands.length; - var width = this.lineStyle.width; - var halfWidth = width / 2; - var halfWidthSq = halfWidth * halfWidth; - var minX = x - halfWidth; - var maxX = x + halfWidth; - var minY = y - halfWidth; - var maxY = y + halfWidth; - var fromX = 0; - var fromY = 0; - var toX = 0; - var toY = 0; - var localX; - var localY; - var cpX; - var cpY; - var rX; - var rY; - var curveX; - var curveY; - var t; - for (var commandIndex = 0, dataIndex = 0; commandIndex < length; commandIndex++) { - switch (commands[commandIndex]) { - case SHAPE_WIDE_MOVE_TO: - dataIndex += 2; - case SHAPE_MOVE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - break; - case SHAPE_WIDE_LINE_TO: - dataIndex += 2; - case SHAPE_LINE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - if (fromX === toX && fromY === toY) { - break; - } - if (maxX < fromX && maxX < toX || minX > fromX && minX > toX || maxY < fromY && maxY < toY || minY > fromY && minY > toY) { - break; - } - if (toX === fromX || toY === fromY) { - return true; - } - t = ((x - fromX) * (toX - fromX) + (y - fromY) * (toY - fromY)) / distanceSq(fromX, fromY, toX, toY); - if (t < 0) { - if (distanceSq(x, y, fromX, fromY) <= halfWidthSq) { - return true; - } - break; - } - if (t > 1) { - if (distanceSq(x, y, toX, toY) <= halfWidthSq) { - return true; - } - break; - } - if (distanceSq(x, y, fromX + t * (toX - fromX), fromY + t * (toY - fromY)) <= halfWidthSq) { - return true; - } - break; - case SHAPE_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - var extremeX = quadraticBezierExtreme(fromX, cpX, toX); - if (maxX < fromX && maxX < extremeX && maxX < toX || minX > fromX && minX > extremeX && minX > toX) { - break; - } - var extremeY = quadraticBezierExtreme(fromY, cpY, toY); - if (maxY < fromY && maxY < extremeY && maxY < toY || minY > fromY && minY > extremeY && minY > toY) { - break; - } - for (t = 0; t < 1; t += 0.02) { - curveX = quadraticBezier(fromX, cpX, toX, t); - if (curveX < minX || curveX > maxX) { - continue; - } - curveY = quadraticBezier(fromY, cpY, toY, t); - if (curveY < minY || curveY > maxY) { - continue; - } - if ((x - curveX) * (x - curveX) + (y - curveY) * (y - curveY) < halfWidthSq) { - return true; - } - } - break; - case SHAPE_CUBIC_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - var cp2X = data[dataIndex++]; - var cp2Y = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - var extremesX = cubicBezierExtremes(fromX, cpX, cp2X, toX); - while (extremesX.length < 2) { - extremesX.push(toX); - } - if (maxX < fromX && maxX < toX && maxX < extremesX[0] && maxX < extremesX[1] || minX > fromX && minX > toX && minX > extremesX[0] && minX > extremesX[1]) { - break; - } - var extremesY = cubicBezierExtremes(fromY, cpY, cp2Y, toY); - while (extremesY.length < 2) { - extremesY.push(toY); - } - if (maxY < fromY && maxY < toY && maxY < extremesY[0] && maxY < extremesY[1] || minY > fromY && minY > toY && minY > extremesY[0] && minY > extremesY[1]) { - break; - } - for (t = 0; t < 1; t += 0.02) { - curveX = cubicBezier(fromX, cpX, cp2X, toX, t); - if (curveX < minX || curveX > maxX) { - continue; - } - curveY = cubicBezier(fromY, cpY, cp2Y, toY, t); - if (curveY < minY || curveY > maxY) { - continue; - } - if ((x - curveX) * (x - curveX) + (y - curveY) * (y - curveY) < halfWidthSq) { - return true; - } - } - break; - case SHAPE_CIRCLE: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - var r = data[dataIndex++]; - toX = cpX + r; - toY = cpY; - if (maxX < cpX - r || minX > cpX + r || maxY < cpY - r || minY > cpY + r) { - break; - } - localX = x - cpX; - localY = y - cpY; - var rMin = r - halfWidth; - var rMax = r + halfWidth; - var distSq = localX * localX + localY * localY; - if (distSq >= rMin * rMin && distSq <= rMax * rMax) { - return true; - } - break; - case SHAPE_ELLIPSE: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - rX = data[dataIndex++]; - rY = data[dataIndex++]; - toX = cpX + rX; - toY = cpY; - localX = Math.abs(x - cpX); - localY = Math.abs(y - cpY); - localX -= halfWidth; - localY -= halfWidth; - if (localX * localX / (rX * rX) + localY * localY / (rY * rY) > 1) { - break; - } - localX += width; - localY += width; - if (localX * localX / (rX * rX) + localY * localY / (rY * rY) > 1) { - return true; - } - break; - default: - if (!inWorker) { - console.warn('Drawing command not handled in isPointInPath: ' + commands[commandIndex]); - } - } - fromX = toX; - fromY = toY; - } - return false; - }, - getBounds: function (includeStroke) { - var bounds = includeStroke ? this.strokeBounds : this.bounds; - if (!bounds) { - this._calculateBounds(); - bounds = includeStroke ? this.strokeBounds : this.bounds; - } - return bounds; - }, - _calculateBounds: function () { - var commands = this.commands; - var data = this.data; - var length = commands.length; - var bounds; - if (commands[0] === SHAPE_MOVE_TO || commands[0] > SHAPE_CUBIC_CURVE_TO) { - bounds = { - xMin: data[0], - yMin: data[1] - }; - } else { - bounds = { - xMin: 0, - yMin: 0 - }; - } - bounds.xMax = bounds.xMin; - bounds.yMax = bounds.yMin; - var fromX = bounds.xMin; - var fromY = bounds.yMin; - for (var commandIndex = 0, dataIndex = 0; commandIndex < length; commandIndex++) { - var toX; - var toY; - var cpX; - var cpY; - switch (commands[commandIndex]) { - case SHAPE_WIDE_MOVE_TO: - dataIndex += 2; - case SHAPE_MOVE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - extendBoundsByPoint(bounds, toX, toY); - break; - case SHAPE_WIDE_LINE_TO: - dataIndex += 2; - case SHAPE_LINE_TO: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - extendBoundsByPoint(bounds, toX, toY); - break; - case SHAPE_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - extendBoundsByPoint(bounds, toX, toY); - if (cpX < fromX || cpX > toX) { - extendBoundsByX(bounds, quadraticBezierExtreme(fromX, cpX, toX)); - } - if (cpY < fromY || cpY > toY) { - extendBoundsByY(bounds, quadraticBezierExtreme(fromY, cpY, toY)); - } - break; - case SHAPE_CUBIC_CURVE_TO: - cpX = data[dataIndex++]; - cpY = data[dataIndex++]; - var cp2X = data[dataIndex++]; - var cp2Y = data[dataIndex++]; - toX = data[dataIndex++]; - toY = data[dataIndex++]; - extendBoundsByPoint(bounds, toX, toY); - var extremes; - var i; - if (cpX < fromX || cp2X < fromX || cpX > toX || cp2X > toX) { - extremes = cubicBezierExtremes(fromX, cpX, cp2X, toX); - for (i = extremes.length; i--;) { - extendBoundsByX(bounds, extremes[i]); - } - } - if (cpY < fromY || cp2Y < fromY || cpY > toY || cp2Y > toY) { - extremes = cubicBezierExtremes(fromY, cpY, cp2Y, toY); - for (i = extremes.length; i--;) { - extendBoundsByY(bounds, extremes[i]); - } - } - break; - case SHAPE_CIRCLE: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - var radius = data[dataIndex++]; - extendBoundsByPoint(bounds, toX - radius, toY - radius); - extendBoundsByPoint(bounds, toX + radius, toY + radius); - toX += radius; - break; - case SHAPE_ELLIPSE: - toX = data[dataIndex++]; - toY = data[dataIndex++]; - var radiusX = data[dataIndex++]; - var radiusY = data[dataIndex++]; - extendBoundsByPoint(bounds, toX - radiusX, toY - radiusY); - extendBoundsByPoint(bounds, toX + radiusX, toY + radiusY); - toX += radiusX; - break; - default: - if (!inWorker) { - console.warn('Drawing command not handled in bounds calculation: ' + commands[commandIndex]); - } - } - fromX = toX; - fromY = toY; - } - this.bounds = bounds; - if (this.lineStyle) { - var halfLineWidth = this.lineStyle.width / 2; - this.strokeBounds = { - xMin: bounds.xMin - halfLineWidth, - yMin: bounds.yMin - halfLineWidth, - xMax: bounds.xMax + halfLineWidth, - yMax: bounds.yMax + halfLineWidth - }; - return this.strokeBounds; - } else { - this.strokeBounds = bounds; - } - return bounds; - }, - serialize: function () { - var output = '{'; - if (this.fillStyle) { - output += '"fill":' + JSON.stringify(this.fillStyle) + ','; - } - if (this.lineStyle) { - output += '"stroke":' + JSON.stringify(this.lineStyle) + ','; - } - output += '"commands":[' + Array.apply([], this.commands).join() + '],'; - output += '"data":[' + Array.apply([], this.data).join() + ']'; - return output + '}'; - } -}; -ShapePath.fromPlainObject = function (obj) { - var path = new ShapePath(obj.fill || null, obj.stroke || null); - path.commands = new Uint8Array(obj.commands); - path.data = new Int32Array(obj.data); - if (!inWorker) { - finishShapePath(path); - } - return path; -}; -function distanceSq(x1, y1, x2, y2) { - var dX = x2 - x1; - var dY = y2 - y1; - return dX * dX + dY * dY; -} -function intersectsLine(x, y, x1, y1, x2, y2) { - return y2 > y !== y1 > y && x < (x1 - x2) * (y - y2) / (y1 - y2) + x2; -} -function quadraticBezier(from, cp, to, t) { - var inverseT = 1 - t; - return from * inverseT * inverseT + 2 * cp * inverseT * t + to * t * t; -} -function quadraticBezierExtreme(from, cp, to) { - var t = (from - cp) / (from - 2 * cp + to); - if (t < 0) { - return from; - } - if (t > 1) { - return to; - } - return quadraticBezier(from, cp, to, t); -} -function cubicBezier(from, cp, cp2, to, t) { - var tSq = t * t; - var inverseT = 1 - t; - var inverseTSq = inverseT * inverseT; - return from * inverseT * inverseTSq + 3 * cp * t * inverseTSq + 3 * cp2 * inverseT * tSq + to * t * tSq; -} -function cubicBezierExtremes(from, cp, cp2, to) { - var d1 = cp - from; - var d2 = cp2 - cp; - d2 *= 2; - var d3 = to - cp2; - if (d1 + d3 === d2) { - d3 *= 1.0001; - } - var fHead = 2 * d1 - d2; - var part1 = d2 - 2 * d1; - var fCenter = Math.sqrt(part1 * part1 - 4 * d1 * (d1 - d2 + d3)); - var fTail = 2 * (d1 - d2 + d3); - var t1 = (fHead + fCenter) / fTail; - var t2 = (fHead - fCenter) / fTail; - var result = []; - if (t1 >= 0 && t1 <= 1) { - result.push(cubicBezier(from, cp, cp2, to, t1)); - } - if (t2 >= 0 && t2 <= 1) { - result.push(cubicBezier(from, cp, cp2, to, t2)); - } - return result; -} -function cubicXAtY(x0, y0, cx, cy, cx1, cy1, x1, y1, y) { - var dX = 3 * (cx - x0); - var dY = 3 * (cy - y0); - var bX = 3 * (cx1 - cx) - dX; - var bY = 3 * (cy1 - cy) - dY; - var c3X = x1 - x0 - dX - bX; - var c3Y = y1 - y0 - dY - bY; - function f(t) { - return t * (dY + t * (bY + t * c3Y)) + y0 - y; - } - function pointAt(t) { - if (t < 0) { - t = 0; - } else if (t > 1) { - t = 1; - } - return x0 + t * (dX + t * (bX + t * c3X)); - } - function bisectCubicBezierRange(f, l, r, limit) { - if (Math.abs(r - l) <= limit) { - return; - } - var middle = 0.5 * (l + r); - if (f(l) * f(r) <= 0) { - left = l; - right = r; - return; - } - bisectCubicBezierRange(f, l, middle, limit); - bisectCubicBezierRange(f, middle, r, limit); - } - var left = 0; - var right = 1; - bisectCubicBezierRange(f, 0, 1, 0.05); - var t0 = findRoot(left, right, f, 50, 0.000001); - var evalResult = Math.abs(f(t0)); - if (evalResult > 0.00001) { - return []; - } - var result = []; - if (t0 <= 1) { - result.push(pointAt(t0)); - } - var a = c3Y; - var b = t0 * a + bY; - var c = t0 * b + dY; - var d = b * b - 4 * a * c; - if (d < 0) { - return result; - } - d = Math.sqrt(d); - a = 1 / (a + a); - var t1 = (d - b) * a; - var t2 = (-b - d) * a; - if (t1 >= 0 && t1 <= 1) { - result.push(pointAt(t1)); - } - if (t2 >= 0 && t2 <= 1) { - result.push(pointAt(t2)); - } - return result; -} -function findRoot(x0, x2, f, maxIterations, epsilon) { - var x1; - var y0; - var y1; - var y2; - var b; - var c; - var y10; - var y20; - var y21; - var xm; - var ym; - var temp; - var xmlast = x0; - y0 = f(x0); - if (y0 === 0) { - return x0; - } - y2 = f(x2); - if (y2 === 0) { - return x2; - } - if (y2 * y0 > 0) { - return x0; - } - var __iter = 0; - for (var i = 0; i < maxIterations; ++i) { - __iter++; - x1 = 0.5 * (x2 + x0); - y1 = f(x1); - if (y1 === 0) { - return x1; - } - if (Math.abs(x1 - x0) < epsilon) { - return x1; - } - if (y1 * y0 > 0) { - temp = x0; - x0 = x2; - x2 = temp; - temp = y0; - y0 = y2; - y2 = temp; - } - y10 = y1 - y0; - y21 = y2 - y1; - y20 = y2 - y0; - if (y2 * y20 < 2 * y1 * y10) { - x2 = x1; - y2 = y1; - } else { - b = (x1 - x0) / y10; - c = (y10 - y21) / (y21 * y20); - xm = x0 - b * y0 * (1 - c * y1); - ym = f(xm); - if (ym === 0) { - return xm; - } - if (Math.abs(xm - xmlast) < epsilon) { - return xm; - } - xmlast = xm; - if (ym * y0 < 0) { - x2 = xm; - y2 = ym; - } else { - x0 = xm; - y0 = ym; - x2 = x1; - y2 = y1; - } - } - } - return x1; -} -function extendBoundsByPoint(bounds, x, y) { - if (x < bounds.xMin) { - bounds.xMin = x; - } else if (x > bounds.xMax) { - bounds.xMax = x; - } - if (y < bounds.yMin) { - bounds.yMin = y; - } else if (y > bounds.yMax) { - bounds.yMax = y; - } -} -function extendBoundsByX(bounds, x) { - if (x < bounds.xMin) { - bounds.xMin = x; - } else if (x > bounds.xMax) { - bounds.xMax = x; - } -} -function extendBoundsByY(bounds, y) { - if (y < bounds.yMin) { - bounds.yMin = y; - } else if (y > bounds.yMax) { - bounds.yMax = y; - } -} -function morph(start, end, ratio) { - return start + (end - start) * ratio; -} -function finishShapePath(path, dictionaryResolved) { - if (path.fullyInitialized) { - return path; - } - if (!(path instanceof ShapePath)) { - var untypedPath = path; - path = new ShapePath(path.fillStyle, path.lineStyle, 0, 0, path.isMorph); - path.commands = new Uint8Array(untypedPath.buffers[0]); - path.data = new Int32Array(untypedPath.buffers[1]); - if (untypedPath.isMorph) { - path.morphData = new Int32Array(untypedPath.buffers[2]); - } - path.buffers = null; - } - path.fillStyle && initStyle(path.fillStyle, dictionaryResolved); - path.lineStyle && initStyle(path.lineStyle, dictionaryResolved); - path.fullyInitialized = true; - return path; -} -var inWorker = typeof window === 'undefined'; -var factoryCtx = !inWorker ? document.createElement('canvas').getContext('2d') : null; -function buildLinearGradientFactory(colorStops) { - var defaultGradient = factoryCtx.createLinearGradient(-1, 0, 1, 0); - for (var i = 0; i < colorStops.length; i++) { - defaultGradient.addColorStop(colorStops[i].ratio, colorStops[i].color); - } - var fn = function createLinearGradient(ctx, colorTransform) { - var gradient = ctx.createLinearGradient(-1, 0, 1, 0); - for (var i = 0; i < colorStops.length; i++) { - colorTransform.addGradientColorStop(gradient, colorStops[i].ratio, colorStops[i].color); - } - return gradient; - }; - fn.defaultFillStyle = defaultGradient; - return fn; -} -function buildRadialGradientFactory(focalPoint, colorStops) { - var defaultGradient = factoryCtx.createRadialGradient(focalPoint, 0, 0, 0, 0, 1); - for (var i = 0; i < colorStops.length; i++) { - defaultGradient.addColorStop(colorStops[i].ratio, colorStops[i].color); - } - var fn = function createRadialGradient(ctx, colorTransform) { - var gradient = ctx.createRadialGradient(focalPoint, 0, 0, 0, 0, 1); - for (var i = 0; i < colorStops.length; i++) { - colorTransform.addGradientColorStop(gradient, colorStops[i].ratio, colorStops[i].color); - } - return gradient; - }; - fn.defaultFillStyle = defaultGradient; - return fn; -} -function buildBitmapPatternFactory(img, repeat) { - var defaultPattern = factoryCtx.createPattern(img, repeat); - var cachedTransform, cachedTransformKey; - var fn = function createBitmapPattern(ctx, colorTransform) { - if (!colorTransform.mode) { - return defaultPattern; - } - var key = colorTransform.getTransformFingerprint(); - if (key === cachedTransformKey) { - return cachedTransform; - } - var canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext('2d'); - colorTransform.setAlpha(ctx, true); - ctx.drawImage(img, 0, 0); - cachedTransform = ctx.createPattern(canvas, repeat); - cachedTransformKey = key; - return cachedTransform; - }; - fn.defaultFillStyle = defaultPattern; - return fn; -} -function initStyle(style, dictionaryResolved) { - if (style.type === undefined) { - return; - } - switch (style.type) { - case GRAPHICS_FILL_SOLID: - break; - case GRAPHICS_FILL_LINEAR_GRADIENT: - case GRAPHICS_FILL_RADIAL_GRADIENT: - case GRAPHICS_FILL_FOCAL_RADIAL_GRADIENT: - var records = style.records, colorStops = []; - for (var j = 0, n = records.length; j < n; j++) { - var record = records[j]; - var colorStr = rgbaObjToStr(record.color); - colorStops.push({ - ratio: record.ratio / 255, - color: colorStr - }); - } - var gradientConstructor; - var isLinear = style.type === GRAPHICS_FILL_LINEAR_GRADIENT; - if (isLinear) { - gradientConstructor = buildLinearGradientFactory(colorStops); - } else { - gradientConstructor = buildRadialGradientFactory((style.focalPoint | 0) / 20, colorStops); - } - style.style = gradientConstructor; - break; - case GRAPHICS_FILL_REPEATING_BITMAP: - case GRAPHICS_FILL_CLIPPED_BITMAP: - case GRAPHICS_FILL_NONSMOOTHED_REPEATING_BITMAP: - case GRAPHICS_FILL_NONSMOOTHED_CLIPPED_BITMAP: - var bitmap = dictionaryResolved[style.bitmapId]; - var repeat = style.type === GRAPHICS_FILL_REPEATING_BITMAP || style.type === GRAPHICS_FILL_NONSMOOTHED_REPEATING_BITMAP; - style.style = buildBitmapPatternFactory(bitmap.props.img, repeat ? 'repeat' : 'no-repeat'); - break; - default: - fail('invalid fill style', 'shape'); - } -} -var SOUND_SIZE_8_BIT = 0; -var SOUND_SIZE_16_BIT = 1; -var SOUND_TYPE_MONO = 0; -var SOUND_TYPE_STEREO = 1; -var SOUND_FORMAT_PCM_BE = 0; -var SOUND_FORMAT_ADPCM = 1; -var SOUND_FORMAT_MP3 = 2; -var SOUND_FORMAT_PCM_LE = 3; -var SOUND_FORMAT_NELLYMOSER_16 = 4; -var SOUND_FORMAT_NELLYMOSER_8 = 5; -var SOUND_FORMAT_NELLYMOSER = 6; -var SOUND_FORMAT_SPEEX = 11; -var SOUND_RATES = [ - 5512, - 11250, - 22500, - 44100 - ]; -var WaveHeader = new Uint8Array([ - 82, - 73, - 70, - 70, - 0, - 0, - 0, - 0, - 87, - 65, - 86, - 69, - 102, - 109, - 116, - 32, - 16, - 0, - 0, - 0, - 1, - 0, - 2, - 0, - 68, - 172, - 0, - 0, - 16, - 177, - 2, - 0, - 4, - 0, - 16, - 0, - 100, - 97, - 116, - 97, - 0, - 0, - 0, - 0 - ]); -function packageWave(data, sampleRate, channels, size, swapBytes) { - var sizeInBytes = size >> 3; - var sizePerSecond = channels * sampleRate * sizeInBytes; - var sizePerSample = channels * sizeInBytes; - var dataLength = data.length + (data.length & 1); - var buffer = new ArrayBuffer(WaveHeader.length + dataLength); - var bytes = new Uint8Array(buffer); - bytes.set(WaveHeader); - if (swapBytes) { - for (var i = 0, j = WaveHeader.length; i < data.length; i += 2, j += 2) { - bytes[j] = data[i + 1]; - bytes[j + 1] = data[i]; - } - } else { - bytes.set(data, WaveHeader.length); - } - var view = new DataView(buffer); - view.setUint32(4, dataLength + 36, true); - view.setUint16(22, channels, true); - view.setUint32(24, sampleRate, true); - view.setUint32(28, sizePerSecond, true); - view.setUint16(32, sizePerSample, true); - view.setUint16(34, size, true); - view.setUint32(40, dataLength, true); - return { - data: bytes, - mimeType: 'audio/wav' - }; -} -function defineSound(tag, dictionary) { - var channels = tag.soundType == SOUND_TYPE_STEREO ? 2 : 1; - var samplesCount = tag.samplesCount; - var sampleRate = SOUND_RATES[tag.soundRate]; - var data = tag.soundData; - var pcm, packaged; - switch (tag.soundFormat) { - case SOUND_FORMAT_PCM_BE: - pcm = new Float32Array(samplesCount * channels); - if (tag.soundSize == SOUND_SIZE_16_BIT) { - for (var i = 0, j = 0; i < pcm.length; i++, j += 2) - pcm[i] = (data[j] << 24 | data[j + 1] << 16) / 2147483648; - packaged = packageWave(data, sampleRate, channels, 16, true); - } else { - for (var i = 0; i < pcm.length; i++) - pcm[i] = (data[i] - 128) / 128; - packaged = packageWave(data, sampleRate, channels, 8, false); - } - break; - case SOUND_FORMAT_PCM_LE: - pcm = new Float32Array(samplesCount * channels); - if (tag.soundSize == SOUND_SIZE_16_BIT) { - for (var i = 0, j = 0; i < pcm.length; i++, j += 2) - pcm[i] = (data[j + 1] << 24 | data[j] << 16) / 2147483648; - packaged = packageWave(data, sampleRate, channels, 16, false); - } else { - for (var i = 0; i < pcm.length; i++) - pcm[i] = (data[i] - 128) / 128; - packaged = packageWave(data, sampleRate, channels, 8, false); - } - break; - case SOUND_FORMAT_MP3: - packaged = { - data: new Uint8Array(data.subarray(2)), - mimeType: 'audio/mpeg' - }; - break; - case SOUND_FORMAT_ADPCM: - var pcm16 = new Int16Array(samplesCount * channels); - decodeACPCMSoundData(data, pcm16, channels); - pcm = new Float32Array(samplesCount * channels); - for (var i = 0; i < pcm.length; i++) - pcm[i] = pcm16[i] / 32768; - packaged = packageWave(new Uint8Array(pcm16.buffer), sampleRate, channels, 16, !new Uint8Array(new Uint16Array([ - 1 - ]).buffer)[0]); - break; - default: - throw new Error('Unsupported audio format: ' + tag.soundFormat); - } - var sound = { - type: 'sound', - id: tag.id, - sampleRate: sampleRate, - channels: channels, - pcm: pcm - }; - if (packaged) - sound.packaged = packaged; - return sound; -} -var ACPCMIndexTables = [ - [ - -1, - 2 - ], - [ - -1, - -1, - 2, - 4 - ], - [ - -1, - -1, - -1, - -1, - 2, - 4, - 6, - 8 - ], - [ - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 4, - 6, - 8, - 10, - 13, - 16 - ] - ]; -var ACPCMStepSizeTable = [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 16, - 17, - 19, - 21, - 23, - 25, - 28, - 31, - 34, - 37, - 41, - 45, - 50, - 55, - 60, - 66, - 73, - 80, - 88, - 97, - 107, - 118, - 130, - 143, - 157, - 173, - 190, - 209, - 230, - 253, - 279, - 307, - 337, - 371, - 408, - 449, - 494, - 544, - 598, - 658, - 724, - 796, - 876, - 963, - 1060, - 1166, - 1282, - 1411, - 1552, - 1707, - 1878, - 2066, - 2272, - 2499, - 2749, - 3024, - 3327, - 3660, - 4026, - 4428, - 4871, - 5358, - 5894, - 6484, - 7132, - 7845, - 8630, - 9493, - 10442, - 11487, - 12635, - 13899, - 15289, - 16818, - 18500, - 20350, - 22385, - 24623, - 27086, - 29794, - 32767 - ]; -function decodeACPCMSoundData(data, pcm16, channels) { - function readBits(n, signed) { - while (dataBufferLength < n) { - dataBuffer = dataBuffer << 8 | data[dataPosition++]; - dataBufferLength += 8; - } - dataBufferLength -= n; - return dataBuffer >>> dataBufferLength & (1 << n) - 1; - } - var dataPosition = 0; - var dataBuffer = 0; - var dataBufferLength = 0; - var pcmPosition = 0; - var codeSize = readBits(2); - var indexTable = ACPCMIndexTables[codeSize]; - while (pcmPosition < pcm16.length) { - var x = pcm16[pcmPosition++] = readBits(16) << 16 >> 16, x2; - var stepIndex = readBits(6), stepIndex2; - if (channels > 1) { - x2 = pcm16[pcmPosition++] = readBits(16) << 16 >> 16; - stepIndex2 = readBits(6); - } - var signMask = 1 << codeSize + 1; - for (var i = 0; i < 4095; i++) { - var nibble = readBits(codeSize + 2); - var step = ACPCMStepSizeTable[stepIndex]; - var sum = 0; - for (var currentBit = signMask >> 1; currentBit; currentBit >>= 1, step >>= 1) { - if (nibble & currentBit) - sum += step; - } - x += (nibble & signMask ? -1 : 1) * (sum + step); - pcm16[pcmPosition++] = x = x < -32768 ? -32768 : x > 32767 ? 32767 : x; - stepIndex += indexTable[nibble & ~signMask]; - stepIndex = stepIndex < 0 ? 0 : stepIndex > 88 ? 88 : stepIndex; - if (channels > 1) { - nibble = readBits(codeSize + 2); - step = ACPCMStepSizeTable[stepIndex2]; - sum = 0; - for (var currentBit = signMask >> 1; currentBit; currentBit >>= 1, step >>= 1) { - if (nibble & currentBit) - sum += step; - } - x2 += (nibble & signMask ? -1 : 1) * (sum + step); - pcm16[pcmPosition++] = x2 = x2 < -32768 ? -32768 : x2 > 32767 ? 32767 : x2; - stepIndex2 += indexTable[nibble & ~signMask]; - stepIndex2 = stepIndex2 < 0 ? 0 : stepIndex2 > 88 ? 88 : stepIndex2; - } - } - } -} -var nextSoundStreamId = 0; -function SwfSoundStream(samplesCount, sampleRate, channels) { - this.streamId = nextSoundStreamId++; - this.samplesCount = samplesCount; - this.sampleRate = sampleRate; - this.channels = channels; - this.format = null; - this.currentSample = 0; -} -SwfSoundStream.prototype = { - get info() { - return { - samplesCount: this.samplesCount, - sampleRate: this.sampleRate, - channels: this.channels, - format: this.format, - streamId: this.streamId - }; - }, - decode: function (data) { - throw new Error('SwfSoundStream.decode: not implemented'); - } -}; -function SwfSoundStream_decode_PCM(data) { - var pcm = new Float32Array(data.length); - for (var i = 0; i < pcm.length; i++) - pcm[i] = (data[i] - 128) / 128; - this.currentSample += pcm.length / this.channels; - return { - streamId: this.streamId, - samplesCount: pcm.length / this.channels, - pcm: pcm - }; -} -function SwfSoundStream_decode_PCM_be(data) { - var pcm = new Float32Array(data.length / 2); - for (var i = 0, j = 0; i < pcm.length; i++, j += 2) - pcm[i] = (data[j] << 24 | data[j + 1] << 16) / 2147483648; - this.currentSample += pcm.length / this.channels; - return { - streamId: this.streamId, - samplesCount: pcm.length / this.channels, - pcm: pcm - }; -} -function SwfSoundStream_decode_PCM_le(data) { - var pcm = new Float32Array(data.length / 2); - for (var i = 0, j = 0; i < pcm.length; i++, j += 2) - pcm[i] = (data[j + 1] << 24 | data[j] << 16) / 2147483648; - this.currentSample += pcm.length / this.channels; - return { - streamId: this.streamId, - samplesCount: pcm.length / this.channels, - pcm: pcm - }; -} -function SwfSoundStream_decode_MP3(data) { - var samplesCount = data[1] << 8 | data[0]; - var seek = data[3] << 8 | data[2]; - this.currentSample += samplesCount; - return { - streamId: this.streamId, - samplesCount: samplesCount, - data: new Uint8Array(data.subarray(4)), - seek: seek - }; -} -function createSoundStream(tag) { - var channels = tag.streamType == SOUND_TYPE_STEREO ? 2 : 1; - var samplesCount = tag.samplesCount; - var sampleRate = SOUND_RATES[tag.streamRate]; - var stream = new SwfSoundStream(samplesCount, sampleRate, channels); - switch (tag.streamCompression) { - case SOUND_FORMAT_PCM_BE: - stream.format = 'wave'; - if (tag.soundSize == SOUND_SIZE_16_BIT) { - stream.decode = SwfSoundStream_decode_PCM_be; - } else { - stream.decode = SwfSoundStream_decode_PCM; - } - break; - case SOUND_FORMAT_PCM_LE: - stream.format = 'wave'; - if (tag.soundSize == SOUND_SIZE_16_BIT) { - stream.decode = SwfSoundStream_decode_PCM_le; - } else { - stream.decode = SwfSoundStream_decode_PCM; - } - break; - case SOUND_FORMAT_MP3: - stream.format = 'mp3'; - stream.decode = SwfSoundStream_decode_MP3; - break; - default: - throw new Error('Unsupported audio format: ' + tag.soundFormat); - } - return stream; -} -function defineText(tag, dictionary) { - var dependencies = []; - if (tag.hasFont) { - var font = dictionary[tag.fontId]; - tag.font = font.uniqueName; - dependencies.push(font.id); - } - var props = { - type: 'text', - id: tag.id, - variableName: tag.variableName, - tag: tag - }; - if (dependencies.length) - props.require = dependencies; - return props; -} -var $RELEASE = false; -var isWorker = typeof window === 'undefined'; -if (isWorker && !true) { - importScripts.apply(null, [ - '../../lib/DataView.js/DataView.js', - '../flash/util.js', - 'config.js', - 'swf.js', - 'types.js', - 'structs.js', - 'tags.js', - 'inflate.js', - 'stream.js', - 'templates.js', - 'generator.js', - 'handlers.js', - 'parser.js', - 'bitmap.js', - 'button.js', - 'font.js', - 'image.js', - 'label.js', - 'shape.js', - 'sound.js', - 'text.js' - ]); -} -function defineSymbol(swfTag, symbols) { - var symbol; - switch (swfTag.code) { - case SWF_TAG_CODE_DEFINE_BITS: - case SWF_TAG_CODE_DEFINE_BITS_JPEG2: - case SWF_TAG_CODE_DEFINE_BITS_JPEG3: - case SWF_TAG_CODE_DEFINE_BITS_JPEG4: - case SWF_TAG_CODE_JPEG_TABLES: - symbol = defineImage(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_BITS_LOSSLESS: - case SWF_TAG_CODE_DEFINE_BITS_LOSSLESS2: - symbol = defineBitmap(swfTag); - break; - case SWF_TAG_CODE_DEFINE_BUTTON: - case SWF_TAG_CODE_DEFINE_BUTTON2: - symbol = defineButton(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_EDIT_TEXT: - symbol = defineText(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_FONT: - case SWF_TAG_CODE_DEFINE_FONT2: - case SWF_TAG_CODE_DEFINE_FONT3: - case SWF_TAG_CODE_DEFINE_FONT4: - symbol = defineFont(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_MORPH_SHAPE: - case SWF_TAG_CODE_DEFINE_MORPH_SHAPE2: - case SWF_TAG_CODE_DEFINE_SHAPE: - case SWF_TAG_CODE_DEFINE_SHAPE2: - case SWF_TAG_CODE_DEFINE_SHAPE3: - case SWF_TAG_CODE_DEFINE_SHAPE4: - symbol = defineShape(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_SOUND: - symbol = defineSound(swfTag, symbols); - break; - case SWF_TAG_CODE_DEFINE_BINARY_DATA: - symbol = { - type: 'binary', - id: swfTag.id, - data: swfTag.data - }; - break; - case SWF_TAG_CODE_DEFINE_SPRITE: - var depths = {}; - var frame = { - type: 'frame' - }; - var frames = []; - var tags = swfTag.tags; - var frameScripts = null; - var frameIndex = 0; - var soundStream = null; - for (var i = 0, n = tags.length; i < n; i++) { - var tag = tags[i]; - switch (tag.code) { - case SWF_TAG_CODE_DO_ACTION: - if (!frameScripts) - frameScripts = []; - frameScripts.push(frameIndex); - frameScripts.push(tag.actionsData); - break; - case SWF_TAG_CODE_START_SOUND: - var startSounds = frame.startSounds || (frame.startSounds = []); - startSounds.push(tag); - break; - case SWF_TAG_CODE_SOUND_STREAM_HEAD: - try { - soundStream = createSoundStream(tag); - frame.soundStream = soundStream.info; - } catch (e) { - } - break; - case SWF_TAG_CODE_SOUND_STREAM_BLOCK: - if (soundStream) { - frame.soundStreamBlock = soundStream.decode(tag.data); - } - break; - case SWF_TAG_CODE_FRAME_LABEL: - frame.labelName = tag.name; - break; - case SWF_TAG_CODE_PLACE_OBJECT: - case SWF_TAG_CODE_PLACE_OBJECT2: - case SWF_TAG_CODE_PLACE_OBJECT3: - depths[tag.depth] = tag; - break; - case SWF_TAG_CODE_REMOVE_OBJECT: - case SWF_TAG_CODE_REMOVE_OBJECT2: - depths[tag.depth] = null; - break; - case SWF_TAG_CODE_SHOW_FRAME: - frameIndex += tag.repeat; - frame.repeat = tag.repeat; - frame.depths = depths; - frames.push(frame); - depths = {}; - frame = { - type: 'frame' - }; - break; - } - } - symbol = { - type: 'sprite', - id: swfTag.id, - frameCount: swfTag.frameCount, - frames: frames, - frameScripts: frameScripts - }; - break; - case SWF_TAG_CODE_DEFINE_TEXT: - case SWF_TAG_CODE_DEFINE_TEXT2: - symbol = defineLabel(swfTag, symbols); - break; - } - if (!symbol) { - return { - command: 'error', - message: 'unknown symbol type: ' + swfTag.code - }; - } - symbol.isSymbol = true; - symbols[swfTag.id] = symbol; - return symbol; -} -function createParsingContext(commitData) { - var depths = {}; - var symbols = {}; - var frame = { - type: 'frame' - }; - var tagsProcessed = 0; - var soundStream = null; - var lastProgressSent = 0; - return { - onstart: function (result) { - commitData({ - command: 'init', - result: result - }); - }, - onprogress: function (result) { - if (Date.now() - lastProgressSent > 1000 / 24 || result.bytesLoaded === result.bytesTotal) { - commitData({ - command: 'progress', - result: { - bytesLoaded: result.bytesLoaded, - bytesTotal: result.bytesTotal - } - }); - lastProgressSent = Date.now(); - } - var tags = result.tags; - for (var n = tags.length; tagsProcessed < n; tagsProcessed++) { - var tag = tags[tagsProcessed]; - if ('id' in tag) { - var symbol = defineSymbol(tag, symbols); - commitData(symbol, symbol.transferables); - continue; - } - switch (tag.code) { - case SWF_TAG_CODE_DEFINE_SCENE_AND_FRAME_LABEL_DATA: - frame.sceneData = tag; - break; - case SWF_TAG_CODE_DEFINE_SCALING_GRID: - var symbolUpdate = { - isSymbol: true, - id: tag.symbolId, - updates: { - scale9Grid: tag.splitter - } - }; - commitData(symbolUpdate); - break; - case SWF_TAG_CODE_DO_ABC: - case SWF_TAG_CODE_DO_ABC_: - var abcBlocks = frame.abcBlocks; - if (abcBlocks) - abcBlocks.push({ - data: tag.data, - flags: tag.flags - }); - else - frame.abcBlocks = [ - { - data: tag.data, - flags: tag.flags - } - ]; - break; - case SWF_TAG_CODE_DO_ACTION: - var actionBlocks = frame.actionBlocks; - if (actionBlocks) - actionBlocks.push(tag.actionsData); - else - frame.actionBlocks = [ - tag.actionsData - ]; - break; - case SWF_TAG_CODE_DO_INIT_ACTION: - var initActionBlocks = frame.initActionBlocks || (frame.initActionBlocks = []); - initActionBlocks.push({ - spriteId: tag.spriteId, - actionsData: tag.actionsData - }); - break; - case SWF_TAG_CODE_START_SOUND: - var startSounds = frame.startSounds; - if (!startSounds) - frame.startSounds = startSounds = []; - startSounds.push(tag); - break; - case SWF_TAG_CODE_SOUND_STREAM_HEAD: - try { - soundStream = createSoundStream(tag); - frame.soundStream = soundStream.info; - } catch (e) { - } - break; - case SWF_TAG_CODE_SOUND_STREAM_BLOCK: - if (soundStream) { - frame.soundStreamBlock = soundStream.decode(tag.data); - } - break; - case SWF_TAG_CODE_EXPORT_ASSETS: - var exports = frame.exports; - if (exports) - frame.exports = exports.concat(tag.exports); - else - frame.exports = tag.exports.slice(0); - break; - case SWF_TAG_CODE_SYMBOL_CLASS: - var symbolClasses = frame.symbolClasses; - if (symbolClasses) - frame.symbolClasses = symbolClasses.concat(tag.exports); - else - frame.symbolClasses = tag.exports.slice(0); - break; - case SWF_TAG_CODE_FRAME_LABEL: - frame.labelName = tag.name; - break; - case SWF_TAG_CODE_PLACE_OBJECT: - case SWF_TAG_CODE_PLACE_OBJECT2: - case SWF_TAG_CODE_PLACE_OBJECT3: - depths[tag.depth] = tag; - break; - case SWF_TAG_CODE_REMOVE_OBJECT: - case SWF_TAG_CODE_REMOVE_OBJECT2: - depths[tag.depth] = null; - break; - case SWF_TAG_CODE_SET_BACKGROUND_COLOR: - frame.bgcolor = tag.color; - break; - case SWF_TAG_CODE_SHOW_FRAME: - frame.repeat = tag.repeat; - frame.depths = depths; - frame.complete = !(!tag.finalTag); - commitData(frame); - depths = {}; - frame = { - type: 'frame' - }; - break; - } - } - }, - oncomplete: function (result) { - commitData(result); - var stats; - if (typeof result.swfVersion === 'number') { - var bbox = result.bbox; - stats = { - topic: 'parseInfo', - parseTime: result.parseTime, - bytesTotal: result.bytesTotal, - swfVersion: result.swfVersion, - frameRate: result.frameRate, - width: (bbox.xMax - bbox.xMin) / 20, - height: (bbox.yMax - bbox.yMin) / 20, - isAvm2: !(!result.fileAttributes.doAbc) - }; - } - commitData({ - command: 'complete', - stats: stats - }); - }, - onexception: function (e) { - commitData({ - type: 'exception', - message: e.message, - stack: e.stack - }); - } - }; -} -function parseBytes(bytes, commitData) { - SWF.parse(bytes, createParsingContext(commitData)); -} -function ResourceLoader(scope) { - this.subscription = null; - var self = this; - if (!isWorker) { - this.messenger = { - postMessage: function (data) { - self.onmessage({ - data: data - }); - } - }; - } else { - this.messenger = scope; - scope.onmessage = function (event) { - self.listener(event.data); - }; - } -} -ResourceLoader.prototype = { - terminate: function () { - this.messenger = null; - this.listener = null; - }, - onmessage: function (event) { - this.listener(event.data); - }, - postMessage: function (data) { - this.listener && this.listener(data); - }, - listener: function (data) { - if (this.subscription) { - this.subscription.callback(data.data, data.progress); - } else if (data === 'pipe:') { - this.subscription = { - subscribe: function (callback) { - this.callback = callback; - } - }; - this.parseLoadedData(this.messenger, this.subscription); - } else { - this.parseLoadedData(this.messenger, data); - } - }, - parseLoadedData: function (loader, request, context) { - function commitData(data, transferables) { - try { - loader.postMessage(data, transferables); - } catch (ex) { - if (ex != 'DataCloneError') { - throw ex; - } - loader.postMessage(data); - } - } - if (request instanceof ArrayBuffer) { - parseBytes(request, commitData); - } else if ('subscribe' in request) { - var pipe = SWF.parseAsync(createParsingContext(commitData)); - request.subscribe(function (data, progress) { - if (data) { - pipe.push(data, progress); - } else { - pipe.close(); - } - }); - } else if (typeof FileReaderSync !== 'undefined') { - var reader = new FileReaderSync(); - var buffer = reader.readAsArrayBuffer(request); - parseBytes(buffer, commitData); - } else { - var reader = new FileReader(); - reader.onload = function () { - parseBytes(this.result, commitData); - }; - reader.readAsArrayBuffer(request); - } - } -}; -if (isWorker) { - var loader = new ResourceLoader(this); -} -var codeLengthOrder = [ - 16, - 17, - 18, - 0, - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15 - ]; -var distanceCodes = []; -var distanceExtraBits = []; -for (var i = 0, j = 0, code = 1; i < 30; ++i) { - distanceCodes[i] = code; - code += 1 << (distanceExtraBits[i] = ~(~((j += i > 2 ? 1 : 0) / 2))); -} -var bitLengths = []; -for (var i = 0; i < 32; ++i) - bitLengths[i] = 5; -var fixedDistanceTable = makeHuffmanTable(bitLengths); -var lengthCodes = []; -var lengthExtraBits = []; -for (var i = 0, j = 0, code = 3; i < 29; ++i) { - lengthCodes[i] = code - (i == 28 ? 1 : 0); - code += 1 << (lengthExtraBits[i] = ~(~((j += i > 4 ? 1 : 0) / 4 % 6))); -} -for (var i = 0; i < 288; ++i) - bitLengths[i] = i < 144 || i > 279 ? 8 : i < 256 ? 9 : 7; -var fixedLiteralTable = makeHuffmanTable(bitLengths); -function makeHuffmanTable(bitLengths) { - var maxBits = Math.max.apply(null, bitLengths); - var numLengths = bitLengths.length; - var size = 1 << maxBits; - var codes = new Uint32Array(size); - for (var code = 0, len = 1, skip = 2; len <= maxBits; code <<= 1, ++len, skip <<= 1) { - for (var val = 0; val < numLengths; ++val) { - if (bitLengths[val] === len) { - var lsb = 0; - for (var i = 0; i < len; ++i) - lsb = lsb * 2 + (code >> i & 1); - for (var i = lsb; i < size; i += skip) - codes[i] = len << 16 | val; - ++code; - } - } - } - return { - codes: codes, - maxBits: maxBits - }; -} -function verifyDeflateHeader(bytes) { - var header = bytes[0] << 8 | bytes[1]; -} -function createInflatedStream(bytes, outputLength) { - verifyDeflateHeader(bytes); - var stream = new Stream(bytes, 2); - var output = { - data: new Uint8Array(outputLength), - available: 0, - completed: false - }; - var state = { - header: null, - distanceTable: null, - literalTable: null, - sym: null, - len: null, - sym2: null - }; - do { - inflateBlock(stream, output, state); - } while (!output.completed && stream.pos < stream.end); - return new Stream(output.data, 0, output.available); -} -var InflateNoDataError = {}; -function inflateBlock(stream, output, state) { - var header = state.header !== null ? state.header : state.header = readBits(stream.bytes, stream, 3); - switch (header >> 1) { - case 0: - stream.align(); - var pos = stream.pos; - if (stream.end - pos < 4) { - throw InflateNoDataError; - } - var len = stream.getUint16(pos, true); - var nlen = stream.getUint16(pos + 2, true); - if (stream.end - pos < 4 + len) { - throw InflateNoDataError; - } - var begin = pos + 4; - var end = stream.pos = begin + len; - var sbytes = stream.bytes, dbytes = output.data; - dbytes.set(sbytes.subarray(begin, end), output.available); - output.available += len; - break; - case 1: - inflate(stream, output, fixedLiteralTable, fixedDistanceTable, state); - break; - case 2: - var distanceTable, literalTable; - if (state.distanceTable !== null) { - distanceTable = state.distanceTable; - literalTable = state.literalTable; - } else { - var sbytes = stream.bytes; - var savedBufferPos = stream.pos; - var savedBitBuffer = stream.bitBuffer; - var savedBitLength = stream.bitLength; - var bitLengths = []; - var numLiteralCodes, numDistanceCodes; - try { - numLiteralCodes = readBits(sbytes, stream, 5) + 257; - numDistanceCodes = readBits(sbytes, stream, 5) + 1; - var numCodes = numLiteralCodes + numDistanceCodes; - var numLengthCodes = readBits(sbytes, stream, 4) + 4; - for (var i = 0; i < 19; ++i) - bitLengths[codeLengthOrder[i]] = i < numLengthCodes ? readBits(sbytes, stream, 3) : 0; - var codeLengthTable = makeHuffmanTable(bitLengths); - bitLengths = []; - var i = 0; - var prev = 0; - while (i < numCodes) { - var j = 1; - var sym = readCode(sbytes, stream, codeLengthTable); - switch (sym) { - case 16: - j = readBits(sbytes, stream, 2) + 3; - sym = prev; - break; - case 17: - j = readBits(sbytes, stream, 3) + 3; - sym = 0; - break; - case 18: - j = readBits(sbytes, stream, 7) + 11; - sym = 0; - break; - default: - prev = sym; - } - while (j--) - bitLengths[i++] = sym; - } - } catch (e) { - stream.pos = savedBufferPos; - stream.bitBuffer = savedBitBuffer; - stream.bitLength = savedBitLength; - throw e; - } - distanceTable = state.distanceTable = makeHuffmanTable(bitLengths.splice(numLiteralCodes, numDistanceCodes)); - literalTable = state.literalTable = makeHuffmanTable(bitLengths); - } - inflate(stream, output, literalTable, distanceTable, state); - state.distanceTable = null; - state.literalTable = null; - break; - default: - fail('unknown block type', 'inflate'); - } - state.header = null; - output.completed = !(!(header & 1)); -} -function readBits(bytes, stream, size) { - var bitBuffer = stream.bitBuffer; - var bitLength = stream.bitLength; - if (size > bitLength) { - var pos = stream.pos; - var end = stream.end; - do { - if (pos >= end) { - stream.pos = pos; - stream.bitBuffer = bitBuffer; - stream.bitLength = bitLength; - throw InflateNoDataError; - } - bitBuffer |= bytes[pos++] << bitLength; - bitLength += 8; - } while (size > bitLength); - stream.pos = pos; - } - stream.bitBuffer = bitBuffer >>> size; - stream.bitLength = bitLength - size; - return bitBuffer & (1 << size) - 1; -} -function inflate(stream, output, literalTable, distanceTable, state) { - var pos = output.available; - var dbytes = output.data; - var sbytes = stream.bytes; - var sym = state.sym !== null ? state.sym : readCode(sbytes, stream, literalTable); - while (sym !== 256) { - if (sym < 256) { - dbytes[pos++] = sym; - } else { - state.sym = sym; - sym -= 257; - var len = state.len !== null ? state.len : state.len = lengthCodes[sym] + readBits(sbytes, stream, lengthExtraBits[sym]); - var sym2 = state.sym2 !== null ? state.sym2 : state.sym2 = readCode(sbytes, stream, distanceTable); - var distance = distanceCodes[sym2] + readBits(sbytes, stream, distanceExtraBits[sym2]); - var i = pos - distance; - while (len--) - dbytes[pos++] = dbytes[i++]; - state.sym2 = null; - state.len = null; - state.sym = null; - } - output.available = pos; - sym = readCode(sbytes, stream, literalTable); - } -} -function readCode(bytes, stream, codeTable) { - var bitBuffer = stream.bitBuffer; - var bitLength = stream.bitLength; - var maxBits = codeTable.maxBits; - if (maxBits > bitLength) { - var pos = stream.pos; - var end = stream.end; - do { - if (pos >= end) { - stream.pos = pos; - stream.bitBuffer = bitBuffer; - stream.bitLength = bitLength; - throw InflateNoDataError; - } - bitBuffer |= bytes[pos++] << bitLength; - bitLength += 8; - } while (maxBits > bitLength); - stream.pos = pos; - } - var code = codeTable.codes[bitBuffer & (1 << maxBits) - 1]; - var len = code >> 16; - stream.bitBuffer = bitBuffer >>> len; - stream.bitLength = bitLength - len; - return code & 65535; -} -(function (global) { - global['createInflatedStream'] = createInflatedStream; -}(this)); -var StreamNoDataError = {}; -var Stream = function StreamClosure() { - function Stream_align() { - this.bitBuffer = this.bitLength = 0; - } - function Stream_ensure(size) { - if (this.pos + size > this.end) { - throw StreamNoDataError; - } - } - function Stream_remaining() { - return this.end - this.pos; - } - function Stream_substream(begin, end) { - var stream = new Stream(this.bytes); - stream.pos = begin; - stream.end = end; - return stream; - } - function Stream_push(data) { - var bytes = this.bytes; - var newBytesLength = this.end + data.length; - if (newBytesLength > bytes.length) { - throw 'stream buffer overfow'; - } - bytes.set(data, this.end); - this.end = newBytesLength; - } - function Stream(buffer, offset, length, maxLength) { - if (offset === undefined) - offset = 0; - if (buffer.buffer instanceof ArrayBuffer) { - offset += buffer.byteOffset; - buffer = buffer.buffer; - } - if (length === undefined) - length = buffer.byteLength - offset; - if (maxLength === undefined) - maxLength = length; - var bytes = new Uint8Array(buffer, offset, maxLength); - var stream = new DataView(buffer, offset, maxLength); - stream.bytes = bytes; - stream.pos = 0; - stream.end = length; - stream.bitBuffer = 0; - stream.bitLength = 0; - stream.align = Stream_align; - stream.ensure = Stream_ensure; - stream.remaining = Stream_remaining; - stream.substream = Stream_substream; - stream.push = Stream_push; - return stream; - } - return Stream; - }(); -(function (global) { - global['Stream'] = Stream; -}(this)); -function readSi8($bytes, $stream) { - return $stream.getInt8($stream.pos++); -} -function readSi16($bytes, $stream) { - return $stream.getInt16($stream.pos, $stream.pos += 2); -} -function readSi32($bytes, $stream) { - return $stream.getInt32($stream.pos, $stream.pos += 4); -} -function readUi8($bytes, $stream) { - return $bytes[$stream.pos++]; -} -function readUi16($bytes, $stream) { - return $stream.getUint16($stream.pos, $stream.pos += 2); -} -function readUi32($bytes, $stream) { - return $stream.getUint32($stream.pos, $stream.pos += 4); -} -function readFixed($bytes, $stream) { - return $stream.getInt32($stream.pos, $stream.pos += 4) / 65536; -} -function readFixed8($bytes, $stream) { - return $stream.getInt16($stream.pos, $stream.pos += 2) / 256; -} -function readFloat16($bytes, $stream) { - var ui16 = $stream.getUint16($stream.pos); - $stream.pos += 2; - var sign = ui16 >> 15 ? -1 : 1; - var exponent = (ui16 & 31744) >> 10; - var fraction = ui16 & 1023; - if (!exponent) - return sign * pow(2, -14) * (fraction / 1024); - if (exponent === 31) - return fraction ? NaN : sign * Infinity; - return sign * pow(2, exponent - 15) * (1 + fraction / 1024); -} -function readFloat($bytes, $stream) { - return $stream.getFloat32($stream.pos, $stream.pos += 4); -} -function readDouble($bytes, $stream) { - return $stream.getFloat64($stream.pos, $stream.pos += 8); -} -function readEncodedU32($bytes, $stream) { - var val = $bytes[$stream.pos++]; - if (!(val & 128)) - return val; - val |= $bytes[$stream.pos++] << 7; - if (!(val & 16384)) - return val; - val |= $bytes[$stream.pos++] << 14; - if (!(val & 2097152)) - return val; - val |= $bytes[$stream.pos++] << 21; - if (!(val & 268435456)) - return val; - return val | $bytes[$stream.pos++] << 28; -} -function readBool($bytes, $stream) { - return !(!$bytes[$stream.pos++]); -} -function align($bytes, $stream) { - $stream.align(); -} -function readSb($bytes, $stream, size) { - return readUb($bytes, $stream, size) << 32 - size >> 32 - size; -} -var masks = new Uint32Array(33); -for (var i = 1, mask = 0; i <= 32; ++i) - masks[i] = mask = mask << 1 | 1; -function readUb($bytes, $stream, size) { - var buffer = $stream.bitBuffer; - var bitlen = $stream.bitLength; - while (size > bitlen) { - buffer = buffer << 8 | $bytes[$stream.pos++]; - bitlen += 8; - } - bitlen -= size; - var val = buffer >>> bitlen & masks[size]; - $stream.bitBuffer = buffer; - $stream.bitLength = bitlen; - return val; -} -function readFb($bytes, $stream, size) { - return readSb($bytes, $stream, size) / 65536; -} -function readString($bytes, $stream, length) { - var codes = []; - var pos = $stream.pos; - if (length) { - codes = slice.call($bytes, pos, pos += length); - } else { - length = 0; - for (var code; code = $bytes[pos++]; length++) - codes[length] = code; - } - $stream.pos = pos; - var numChunks = length / 65536; - var str = ''; - for (var i = 0; i < numChunks; ++i) { - var begin = i * 65536; - var end = begin + 65536; - var chunk = codes.slice(begin, end); - str += fromCharCode.apply(null, chunk); - } - return decodeURIComponent(escape(str.replace('\0', '', 'g'))); -} -function readBinary($bytes, $stream, size) { - return $bytes.subarray($stream.pos, $stream.pos = size ? $stream.pos + size : $stream.end); -} -(function (global) { - global['readSi8'] = readSi8; - global['readUi16'] = readUi16; - global['readUi32'] = readUi32; -}(this)); -var tagHandler = function (global) { - function defineShape($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var $0 = $.bbox = {}; - bbox($bytes, $stream, $0, swfVersion, tagCode); - var isMorph = $.isMorph = tagCode === 46 || tagCode === 84; - if (isMorph) { - var $1 = $.bboxMorph = {}; - bbox($bytes, $stream, $1, swfVersion, tagCode); - } - var hasStrokes = $.hasStrokes = tagCode === 83 || tagCode === 84; - if (hasStrokes) { - var $2 = $.strokeBbox = {}; - bbox($bytes, $stream, $2, swfVersion, tagCode); - if (isMorph) { - var $3 = $.strokeBboxMorph = {}; - bbox($bytes, $stream, $3, swfVersion, tagCode); - } - var reserved = readUb($bytes, $stream, 5); - $.fillWinding = readUb($bytes, $stream, 1); - $.nonScalingStrokes = readUb($bytes, $stream, 1); - $.scalingStrokes = readUb($bytes, $stream, 1); - } - if (isMorph) { - $.offsetMorph = readUi32($bytes, $stream); - morphShapeWithStyle($bytes, $stream, $, swfVersion, tagCode, isMorph, hasStrokes); - } else { - shapeWithStyle($bytes, $stream, $, swfVersion, tagCode, isMorph, hasStrokes); - } - return $; - } - function placeObject($bytes, $stream, $, swfVersion, tagCode) { - var flags, hasEvents, clip, hasName, hasRatio, hasCxform, hasMatrix, place; - var move, hasBackgroundColor, hasVisibility, hasImage, hasClassName, cache; - var blend, hasFilters, eoe; - $ || ($ = {}); - if (tagCode > 4) { - if (tagCode > 26) { - flags = readUi16($bytes, $stream); - } else { - flags = readUi8($bytes, $stream); - } - hasEvents = $.hasEvents = flags >> 7 & 1; - clip = $.clip = flags >> 6 & 1; - hasName = $.hasName = flags >> 5 & 1; - hasRatio = $.hasRatio = flags >> 4 & 1; - hasCxform = $.hasCxform = flags >> 3 & 1; - hasMatrix = $.hasMatrix = flags >> 2 & 1; - place = $.place = flags >> 1 & 1; - move = $.move = flags & 1; - if (tagCode === 70) { - hasBackgroundColor = $.hasBackgroundColor = flags >> 15 & 1; - hasVisibility = $.hasVisibility = flags >> 14 & 1; - hasImage = $.hasImage = flags >> 12 & 1; - hasClassName = $.hasClassName = flags >> 11 & 1; - cache = $.cache = flags >> 10 & 1; - blend = $.blend = flags >> 9 & 1; - hasFilters = $.hasFilters = flags >> 8 & 1; - } else { - cache = $.cache = 0; - blend = $.blend = 0; - hasFilters = $.hasFilters = 0; - } - $.depth = readUi16($bytes, $stream); - if (hasClassName) { - $.className = readString($bytes, $stream, 0); - } - if (place) { - $.symbolId = readUi16($bytes, $stream); - } - if (hasMatrix) { - var $0 = $.matrix = {}; - matrix($bytes, $stream, $0, swfVersion, tagCode); - } - if (hasCxform) { - var $1 = $.cxform = {}; - cxform($bytes, $stream, $1, swfVersion, tagCode); - } - if (hasRatio) { - $.ratio = readUi16($bytes, $stream); - } - if (hasName) { - $.name = readString($bytes, $stream, 0); - } - if (clip) { - $.clipDepth = readUi16($bytes, $stream); - } - if (hasFilters) { - var count = readUi8($bytes, $stream); - var $2 = $.filters = []; - var $3 = count; - while ($3--) { - var $4 = {}; - anyFilter($bytes, $stream, $4, swfVersion, tagCode); - $2.push($4); - } - } - if (blend) { - $.blendMode = readUi8($bytes, $stream); - } - if (cache) { - $.bmpCache = readUi8($bytes, $stream); - } - if (hasEvents) { - var reserved = readUi16($bytes, $stream); - if (swfVersion >= 6) { - var allFlags = readUi32($bytes, $stream); - } else { - var allFlags = readUi16($bytes, $stream); - } - var $28 = $.events = []; - do { - var $29 = {}; - var temp = events($bytes, $stream, $29, swfVersion, tagCode); - eoe = temp.eoe; - $28.push($29); - } while (!eoe); - } - if (hasBackgroundColor) { - var $126 = $.backgroundColor = {}; - argb($bytes, $stream, $126, swfVersion, tagCode); - } - if (hasVisibility) { - $.visibility = readUi8($bytes, $stream); - } - } else { - $.place = 1; - $.symbolId = readUi16($bytes, $stream); - $.depth = readUi16($bytes, $stream); - $.hasMatrix = 1; - var $30 = $.matrix = {}; - matrix($bytes, $stream, $30, swfVersion, tagCode); - if ($stream.remaining()) { - $.hasCxform = 1; - var $31 = $.cxform = {}; - cxform($bytes, $stream, $31, swfVersion, tagCode); - } - } - return $; - } - function removeObject($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - if (tagCode === 5) { - $.symbolId = readUi16($bytes, $stream); - } - $.depth = readUi16($bytes, $stream); - return $; - } - function defineImage($bytes, $stream, $, swfVersion, tagCode) { - var imgData; - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - if (tagCode > 21) { - var alphaDataOffset = readUi32($bytes, $stream); - if (tagCode === 90) { - $.deblock = readFixed8($bytes, $stream); - } - imgData = $.imgData = readBinary($bytes, $stream, alphaDataOffset); - $.alphaData = readBinary($bytes, $stream, 0); - } else { - imgData = $.imgData = readBinary($bytes, $stream, 0); - } - switch (imgData[0] << 8 | imgData[1]) { - case 65496: - case 65497: - $.mimeType = 'image/jpeg'; - break; - case 35152: - $.mimeType = 'image/png'; - break; - case 18249: - $.mimeType = 'image/gif'; - break; - default: - $.mimeType = 'application/octet-stream'; - } - if (tagCode === 6) { - $.incomplete = 1; - } - return $; - } - function defineButton($bytes, $stream, $, swfVersion, tagCode) { - var eob, hasFilters, count, blend; - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - if (tagCode == 7) { - var $0 = $.characters = []; - do { - var $1 = {}; - var temp = button($bytes, $stream, $1, swfVersion, tagCode); - eob = temp.eob; - $0.push($1); - } while (!eob); - $.actionsData = readBinary($bytes, $stream, 0); - } else { - var trackFlags = readUi8($bytes, $stream); - $.trackAsMenu = trackFlags >> 7 & 1; - var actionOffset = readUi16($bytes, $stream); - var $28 = $.characters = []; - do { - var $29 = {}; - var flags = readUi8($bytes, $stream); - var eob = $29.eob = !flags; - if (swfVersion >= 8) { - blend = $29.blend = flags >> 5 & 1; - hasFilters = $29.hasFilters = flags >> 4 & 1; - } else { - blend = $29.blend = 0; - hasFilters = $29.hasFilters = 0; - } - $29.stateHitTest = flags >> 3 & 1; - $29.stateDown = flags >> 2 & 1; - $29.stateOver = flags >> 1 & 1; - $29.stateUp = flags & 1; - if (!eob) { - $29.symbolId = readUi16($bytes, $stream); - $29.depth = readUi16($bytes, $stream); - var $30 = $29.matrix = {}; - matrix($bytes, $stream, $30, swfVersion, tagCode); - if (tagCode === 34) { - var $31 = $29.cxform = {}; - cxform($bytes, $stream, $31, swfVersion, tagCode); - } - if (hasFilters) { - var count = readUi8($bytes, $stream); - var $2 = $.filters = []; - var $3 = count; - while ($3--) { - var $4 = {}; - anyFilter($bytes, $stream, $4, swfVersion, tagCode); - $2.push($4); - } - } - if (blend) { - $29.blendMode = readUi8($bytes, $stream); - } - } - $28.push($29); - } while (!eob); - if (!(!actionOffset)) { - var $56 = $.buttonActions = []; - do { - var $57 = {}; - buttonCondAction($bytes, $stream, $57, swfVersion, tagCode); - $56.push($57); - } while ($stream.remaining() > 0); - } - } - return $; - } - function defineJPEGTables($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = 0; - $.imgData = readBinary($bytes, $stream, 0); - $.mimeType = 'application/octet-stream'; - return $; - } - function setBackgroundColor($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var $0 = $.color = {}; - rgb($bytes, $stream, $0, swfVersion, tagCode); - return $; - } - function defineBinaryData($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var reserved = readUi32($bytes, $stream); - $.data = readBinary($bytes, $stream, 0); - return $; - } - function defineFont($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var firstOffset = readUi16($bytes, $stream); - var glyphCount = $.glyphCount = firstOffset / 2; - var restOffsets = []; - var $0 = glyphCount - 1; - while ($0--) { - restOffsets.push(readUi16($bytes, $stream)); - } - $.offsets = [ - firstOffset - ].concat(restOffsets); - var $1 = $.glyphs = []; - var $2 = glyphCount; - while ($2--) { - var $3 = {}; - shape($bytes, $stream, $3, swfVersion, tagCode); - $1.push($3); - } - return $; - } - function defineLabel($bytes, $stream, $, swfVersion, tagCode) { - var eot; - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var $0 = $.bbox = {}; - bbox($bytes, $stream, $0, swfVersion, tagCode); - var $1 = $.matrix = {}; - matrix($bytes, $stream, $1, swfVersion, tagCode); - var glyphBits = $.glyphBits = readUi8($bytes, $stream); - var advanceBits = $.advanceBits = readUi8($bytes, $stream); - var $2 = $.records = []; - do { - var $3 = {}; - var temp = textRecord($bytes, $stream, $3, swfVersion, tagCode, glyphBits, advanceBits); - eot = temp.eot; - $2.push($3); - } while (!eot); - return $; - } - function doAction($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - if (tagCode === 59) { - $.spriteId = readUi16($bytes, $stream); - } - $.actionsData = readBinary($bytes, $stream, 0); - return $; - } - function defineSound($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var soundFlags = readUi8($bytes, $stream); - $.soundFormat = soundFlags >> 4 & 15; - $.soundRate = soundFlags >> 2 & 3; - $.soundSize = soundFlags >> 1 & 1; - $.soundType = soundFlags & 1; - $.samplesCount = readUi32($bytes, $stream); - $.soundData = readBinary($bytes, $stream, 0); - return $; - } - function startSound($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - if (tagCode == 15) { - $.soundId = readUi16($bytes, $stream); - } - if (tagCode == 89) { - $.soundClassName = readString($bytes, $stream, 0); - } - var $0 = $.soundInfo = {}; - soundInfo($bytes, $stream, $0, swfVersion, tagCode); - return $; - } - function soundStreamHead($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var playbackFlags = readUi8($bytes, $stream); - $.playbackRate = playbackFlags >> 2 & 3; - $.playbackSize = playbackFlags >> 1 & 1; - $.playbackType = playbackFlags & 1; - var streamFlags = readUi8($bytes, $stream); - var streamCompression = $.streamCompression = streamFlags >> 4 & 15; - $.streamRate = streamFlags >> 2 & 3; - $.streamSize = streamFlags >> 1 & 1; - $.streamType = streamFlags & 1; - $.samplesCount = readUi32($bytes, $stream); - if (streamCompression == 2) { - $.latencySeek = readSi16($bytes, $stream); - } - return $; - } - function soundStreamBlock($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.data = readBinary($bytes, $stream, 0); - return $; - } - function defineBitmap($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var format = $.format = readUi8($bytes, $stream); - $.width = readUi16($bytes, $stream); - $.height = readUi16($bytes, $stream); - $.hasAlpha = tagCode === 36; - if (format === 3) { - $.colorTableSize = readUi8($bytes, $stream); - } - $.bmpData = readBinary($bytes, $stream, 0); - return $; - } - function defineText($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var $0 = $.bbox = {}; - bbox($bytes, $stream, $0, swfVersion, tagCode); - var flags = readUi16($bytes, $stream); - var hasText = $.hasText = flags >> 7 & 1; - $.wordWrap = flags >> 6 & 1; - $.multiline = flags >> 5 & 1; - $.password = flags >> 4 & 1; - $.readonly = flags >> 3 & 1; - var hasColor = $.hasColor = flags >> 2 & 1; - var hasMaxLength = $.hasMaxLength = flags >> 1 & 1; - var hasFont = $.hasFont = flags & 1; - var hasFontClass = $.hasFontClass = flags >> 15 & 1; - $.autoSize = flags >> 14 & 1; - var hasLayout = $.hasLayout = flags >> 13 & 1; - $.noSelect = flags >> 12 & 1; - $.border = flags >> 11 & 1; - $.wasStatic = flags >> 10 & 1; - $.html = flags >> 9 & 1; - $.useOutlines = flags >> 8 & 1; - if (hasFont) { - $.fontId = readUi16($bytes, $stream); - } - if (hasFontClass) { - $.fontClass = readString($bytes, $stream, 0); - } - if (hasFont) { - $.fontHeight = readUi16($bytes, $stream); - } - if (hasColor) { - var $1 = $.color = {}; - rgba($bytes, $stream, $1, swfVersion, tagCode); - } - if (hasMaxLength) { - $.maxLength = readUi16($bytes, $stream); - } - if (hasLayout) { - $.align = readUi8($bytes, $stream); - $.leftMargin = readUi16($bytes, $stream); - $.rightMargin = readUi16($bytes, $stream); - $.indent = readSi16($bytes, $stream); - $.leading = readSi16($bytes, $stream); - } - $.variableName = readString($bytes, $stream, 0); - if (hasText) { - $.initialText = readString($bytes, $stream, 0); - } - return $; - } - function frameLabel($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.name = readString($bytes, $stream, 0); - return $; - } - function defineFont2($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.id = readUi16($bytes, $stream); - var hasLayout = $.hasLayout = readUb($bytes, $stream, 1); - if (swfVersion > 5) { - $.shiftJis = readUb($bytes, $stream, 1); - } else { - var reserved = readUb($bytes, $stream, 1); - } - $.smallText = readUb($bytes, $stream, 1); - $.ansi = readUb($bytes, $stream, 1); - var wideOffset = $.wideOffset = readUb($bytes, $stream, 1); - var wide = $.wide = readUb($bytes, $stream, 1); - $.italic = readUb($bytes, $stream, 1); - $.bold = readUb($bytes, $stream, 1); - if (swfVersion > 5) { - $.language = readUi8($bytes, $stream); - } else { - var reserved = readUi8($bytes, $stream); - $.language = 0; - } - var nameLength = readUi8($bytes, $stream); - $.name = readString($bytes, $stream, nameLength); - if (tagCode === 75) { - $.resolution = 20; - } - var glyphCount = $.glyphCount = readUi16($bytes, $stream); - if (wideOffset) { - var $0 = $.offsets = []; - var $1 = glyphCount; - while ($1--) { - $0.push(readUi32($bytes, $stream)); - } - $.mapOffset = readUi32($bytes, $stream); - } else { - var $2 = $.offsets = []; - var $3 = glyphCount; - while ($3--) { - $2.push(readUi16($bytes, $stream)); - } - $.mapOffset = readUi16($bytes, $stream); - } - var $4 = $.glyphs = []; - var $5 = glyphCount; - while ($5--) { - var $6 = {}; - shape($bytes, $stream, $6, swfVersion, tagCode); - $4.push($6); - } - if (wide) { - var $47 = $.codes = []; - var $48 = glyphCount; - while ($48--) { - $47.push(readUi16($bytes, $stream)); - } - } else { - var $49 = $.codes = []; - var $50 = glyphCount; - while ($50--) { - $49.push(readUi8($bytes, $stream)); - } - } - if (hasLayout) { - $.ascent = readUi16($bytes, $stream); - $.descent = readUi16($bytes, $stream); - $.leading = readSi16($bytes, $stream); - var $51 = $.advance = []; - var $52 = glyphCount; - while ($52--) { - $51.push(readSi16($bytes, $stream)); - } - var $53 = $.bbox = []; - var $54 = glyphCount; - while ($54--) { - var $55 = {}; - bbox($bytes, $stream, $55, swfVersion, tagCode); - $53.push($55); - } - var kerningCount = readUi16($bytes, $stream); - var $56 = $.kerning = []; - var $57 = kerningCount; - while ($57--) { - var $58 = {}; - kerning($bytes, $stream, $58, swfVersion, tagCode, wide); - $56.push($58); - } - } - return $; - } - function fileAttributes($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var reserved = readUb($bytes, $stream, 1); - $.useDirectBlit = readUb($bytes, $stream, 1); - $.useGpu = readUb($bytes, $stream, 1); - $.hasMetadata = readUb($bytes, $stream, 1); - $.doAbc = readUb($bytes, $stream, 1); - $.noCrossDomainCaching = readUb($bytes, $stream, 1); - $.relativeUrls = readUb($bytes, $stream, 1); - $.network = readUb($bytes, $stream, 1); - var pad = readUb($bytes, $stream, 24); - return $; - } - function doABC($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - if (tagCode === 82) { - $.flags = readUi32($bytes, $stream); - } else { - $.flags = 0; - } - if (tagCode === 82) { - $.name = readString($bytes, $stream, 0); - } else { - $.name = ''; - } - $.data = readBinary($bytes, $stream, 0); - return $; - } - function exportAssets($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var exportsCount = readUi16($bytes, $stream); - var $0 = $.exports = []; - var $1 = exportsCount; - while ($1--) { - var $2 = {}; - $2.symbolId = readUi16($bytes, $stream); - $2.className = readString($bytes, $stream, 0); - $0.push($2); - } - return $; - } - function symbolClass($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var symbolCount = readUi16($bytes, $stream); - var $0 = $.exports = []; - var $1 = symbolCount; - while ($1--) { - var $2 = {}; - $2.symbolId = readUi16($bytes, $stream); - $2.className = readString($bytes, $stream, 0); - $0.push($2); - } - return $; - } - function defineScalingGrid($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - $.symbolId = readUi16($bytes, $stream); - var $0 = $.splitter = {}; - bbox($bytes, $stream, $0, swfVersion, tagCode); - return $; - } - function defineScene($bytes, $stream, $, swfVersion, tagCode) { - $ || ($ = {}); - var sceneCount = readEncodedU32($bytes, $stream); - var $0 = $.scenes = []; - var $1 = sceneCount; - while ($1--) { - var $2 = {}; - $2.offset = readEncodedU32($bytes, $stream); - $2.name = readString($bytes, $stream, 0); - $0.push($2); - } - var labelCount = readEncodedU32($bytes, $stream); - var $3 = $.labels = []; - var $4 = labelCount; - while ($4--) { - var $5 = {}; - $5.frame = readEncodedU32($bytes, $stream); - $5.name = readString($bytes, $stream, 0); - $3.push($5); - } - return $; - } - function bbox($bytes, $stream, $, swfVersion, tagCode) { - align($bytes, $stream); - var bits = readUb($bytes, $stream, 5); - var xMin = readSb($bytes, $stream, bits); - var xMax = readSb($bytes, $stream, bits); - var yMin = readSb($bytes, $stream, bits); - var yMax = readSb($bytes, $stream, bits); - $.xMin = xMin; - $.xMax = xMax; - $.yMin = yMin; - $.yMax = yMax; - align($bytes, $stream); - } - function rgb($bytes, $stream, $, swfVersion, tagCode) { - $.red = readUi8($bytes, $stream); - $.green = readUi8($bytes, $stream); - $.blue = readUi8($bytes, $stream); - $.alpha = 255; - return; - } - function rgba($bytes, $stream, $, swfVersion, tagCode) { - $.red = readUi8($bytes, $stream); - $.green = readUi8($bytes, $stream); - $.blue = readUi8($bytes, $stream); - $.alpha = readUi8($bytes, $stream); - return;