in compiler/src/main/java/org/apache/royale/swf/io/SWFWriter.java [1253:1466]
private void writeTag(ITag tag, IOutputBitStream tagData, IOutputBitStream out)
{
assert tag != null;
assert tagData != null;
assert out != null;
assert tagData != out;
if (tag == SWFReader.INVALID_TAG)
return;
// redirect tag buffer to "tagData"
IOutputBitStream swfTagBuffer = null;
if (tagData != this.tagBuffer)
{
swfTagBuffer = this.tagBuffer;
this.tagBuffer = tagData;
}
boolean skipRawTag = false;
Collection<ITag> extraTags = new LinkedList<ITag>();
if (tag instanceof RawTag)
{
skipRawTag = writeRawTag((RawTag)tag);
}
else
{
switch (tag.getTagType())
{
case DoABC:
writeDoABC((DoABCTag)tag);
break;
case FileAttributes:
writeFileAttributes((FileAttributesTag) tag);
break;
case SymbolClass:
writeSymbolClass((SymbolClassTag) tag);
break;
case ShowFrame:
writeShowFrame();
break;
case SetBackgroundColor:
writeSetBackgroundColor((SetBackgroundColorTag) tag);
break;
case EnableDebugger2:
writeEnableDebugger2((EnableDebugger2Tag) tag);
break;
case EnableTelemetry:
writeEnableTelemetry((EnableTelemetryTag) tag);
break;
case ScriptLimits:
writeScriptLimits((ScriptLimitsTag)tag);
break;
case ProductInfo:
writeProductInfo((ProductInfoTag)tag);
break;
case Metadata:
writeMetadata((MetadataTag)tag);
break;
case DefineBits:
writeDefineBits((DefineBitsTag)tag);
break;
case DefineBitsJPEG2:
writeDefineBitsJPEG2((DefineBitsJPEG2Tag)tag);
break;
case DefineBitsJPEG3:
writeDefineBitsJPEG3((DefineBitsJPEG3Tag)tag);
break;
case DefineBitsLossless:
case DefineBitsLossless2:
writeDefineBitsLossless((DefineBitsLosslessTag)tag);
break;
case DefineBinaryData:
writeDefineBinaryData((DefineBinaryDataTag)tag);
break;
case DefineShape:
writeDefineShape((DefineShapeTag)tag);
break;
case DefineShape2:
writeDefineShape2((DefineShape2Tag)tag);
break;
case DefineShape3:
writeDefineShape3((DefineShape3Tag)tag);
break;
case DefineShape4:
writeDefineShape4((DefineShape4Tag)tag);
break;
case DefineSprite:
writeDefineSprite((DefineSpriteTag)tag);
break;
case ExportAssets:
writeExportAssets((ExportAssetsTag)tag);
break;
case DefineScalingGrid:
writeDefineScalingGrid((DefineScalingGridTag)tag);
break;
case DefineFont:
writeDefineFont((DefineFontTag)tag, extraTags);
break;
case DefineFont2:
writeDefineFont2((DefineFont2Tag)tag, extraTags);
break;
case DefineFont3:
writeDefineFont3((DefineFont3Tag)tag, extraTags);
break;
case DefineFont4:
writeDefineFont4((DefineFont4Tag)tag, extraTags);
break;
case DefineFontInfo:
writeDefineFontInfo((IFontInfo)tag);
break;
case DefineFontInfo2:
writeDefineFontInfo2((DefineFontInfo2Tag)tag);
break;
case DefineFontAlignZones:
writeDefineFontAlignZones((DefineFontAlignZonesTag)tag);
break;
case DefineFontName:
writeDefineFontName((DefineFontNameTag)tag);
break;
case DefineText:
writeDefineText((DefineTextTag)tag, extraTags);
break;
case DefineText2:
writeDefineText2((DefineText2Tag)tag, extraTags);
break;
case DefineEditText:
writeDefineEditText((DefineEditTextTag)tag, extraTags);
break;
case DefineSound:
writeDefineSound((DefineSoundTag)tag);
break;
case DefineVideoStream:
writeDefineVideoStream((DefineVideoStreamTag)tag);
break;
case VideoFrame:
writeVideoFrame((VideoFrameTag)tag);
break;
case StartSound:
writeStartSound((StartSoundTag)tag);
break;
case StartSound2:
writeStartSound2((StartSound2Tag)tag);
break;
case SoundStreamHead:
writeSoundStreamHead((SoundStreamHeadTag)tag);
break;
case SoundStreamHead2:
writeSoundStreamHead((SoundStreamHead2Tag)tag);
break;
case SoundStreamBlock:
writeSoundStreamBlock((SoundStreamBlockTag)tag);
break;
case DefineButton:
writeDefineButton((DefineButtonTag)tag);
break;
case DefineButton2:
writeDefineButton2((DefineButton2Tag)tag);
break;
case DefineButtonSound:
writeDefineButtonSound((DefineButtonSoundTag)tag);
break;
case CSMTextSettings:
writeCSMTextSettings((CSMTextSettingsTag)tag);
break;
case End:
writeEnd();
break;
case JPEGTables:
writeJPEGTables(((JPEGTablesTag)tag));
break;
case DefineMorphShape:
writeDefineMorphShape((DefineMorphShapeTag)tag);
break;
case DefineMorphShape2:
writeDefineMorphShape2((DefineMorphShape2Tag)tag);
break;
case PlaceObject:
writePlaceObject((PlaceObjectTag)tag);
break;
case PlaceObject2:
writePlaceObject2((PlaceObject2Tag)tag);
break;
case PlaceObject3:
writePlaceObject3((PlaceObject3Tag)tag);
break;
case RemoveObject:
writeRemoveObject((RemoveObjectTag)tag);
break;
case RemoveObject2:
writeRemoveObject2((RemoveObject2Tag)tag);
break;
case SetTabIndex:
writeSetTabIndex((SetTabIndexTag)tag);
break;
case FrameLabel:
writeFrameLabel((FrameLabelTag)tag);
break;
default:
throw new RuntimeException("Tag not supported: " + tag);
}
}
// reset tag buffer
if (swfTagBuffer != null)
{
this.tagBuffer = swfTagBuffer;
}
if (!skipRawTag)
finishTag(tag, tagData, out);
for (ITag extraTag : extraTags)
writeTag(extraTag);
}