Несколько тегов DoABC для повторного использования шаблона.
Я работаю над инструментом для компиляции TypeScript в SWF. Например, я еще не разобрался с преобразователем, но мне хотелось повторно использовать немного шаблонного кода из другогоabc
. Я просто добавляю ABC из SWC в выходной SWF, но работает ли это?
// ...
public mergeSWF(file: Buffer | string) {
let swf = SwfReader.readSync(file);
let symbolClasses = swf.tags.filter(tag => tag.code == SwfTagCode.SYMBOL_CLASS);
let reassignedCharTagIds = new Map<number, number>();
for (let tag of swf.tags) {
if (tag.code == SwfTagCode.DO_ABC) {
this.swfTags.push(tag);
} else if (tag.code == SwfTagCode.DEFINE_BINARY_DATA) {
// re-assign the character tag ID if already used.
let binaryData = new SwfReader(ByteArray.from(tag.data!)).defineBinaryData();
let prevTag = binaryData.tag;
binaryData.tag = this.swfAlreadyUsedCharTagIds.has(binaryData.tag) ? this.nextSWFCharTagId() : binaryData.tag;
this.swfAlreadyUsedCharTagIds.add(binaryData.tag);
reassignedCharTagIds.set(prevTag, binaryData.tag);
let newData = new SwfWriter();
newData.ui16(binaryData.tag);
newData.ui32(0);
newData.binary(binaryData.data);
tag.data = newData.toNodejsBuffer();
}
}
for (let symbolClass of symbolClasses) {
// re-assign the character tag IDs
for (let symbol of symbolClass.symbols!) {
symbol.id = reassignedCharTagIds.get(symbol.id)!;
}
this.swfTags.push(symbolClass);
}
}
Может ли a в SWF ссылаться на другойDoABC
в том же SWF без объединения байт-кодов (например, пула констант)?
Пример:
-
-
-
Main
относится кq.b::C
от
-
Ожидается ли, что это будет работать на AVM2, учитывая, чтоlib.abc
появляется раньшеapp.abc
?