@swf2es/format 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +35 -0
  3. package/README.md +22 -2
  4. package/dist/abc-names.d.ts +3 -0
  5. package/dist/abc-names.d.ts.map +1 -0
  6. package/dist/abc-names.js +127 -0
  7. package/dist/abc-names.js.map +1 -0
  8. package/dist/actions.d.ts +106 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +223 -0
  11. package/dist/actions.js.map +1 -0
  12. package/dist/air-descriptor.d.ts +11 -0
  13. package/dist/air-descriptor.d.ts.map +1 -0
  14. package/dist/air-descriptor.js +64 -0
  15. package/dist/air-descriptor.js.map +1 -0
  16. package/dist/api-versions.d.ts +12 -0
  17. package/dist/api-versions.d.ts.map +1 -0
  18. package/dist/api-versions.js +23 -0
  19. package/dist/api-versions.js.map +1 -0
  20. package/dist/bitmap.d.ts +34 -0
  21. package/dist/bitmap.d.ts.map +1 -0
  22. package/dist/bitmap.js +200 -0
  23. package/dist/bitmap.js.map +1 -0
  24. package/dist/button.d.ts +39 -0
  25. package/dist/button.d.ts.map +1 -0
  26. package/dist/button.js +61 -0
  27. package/dist/button.js.map +1 -0
  28. package/dist/compression.d.ts +47 -0
  29. package/dist/compression.d.ts.map +1 -0
  30. package/dist/compression.js +201 -0
  31. package/dist/compression.js.map +1 -0
  32. package/dist/display.d.ts +106 -0
  33. package/dist/display.d.ts.map +1 -0
  34. package/dist/display.js +306 -0
  35. package/dist/display.js.map +1 -0
  36. package/dist/filters.d.ts +66 -0
  37. package/dist/filters.d.ts.map +1 -0
  38. package/dist/filters.js +137 -0
  39. package/dist/filters.js.map +1 -0
  40. package/dist/font.d.ts +60 -0
  41. package/dist/font.d.ts.map +1 -0
  42. package/dist/font.js +169 -0
  43. package/dist/font.js.map +1 -0
  44. package/dist/index.d.ts +27 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +27 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/lzma.d.ts +33 -0
  49. package/dist/lzma.d.ts.map +1 -0
  50. package/dist/lzma.js +279 -0
  51. package/dist/lzma.js.map +1 -0
  52. package/dist/pbj.d.ts +178 -0
  53. package/dist/pbj.d.ts.map +1 -0
  54. package/dist/pbj.js +485 -0
  55. package/dist/pbj.js.map +1 -0
  56. package/dist/shape.d.ts +152 -0
  57. package/dist/shape.d.ts.map +1 -0
  58. package/dist/shape.js +412 -0
  59. package/dist/shape.js.map +1 -0
  60. package/dist/sound.d.ts +71 -0
  61. package/dist/sound.d.ts.map +1 -0
  62. package/dist/sound.js +92 -0
  63. package/dist/sound.js.map +1 -0
  64. package/dist/swf.d.ts +77 -0
  65. package/dist/swf.d.ts.map +1 -0
  66. package/dist/swf.js +164 -0
  67. package/dist/swf.js.map +1 -0
  68. package/dist/tags.d.ts +57 -0
  69. package/dist/tags.d.ts.map +1 -0
  70. package/dist/tags.js +59 -0
  71. package/dist/tags.js.map +1 -0
  72. package/dist/text.d.ts +75 -0
  73. package/dist/text.d.ts.map +1 -0
  74. package/dist/text.js +136 -0
  75. package/dist/text.js.map +1 -0
  76. package/dist/zip.d.ts +17 -0
  77. package/dist/zip.d.ts.map +1 -0
  78. package/dist/zip.js +92 -0
  79. package/dist/zip.js.map +1 -0
  80. package/package.json +33 -3
  81. package/src/abc-names.ts +138 -0
  82. package/src/actions.ts +319 -0
  83. package/src/air-descriptor.ts +84 -0
  84. package/src/api-versions.ts +27 -0
  85. package/src/bitmap.ts +259 -0
  86. package/src/button.ts +99 -0
  87. package/src/compression.ts +243 -0
  88. package/src/display.ts +419 -0
  89. package/src/filters.ts +206 -0
  90. package/src/font.ts +238 -0
  91. package/src/index.ts +151 -0
  92. package/src/pbj.ts +651 -0
  93. package/src/shape.ts +618 -0
  94. package/src/sound.ts +173 -0
  95. package/src/swf.ts +234 -0
  96. package/src/tags.ts +58 -0
  97. package/src/text.ts +213 -0
  98. package/src/zip.ts +135 -0
@@ -0,0 +1,306 @@
1
+ import { readColorTransform, readMatrix } from "./shape.js";
2
+ import { readTags, SwfReader } from "./swf.js";
3
+ import { DoABC, PlaceObject, PlaceObject3, PlaceObject4, RemoveObject, RemoveObject2, } from "./tags.js";
4
+ export function readString(r) {
5
+ const start = r.pos;
6
+ while (r.pos < r.end && r.bytes[r.pos] !== 0) {
7
+ r.pos++;
8
+ }
9
+ const s = utf8(r.bytes.subarray(start, r.pos));
10
+ r.pos++;
11
+ return s;
12
+ }
13
+ /**
14
+ * UTF-8 as SWF 6 and later write strings, read as avmplus' Utf8ToUtf16 does
15
+ * (fromUtf8 in the runtime): a malformed or overlong sequence is no
16
+ * sequence, and its first byte stands for itself.
17
+ */
18
+ export function utf8(bytes) {
19
+ let s = "";
20
+ const length = bytes.length;
21
+ for (let i = 0; i < length;) {
22
+ const b = bytes[i++];
23
+ // ASCII, and a continuation byte on its own, stand for themselves.
24
+ if (b < 0xc0) {
25
+ s += String.fromCharCode(b);
26
+ continue;
27
+ }
28
+ const n = b < 0xe0 ? 1 : b < 0xf0 ? 2 : 3;
29
+ const minimum = n === 1 ? 0x80 : n === 2 ? 0x800 : 0x10000;
30
+ let c = b & (n === 1 ? 0x1f : n === 2 ? 0x0f : 0x07);
31
+ let ok = i + n <= length;
32
+ for (let k = 0; ok && k < n; k++) {
33
+ const next = bytes[i + k];
34
+ ok = (next & 0xc0) === 0x80;
35
+ c = (c << 6) | (next & 0x3f);
36
+ }
37
+ if (!ok || c < minimum) {
38
+ s += String.fromCharCode(b);
39
+ continue;
40
+ }
41
+ i += n;
42
+ if (n === 3) {
43
+ // A surrogate pair however large the value, as avmplus makes one;
44
+ // fromCodePoint would refuse one past U+10FFFF.
45
+ const u = c - 0x10000;
46
+ s += String.fromCharCode(0xd800 + ((u >> 10) & 0x3ff), 0xdc00 + (u & 0x3ff));
47
+ }
48
+ else {
49
+ s += String.fromCharCode(c);
50
+ }
51
+ }
52
+ return s;
53
+ }
54
+ /**
55
+ * A PlaceObject 1 to 4 tag's body; given the SWF's
56
+ * action list, with the indices of its clip actions.
57
+ */
58
+ export function readPlace(bytes, tag, actions) {
59
+ const { place } = parsePlace(bytes, tag);
60
+ place.actions = actions?.byTag.get(tag.offset) ?? null;
61
+ place.corrupt = actions?.corruptEvents.get(tag.offset) ?? 0;
62
+ return place;
63
+ }
64
+ /** Where a PlaceObject 2 to 4's clip actions start, -1 without them, and its depth. */
65
+ export function clipActionsOffset(bytes, tag) {
66
+ const { place, clipActions } = parsePlace(bytes, tag);
67
+ return { depth: place.depth, offset: clipActions };
68
+ }
69
+ function parsePlace(bytes, tag) {
70
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
71
+ const place = {
72
+ depth: 0,
73
+ move: false,
74
+ character: null,
75
+ matrix: null,
76
+ colorTransform: null,
77
+ ratio: null,
78
+ name: null,
79
+ clipDepth: null,
80
+ className: null,
81
+ hasImage: false,
82
+ blendMode: null,
83
+ cacheAsBitmap: null,
84
+ visible: null,
85
+ opaqueBackground: null,
86
+ filters: null,
87
+ metaData: null,
88
+ actions: null,
89
+ corrupt: 0,
90
+ };
91
+ if (tag.code === PlaceObject) {
92
+ place.character = r.u16();
93
+ place.depth = r.u16();
94
+ place.matrix = readMatrix(r);
95
+ if (r.pos < r.end) {
96
+ place.colorTransform = readColorTransform(r, false);
97
+ }
98
+ return { place, clipActions: -1 };
99
+ }
100
+ const flags = r.u8();
101
+ const flags2 = tag.code === PlaceObject3 || tag.code === PlaceObject4 ? r.u8() : 0;
102
+ place.depth = r.u16();
103
+ place.move = (flags & 0x01) !== 0;
104
+ // SWF19 has a class name follow HasImage with a character; Flash reads
105
+ // one with HasImage only without a character, as Ruffle's reader notes.
106
+ const hasImage = (flags2 & 0x10) !== 0;
107
+ place.hasImage = hasImage;
108
+ if (flags2 & 0x08 || (hasImage && !(flags & 0x02))) {
109
+ place.className = readString(r);
110
+ }
111
+ if (flags & 0x02) {
112
+ place.character = r.u16();
113
+ }
114
+ if (flags & 0x04) {
115
+ place.matrix = readMatrix(r);
116
+ }
117
+ if (flags & 0x08) {
118
+ place.colorTransform = readColorTransform(r, true);
119
+ }
120
+ if (flags & 0x10) {
121
+ place.ratio = r.u16();
122
+ }
123
+ if (flags & 0x20) {
124
+ place.name = readString(r);
125
+ }
126
+ if (flags & 0x40) {
127
+ place.clipDepth = r.u16();
128
+ }
129
+ if (flags2 & 0x01) {
130
+ place.filters = readFilterBytes(r);
131
+ }
132
+ if (flags2 & 0x02) {
133
+ place.blendMode = r.u8();
134
+ }
135
+ if (flags2 & 0x04) {
136
+ place.cacheAsBitmap = r.u8() !== 0;
137
+ }
138
+ if (flags2 & 0x20) {
139
+ place.visible = r.u8() !== 0;
140
+ }
141
+ // The background follows its own flag, not HasVisible as SWF19 lays it out.
142
+ if (flags2 & 0x40) {
143
+ const a = r.u8();
144
+ const rgb = (r.u8() << 16) | (r.u8() << 8) | r.u8();
145
+ place.opaqueBackground = ((a << 24) | rgb) >>> 0;
146
+ }
147
+ const clipActions = flags & 0x80 && r.pos < r.end ? r.pos : -1;
148
+ if (tag.code === PlaceObject4) {
149
+ if (clipActions >= 0) {
150
+ // PlaceObject4 postdates SWF 6: its clip event flags are always 32 bits.
151
+ r.u16();
152
+ r.u32();
153
+ while (r.pos < r.end) {
154
+ const events = r.u32();
155
+ if (events === 0) {
156
+ break;
157
+ }
158
+ const length = r.u32();
159
+ // Flash still consumes keyPress's key code when its record says length 0.
160
+ r.pos += events & (1 << 17) ? Math.max(1, length) : length;
161
+ }
162
+ }
163
+ if (r.pos < r.end) {
164
+ place.metaData = bytes.subarray(r.pos, r.end);
165
+ }
166
+ }
167
+ return { place, clipActions };
168
+ }
169
+ /** Filter sizes by id, as FILTER's variants lay them out (6 and 7 have variable length). */
170
+ export function readFilterBytes(r) {
171
+ const start = r.pos;
172
+ const count = r.u8();
173
+ for (let i = 0; i < count && !r.overrun; i++) {
174
+ const id = r.u8();
175
+ switch (id) {
176
+ case 0:
177
+ r.pos += 23; // DropShadow
178
+ break;
179
+ case 1:
180
+ r.pos += 9; // Blur
181
+ break;
182
+ case 2:
183
+ r.pos += 15; // Glow
184
+ break;
185
+ case 3:
186
+ r.pos += 27; // Bevel
187
+ break;
188
+ case 4:
189
+ case 7: {
190
+ const stops = r.u8(); // GradientGlow, GradientBevel
191
+ r.pos += stops * 5 + 19;
192
+ break;
193
+ }
194
+ case 5: {
195
+ const x = r.u8(); // Convolution
196
+ const y = r.u8();
197
+ r.pos += 8 + x * y * 4 + 5;
198
+ break;
199
+ }
200
+ case 6:
201
+ r.pos += 80; // ColorMatrix
202
+ break;
203
+ }
204
+ }
205
+ return r.bytes.subarray(start, Math.min(r.pos, r.end));
206
+ }
207
+ /** A RemoveObject's or RemoveObject2's depth. */
208
+ export function readRemove(bytes, tag) {
209
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
210
+ if (tag.code === RemoveObject) {
211
+ r.u16();
212
+ }
213
+ else if (tag.code !== RemoveObject2) {
214
+ throw new Error(`tag ${tag.code} is not a remove`);
215
+ }
216
+ return r.u16();
217
+ }
218
+ export function readFrameLabel(bytes, tag) {
219
+ return readString(new SwfReader(bytes, tag.offset, tag.offset + tag.length));
220
+ }
221
+ /** An EncodedU32: seven bits a byte, low first, while the top bit is set. */
222
+ function encodedU32(r) {
223
+ let value = 0;
224
+ for (let shift = 0; shift < 35; shift += 7) {
225
+ const b = r.u8();
226
+ value += (b & 0x7f) * 2 ** shift;
227
+ if (!(b & 0x80)) {
228
+ break;
229
+ }
230
+ }
231
+ return value >>> 0;
232
+ }
233
+ /** DefineSceneAndFrameLabelData; a count past the tag's end stops where its bytes do. */
234
+ export function readSceneData(bytes, tag) {
235
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
236
+ const list = () => {
237
+ const out = [];
238
+ const count = encodedU32(r);
239
+ for (let i = 0; i < count && !r.overrun; i++) {
240
+ const frame = encodedU32(r);
241
+ const name = readString(r);
242
+ if (!r.overrun) {
243
+ out.push({ frame, name });
244
+ }
245
+ }
246
+ return out;
247
+ };
248
+ const scenes = list();
249
+ return { scenes, labels: list() };
250
+ }
251
+ /** A DefineSprite's id, frame count and its own tags. */
252
+ export function readSprite(bytes, tag) {
253
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
254
+ const id = r.u16();
255
+ const frameCount = r.u16();
256
+ return { id, frameCount, tags: readTags(bytes, r.pos, tag.offset + tag.length).tags };
257
+ }
258
+ /** DefineScalingGrid: the sprite or button it is for, and its grid, in twips, in the character's space. */
259
+ export function readScalingGrid(bytes, tag) {
260
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
261
+ const id = r.u16();
262
+ return { id, grid: r.rect() };
263
+ }
264
+ /** DefineBinaryData: a character's bytes, after its id and 4 reserved bytes, which a ByteArray subclass SymbolClass binds to it holds. */
265
+ export function readBinaryData(bytes, tag) {
266
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
267
+ const id = r.u16();
268
+ r.u32();
269
+ return {
270
+ id,
271
+ data: bytes.subarray(Math.min(r.pos, tag.offset + tag.length), tag.offset + tag.length),
272
+ };
273
+ }
274
+ /** SymbolClass's links, including multiple classes of one character; id 0 is the document class. */
275
+ export function readSymbolClass(bytes, tag) {
276
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
277
+ const count = r.u16();
278
+ const symbols = [];
279
+ for (let i = 0; i < count && !r.overrun; i++) {
280
+ const id = r.u16();
281
+ symbols.push([id, readString(r)]);
282
+ }
283
+ return symbols;
284
+ }
285
+ /** A DoABC's or DoABC2's ABC bytes, its name, and whether it is to be run lazily (kDoAbcLazyInitializeFlag). */
286
+ export function readDoAbc(bytes, tag) {
287
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
288
+ if (tag.code === DoABC) {
289
+ return { name: "", lazy: false, abc: bytes.subarray(tag.offset, tag.offset + tag.length) };
290
+ }
291
+ const flags = r.u32();
292
+ const name = readString(r);
293
+ return { name, lazy: (flags & 1) !== 0, abc: bytes.subarray(r.pos, tag.offset + tag.length) };
294
+ }
295
+ /** ExportAssets: the characters it names, each id with its name, in tag order. */
296
+ export function readExports(bytes, tag) {
297
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
298
+ const exports = [];
299
+ const n = r.end - r.pos >= 2 ? r.u16() : 0;
300
+ for (let i = 0; i < n && r.end - r.pos >= 2; i++) {
301
+ const id = r.u16();
302
+ exports.push({ id, name: readString(r) });
303
+ }
304
+ return exports;
305
+ }
306
+ //# sourceMappingURL=display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /** A colour of a filter: RGB and alpha 0 to 255, as RGBA stores them. */
2
+ export interface FilterColor {
3
+ rgb: number;
4
+ alpha: number;
5
+ }
6
+ export type SwfFilter = {
7
+ type: "dropShadow";
8
+ color: FilterColor;
9
+ blurX: number;
10
+ blurY: number;
11
+ /** In radians. */
12
+ angle: number;
13
+ distance: number;
14
+ strength: number;
15
+ inner: boolean;
16
+ knockout: boolean;
17
+ /** The object drawn with its shadow: false hides it. */
18
+ composite: boolean;
19
+ passes: number;
20
+ } | {
21
+ type: "blur";
22
+ blurX: number;
23
+ blurY: number;
24
+ passes: number;
25
+ } | {
26
+ type: "glow";
27
+ color: FilterColor;
28
+ blurX: number;
29
+ blurY: number;
30
+ strength: number;
31
+ inner: boolean;
32
+ knockout: boolean;
33
+ composite: boolean;
34
+ passes: number;
35
+ } | {
36
+ type: "bevel" | "gradientGlow" | "gradientBevel";
37
+ /** A bevel's shadow and highlight, in that order; a gradient's stops. */
38
+ colors: FilterColor[];
39
+ ratios: number[];
40
+ blurX: number;
41
+ blurY: number;
42
+ angle: number;
43
+ distance: number;
44
+ strength: number;
45
+ inner: boolean;
46
+ knockout: boolean;
47
+ composite: boolean;
48
+ onTop: boolean;
49
+ passes: number;
50
+ } | {
51
+ type: "convolution";
52
+ matrixX: number;
53
+ matrixY: number;
54
+ divisor: number;
55
+ bias: number;
56
+ matrix: number[];
57
+ color: FilterColor;
58
+ clamp: boolean;
59
+ preserveAlpha: boolean;
60
+ } | {
61
+ type: "colorMatrix";
62
+ matrix: number[];
63
+ };
64
+ /** A FILTERLIST's filters, as far as the bytes go. */
65
+ export declare function readFilters(bytes: Uint8Array): SwfFilter[];
66
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,SAAS,GACjB;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9D;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC;IACjD,yEAAyE;IACzE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAkB9C,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,CAyH1D"}
@@ -0,0 +1,137 @@
1
+ // The filters a PlaceObject3 gives a display object, as the SWF stores
2
+ // them: FILTERLIST's records, with their fixed-point and float fields.
3
+ import { SwfReader } from "./swf.js";
4
+ function color(r) {
5
+ const red = r.u8();
6
+ const green = r.u8();
7
+ const blue = r.u8();
8
+ return { rgb: (red << 16) | (green << 8) | blue, alpha: r.u8() };
9
+ }
10
+ const fixed = (r) => (r.u32() | 0) / 65536;
11
+ const fixed8 = (r) => ((r.u16() << 16) >> 16) / 256;
12
+ function float(r) {
13
+ const v = new DataView(new ArrayBuffer(4));
14
+ v.setUint32(0, r.u32());
15
+ return v.getFloat32(0);
16
+ }
17
+ /** A FILTERLIST's filters, as far as the bytes go. */
18
+ export function readFilters(bytes) {
19
+ const r = new SwfReader(bytes, 0, bytes.length);
20
+ const count = r.u8();
21
+ const filters = [];
22
+ for (let i = 0; i < count && !r.overrun; i++) {
23
+ const id = r.u8();
24
+ let filter = null;
25
+ switch (id) {
26
+ case 0: {
27
+ const c = color(r);
28
+ const [blurX, blurY, angle, distance] = [fixed(r), fixed(r), fixed(r), fixed(r)];
29
+ const strength = fixed8(r);
30
+ const flags = r.u8();
31
+ filter = {
32
+ type: "dropShadow",
33
+ color: c,
34
+ blurX,
35
+ blurY,
36
+ angle,
37
+ distance,
38
+ strength,
39
+ inner: (flags & 0x80) !== 0,
40
+ knockout: (flags & 0x40) !== 0,
41
+ composite: (flags & 0x20) !== 0,
42
+ passes: flags & 0x1f,
43
+ };
44
+ break;
45
+ }
46
+ case 1: {
47
+ const [blurX, blurY] = [fixed(r), fixed(r)];
48
+ filter = { type: "blur", blurX, blurY, passes: r.u8() >> 3 };
49
+ break;
50
+ }
51
+ case 2: {
52
+ const c = color(r);
53
+ const [blurX, blurY] = [fixed(r), fixed(r)];
54
+ const strength = fixed8(r);
55
+ const flags = r.u8();
56
+ filter = {
57
+ type: "glow",
58
+ color: c,
59
+ blurX,
60
+ blurY,
61
+ strength,
62
+ inner: (flags & 0x80) !== 0,
63
+ knockout: (flags & 0x40) !== 0,
64
+ composite: (flags & 0x20) !== 0,
65
+ passes: flags & 0x1f,
66
+ };
67
+ break;
68
+ }
69
+ case 3:
70
+ case 4:
71
+ case 7: {
72
+ let colors;
73
+ let ratios;
74
+ if (id === 3) {
75
+ // The highlight, then the shadow: the SWF spec has them the other way, adl this.
76
+ const highlight = color(r);
77
+ colors = [color(r), highlight];
78
+ ratios = [];
79
+ }
80
+ else {
81
+ const n = r.u8();
82
+ colors = Array.from({ length: n }, () => color(r));
83
+ ratios = Array.from({ length: n }, () => r.u8());
84
+ }
85
+ const [blurX, blurY, angle, distance] = [fixed(r), fixed(r), fixed(r), fixed(r)];
86
+ const strength = fixed8(r);
87
+ const flags = r.u8();
88
+ filter = {
89
+ type: id === 3 ? "bevel" : id === 4 ? "gradientGlow" : "gradientBevel",
90
+ colors,
91
+ ratios,
92
+ blurX,
93
+ blurY,
94
+ angle,
95
+ distance,
96
+ strength,
97
+ inner: (flags & 0x80) !== 0,
98
+ knockout: (flags & 0x40) !== 0,
99
+ composite: (flags & 0x20) !== 0,
100
+ onTop: (flags & 0x10) !== 0,
101
+ passes: flags & 0x0f,
102
+ };
103
+ break;
104
+ }
105
+ case 5: {
106
+ const matrixX = r.u8();
107
+ const matrixY = r.u8();
108
+ const divisor = float(r);
109
+ const bias = float(r);
110
+ const matrix = Array.from({ length: matrixX * matrixY }, () => float(r));
111
+ const c = color(r);
112
+ const flags = r.u8();
113
+ filter = {
114
+ type: "convolution",
115
+ matrixX,
116
+ matrixY,
117
+ divisor,
118
+ bias,
119
+ matrix,
120
+ color: c,
121
+ clamp: (flags & 0x02) !== 0,
122
+ preserveAlpha: (flags & 0x01) !== 0,
123
+ };
124
+ break;
125
+ }
126
+ case 6:
127
+ filter = { type: "colorMatrix", matrix: Array.from({ length: 20 }, () => float(r)) };
128
+ break;
129
+ }
130
+ if (!filter || r.overrun) {
131
+ break;
132
+ }
133
+ filters.push(filter);
134
+ }
135
+ return filters;
136
+ }
137
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiErC,SAAS,KAAK,CAAC,CAAY;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACtD,MAAM,MAAM,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;AAE/D,SAAS,KAAK,CAAC,CAAY;IACzB,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,IAAI,MAAM,GAAqB,IAAI,CAAC;QACpC,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,GAAG;oBACP,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,CAAC;oBACR,KAAK;oBACL,KAAK;oBACL,KAAK;oBACL,QAAQ;oBACR,QAAQ;oBACR,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,QAAQ,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC9B,SAAS,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,KAAK,GAAG,IAAI;iBACrB,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7D,MAAM;YACR,CAAC;YACD,KAAK,CAAC,EAAE,CAAC;gBACP,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,GAAG;oBACP,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,CAAC;oBACR,KAAK;oBACL,KAAK;oBACL,QAAQ;oBACR,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,QAAQ,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC9B,SAAS,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,KAAK,GAAG,IAAI;iBACrB,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,CAAC,CAAC;YACP,KAAK,CAAC,CAAC;YACP,KAAK,CAAC,EAAE,CAAC;gBACP,IAAI,MAAqB,CAAC;gBAC1B,IAAI,MAAgB,CAAC;gBACrB,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBACb,iFAAiF;oBACjF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC/B,MAAM,GAAG,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,GAAG;oBACP,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe;oBACtE,MAAM;oBACN,MAAM;oBACN,KAAK;oBACL,KAAK;oBACL,KAAK;oBACL,QAAQ;oBACR,QAAQ;oBACR,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,QAAQ,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC9B,SAAS,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC/B,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,MAAM,EAAE,KAAK,GAAG,IAAI;iBACrB,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,CAAC,EAAE,CAAC;gBACP,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,GAAG;oBACP,IAAI,EAAE,aAAa;oBACnB,OAAO;oBACP,OAAO;oBACP,OAAO;oBACP,IAAI;oBACJ,MAAM;oBACN,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,aAAa,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBACpC,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,CAAC;gBACJ,MAAM,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,MAAM;QACV,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM;QACR,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/font.d.ts ADDED
@@ -0,0 +1,60 @@
1
+ import { type ShapeRecord } from "./shape.js";
2
+ import { type Rect, type Tag } from "./swf.js";
3
+ import { type FontName } from "./text.js";
4
+ export interface Glyph {
5
+ /** The character, a UTF-16 code unit, or -1 before a legacy font has a character table. */
6
+ code: number;
7
+ /** Its outline: shape records of one fill, in the font's units, y down from the baseline. */
8
+ records: ShapeRecord[];
9
+ /** The advance and bounds from the layout, in the font's units; 0 and null without one. */
10
+ advance: number;
11
+ bounds: Rect | null;
12
+ }
13
+ export interface Font {
14
+ id: number;
15
+ name: string;
16
+ bold: boolean;
17
+ italic: boolean;
18
+ /** Units to the em: 1024 for DefineFont and DefineFont2, 20480 for DefineFont3. */
19
+ em: number;
20
+ /** In the order of the code table, which is by code. */
21
+ glyphs: Glyph[];
22
+ /** Whether the tag has a layout: without one a field cannot lay text out in it. */
23
+ layout: boolean;
24
+ ascent: number;
25
+ descent: number;
26
+ leading: number;
27
+ /** Kerning adjustments by pair, `first << 16 | second`, in the font's units. */
28
+ kerning: Map<number, number>;
29
+ /**
30
+ * DefineFontAlignZones' CSM hint, how much advanced anti-aliasing
31
+ * thickens its stems: 0 thin, 1 medium, 2 thick; none without the tag.
32
+ */
33
+ csmHint?: number;
34
+ }
35
+ /** DefineFont4's CFF data, when embedded; a tag without it still has a name and style. */
36
+ export interface Font4 {
37
+ id: number;
38
+ name: string;
39
+ bold: boolean;
40
+ italic: boolean;
41
+ data: Uint8Array | null;
42
+ }
43
+ /** DefineFont4 (91): a name, style, and optional OpenType CFF bytes. */
44
+ export declare function readFont4(bytes: Uint8Array, tag: Tag): Font4;
45
+ /** A legacy font's name, style and glyph-to-character mapping, supplied after its outlines. */
46
+ export interface FontInfo extends FontName {
47
+ codes: number[];
48
+ }
49
+ /** DefineFontInfo (13) or DefineFontInfo2 (62); the latter has a language byte before its codes. */
50
+ export declare function readFontInfo(bytes: Uint8Array, tag: Tag): FontInfo;
51
+ /** DefineFont (10), DefineFont2 (48) or DefineFont3 (75), as far as the tag goes. */
52
+ export declare function readFont(bytes: Uint8Array, tag: Tag): Font;
53
+ /** The glyph for a character, by a binary search of the code table, as Flash finds it: null for one the font lacks. */
54
+ export declare function glyphOf(font: Font, code: number): Glyph | null;
55
+ /** DefineFontAlignZones (73): the font it is for and its CSM hint; the zones themselves are not read. */
56
+ export declare function readFontAlignZones(bytes: Uint8Array, tag: Tag): {
57
+ id: number;
58
+ csmHint: number;
59
+ };
60
+ //# sourceMappingURL=font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,KAAK,IAAI,EAAa,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,KAAK;IACpB,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,mFAAmF;IACnF,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0FAA0F;AAC1F,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;CACzB;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,KAAK,CAa5D;AA6CD,+FAA+F;AAC/F,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,CAkBlE;AAED,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAwE1D;AAED,uHAAuH;AACvH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAkB9D;AAED,yGAAyG;AACzG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAI/F"}