Added: #2556 CLI subsprite animation export (-sublength <length> option for export)

Added: #2556 Option to select arbitrary frames of sprites export via `-select`.
  Check `--help -select` for details.
This commit is contained in:
Jindra Petřík
2025-11-09 12:20:25 +01:00
parent f04fcb151e
commit 840ae0376e
16 changed files with 669 additions and 26 deletions

View File

@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- AS3 Document class is underlined and has different icon
- [#2556] CLI subsprite animation export (`-sublength <length>` option for export)
- [#2556] Option to select arbitrary frames of sprites export via `-select`.
Check `--help -select` for details.
### Fixed
- [#2536] AS3 switches detection incorrectly replaces basic ifs with strict equals
@@ -4023,6 +4026,7 @@ Major version of SWF to XML export changed to 2.
[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9
[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8
[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7
[#2556]: https://www.free-decompiler.com/flash/issues/2556
[#2536]: https://www.free-decompiler.com/flash/issues/2536
[#2537]: https://www.free-decompiler.com/flash/issues/2537
[#2540]: https://www.free-decompiler.com/flash/issues/2540

View File

@@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>subsprite_anim</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css" media="screen">
html, body { height:100%; background-color: #ffffff;}
body { margin:0; padding:0; overflow:hidden; }
#flashContent { width:100%; height:100%; }
</style>
</head>
<body>
<div id="flashContent">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="subsprite_anim" align="middle">
<param name="movie" value="subsprite_anim.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="play" value="true" />
<param name="loop" value="true" />
<param name="wmode" value="window" />
<param name="scale" value="showall" />
<param name="menu" value="true" />
<param name="devicefont" value="false" />
<param name="salign" value="" />
<param name="allowScriptAccess" value="sameDomain" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="subsprite_anim.swf" width="550" height="400">
<param name="movie" value="subsprite_anim.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="play" value="true" />
<param name="loop" value="true" />
<param name="wmode" value="window" />
<param name="scale" value="showall" />
<param name="menu" value="true" />
<param name="devicefont" value="false" />
<param name="salign" value="" />
<param name="allowScriptAccess" value="sameDomain" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflash">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</body>
</html>

Binary file not shown.

View File

@@ -0,0 +1,33 @@
<DOMDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" currentTimeline="1" xflVersion="2.2" creatorInfo="Adobe Flash Professional CS6" platform="Windows" versionInfo="Saved by Adobe Flash Windows 12.0 build 481" majorVersion="12" buildNumber="481" nextSceneIdentifier="2" playOptionsPlayLoop="false" playOptionsPlayPages="false" playOptionsPlayFrameActions="false">
<symbols>
<Include href="Circle.xml" loadImmediate="false" itemID="69107181-000001da" lastModified="1762685391"/>
<Include href="Square.xml" loadImmediate="false" itemID="6910715a-000001d5" lastModified="1762685274"/>
<Include href="Symbol 1.xml" loadImmediate="false" itemID="691071b7-000001de" lastModified="1762685367"/>
<Include href="Tween 1.xml" itemIcon="1" loadImmediate="false" itemID="691071cf-000001e4" lastModified="1762685391"/>
<Include href="Tween 2.xml" itemIcon="1" loadImmediate="false" itemID="691071cf-000001e6" lastModified="1762685391"/>
</symbols>
<timelines>
<DOMTimeline name="Scene 1" currentFrame="31">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" duration="60" keyMode="9728">
<elements>
<DOMSymbolInstance libraryItemName="Symbol 1" centerPoint3DX="242.2" centerPoint3DY="156.75">
<matrix>
<Matrix tx="133" ty="89"/>
</matrix>
<transformationPoint>
<Point x="109.2" y="67.75"/>
</transformationPoint>
</DOMSymbolInstance>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timelines>
<PrinterSettings/>
<publishHistory/>
</DOMDocument>

View File

@@ -0,0 +1,36 @@
<DOMSymbolItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" name="Circle" itemID="69107181-000001da" lastModified="1762685391">
<timeline>
<DOMTimeline name="Circle" currentFrame="29">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" duration="29" tweenType="motion" motionTweenSnap="true" keyMode="22017">
<elements>
<DOMSymbolInstance libraryItemName="Tween 1" selected="true" symbolType="graphic" loop="loop">
<matrix>
<Matrix tx="41.25" ty="41.25"/>
</matrix>
<transformationPoint>
<Point/>
</transformationPoint>
</DOMSymbolInstance>
</elements>
</DOMFrame>
<DOMFrame index="29" keyMode="9728">
<elements>
<DOMSymbolInstance libraryItemName="Tween 2" symbolType="graphic" loop="loop">
<matrix>
<Matrix tx="-106.7" ty="118.25"/>
</matrix>
<transformationPoint>
<Point/>
</transformationPoint>
</DOMSymbolInstance>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timeline>
</DOMSymbolItem>

View File

@@ -0,0 +1,35 @@
<DOMSymbolItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" name="Square" itemID="6910715a-000001d5" lastModified="1762685274">
<timeline>
<DOMTimeline name="Square">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" keyMode="9728">
<elements>
<DOMShape>
<fills>
<FillStyle index="1">
<SolidColor color="#00FF00" alpha="0.498039215686275"/>
</FillStyle>
</fills>
<strokes>
<StrokeStyle index="1">
<SolidStroke scaleMode="normal">
<fill>
<SolidColor/>
</fill>
</SolidStroke>
</StrokeStyle>
</strokes>
<edges>
<Edge fillStyle1="1" strokeStyle="1" edges="!1649 1649S6|0 1649!0 1649|0 0!0 0|1649 0!1649 0|1649 1649"/>
</edges>
</DOMShape>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timeline>
</DOMSymbolItem>

View File

@@ -0,0 +1,29 @@
<DOMSymbolItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" name="Symbol 1" itemID="691071b7-000001de" lastModified="1762685367" lastUniqueIdentifier="2">
<timeline>
<DOMTimeline name="Symbol 1">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" keyMode="9728">
<elements>
<DOMSymbolInstance libraryItemName="Square" centerPoint3DX="41.2" centerPoint3DY="41.2">
<transformationPoint>
<Point x="41.2" y="41.2"/>
</transformationPoint>
</DOMSymbolInstance>
<DOMSymbolInstance libraryItemName="Circle" centerPoint3DX="177.2" centerPoint3DY="94.25">
<matrix>
<Matrix tx="135.95" ty="53"/>
</matrix>
<transformationPoint>
<Point x="41.25" y="41.25"/>
</transformationPoint>
</DOMSymbolInstance>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timeline>
</DOMSymbolItem>

View File

@@ -0,0 +1,38 @@
<DOMSymbolItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" name="Tween 1" itemID="691071cf-000001e4" symbolType="graphic" lastModified="1762685391">
<timeline>
<DOMTimeline name="Tween 1">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" keyMode="9728">
<elements>
<DOMShape selected="true" isFloating="true">
<matrix>
<Matrix tx="-41.25" ty="-41.25"/>
</matrix>
<fills>
<FillStyle index="1">
<SolidColor color="#FF0000"/>
</FillStyle>
</fills>
<strokes>
<StrokeStyle index="1">
<SolidStroke scaleMode="normal">
<fill>
<SolidColor/>
</fill>
</SolidStroke>
</StrokeStyle>
</strokes>
<edges>
<Edge fillStyle1="1" strokeStyle="1" edges="!1408 241S6[1650 483 1650 825!1650 825[1650 1167 1408 1408!1408 1408[1167 1650 825 1650!825 1650[483 1650 241 1408!241 1408[0 1167 0 825!0 825[0 483 241 241!241 241[483 0 825 0!825 0[1167 0 1408 241"/>
</edges>
</DOMShape>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timeline>
</DOMSymbolItem>

View File

@@ -0,0 +1,39 @@
<DOMSymbolItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" name="Tween 2" itemID="691071cf-000001e6" symbolType="graphic" lastModified="1762685391">
<timeline>
<DOMTimeline name="Tween 2">
<layers>
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
<frames>
<DOMFrame index="0" keyMode="9728">
<elements>
<DOMShape selected="true" isFloating="true">
<matrix>
<Matrix tx="106.7" ty="-118.25"/>
</matrix>
<fills>
<FillStyle index="1">
<SolidColor color="#FF0000"/>
</FillStyle>
</fills>
<strokes>
<StrokeStyle index="1">
<SolidStroke scaleMode="normal">
<fill>
<SolidColor/>
</fill>
</SolidStroke>
</StrokeStyle>
</strokes>
<edges>
<Edge fillStyle1="1" strokeStyle="1" edges="!-2134 1540S6[-1792 1540 -1551 1781!-1551 1781[-1309 2023 -1309 2365!-1309 2365[-1309 2707 -1551 2948!-1551 2948[-1792 3190 -2134 3190!-2134 3190[-2476 3190 -2718 2948!-2718 2948[-2959 2707 -2959 2365!-2959 2365[-2959 2023 -2718 1781
!-2718 1781[-2476 1540 -2134 1540"/>
</edges>
</DOMShape>
</elements>
</DOMFrame>
</frames>
</DOMLayer>
</layers>
</DOMTimeline>
</timeline>
</DOMSymbolItem>

View File

@@ -0,0 +1,55 @@
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/">
<xmp:CreatorTool>Adobe Flash Professional CS6 - build 481</xmp:CreatorTool>
<xmp:CreateDate>2025-11-09T02:47:30-08:00</xmp:CreateDate>
<xmp:MetadataDate>2025-11-09T02:50:37-08:00</xmp:MetadataDate>
<xmp:ModifyDate>2025-11-09T02:50:37-08:00</xmp:ModifyDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>application/vnd.adobe.fla</dc:format>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
<xmpMM:InstanceID>xmp.iid:5B3CCAEC59BDF0118295F1B0A0E387A5</xmpMM:InstanceID>
<xmpMM:DocumentID>xmp.did:5B3CCAEC59BDF0118295F1B0A0E387A5</xmpMM:DocumentID>
<xmpMM:OriginalDocumentID>xmp.did:5B3CCAEC59BDF0118295F1B0A0E387A5</xmpMM:OriginalDocumentID>
<xmpMM:History>
<rdf:Seq>
<rdf:li rdf:parseType="Resource">
<stEvt:action>created</stEvt:action>
<stEvt:instanceID>xmp.iid:5B3CCAEC59BDF0118295F1B0A0E387A5</stEvt:instanceID>
<stEvt:when>2025-11-09T02:47:30-08:00</stEvt:when>
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
</rdf:li>
</rdf:Seq>
</xmpMM:History>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

View File

@@ -0,0 +1,206 @@
<flash_profiles>
<flash_profile version="1.0" name="Default" current="true">
<PublishFormatProperties enabled="true">
<defaultNames>1</defaultNames>
<flash>1</flash>
<projectorWin>0</projectorWin>
<projectorMac>0</projectorMac>
<html>1</html>
<gif>0</gif>
<jpeg>0</jpeg>
<png>0</png>
<qt>0</qt>
<rnwk>0</rnwk>
<swc>0</swc>
<flashDefaultName>1</flashDefaultName>
<projectorWinDefaultName>1</projectorWinDefaultName>
<projectorMacDefaultName>1</projectorMacDefaultName>
<htmlDefaultName>1</htmlDefaultName>
<gifDefaultName>1</gifDefaultName>
<jpegDefaultName>1</jpegDefaultName>
<pngDefaultName>1</pngDefaultName>
<qtDefaultName>1</qtDefaultName>
<rnwkDefaultName>1</rnwkDefaultName>
<swcDefaultName>1</swcDefaultName>
<flashFileName>Untitled-1.swf</flashFileName>
<projectorWinFileName>Untitled-1.exe</projectorWinFileName>
<projectorMacFileName>Untitled-1.app</projectorMacFileName>
<htmlFileName>Untitled-1.html</htmlFileName>
<gifFileName>Untitled-1.gif</gifFileName>
<jpegFileName>Untitled-1.jpg</jpegFileName>
<pngFileName>Untitled-1.png</pngFileName>
<qtFileName>Untitled-1.mov</qtFileName>
<rnwkFileName>Untitled-1.smil</rnwkFileName>
<swcFileName>Untitled-1.swc</swcFileName>
</PublishFormatProperties>
<PublishHtmlProperties enabled="true">
<VersionDetectionIfAvailable>0</VersionDetectionIfAvailable>
<VersionInfo>12,0,0,0;11,2,0,0;11,1,0,0;10,3,0,0;10,2,153,0;10,1,52,0;9,0,124,0;8,0,24,0;7,0,14,0;6,0,79,0;5,0,58,0;4,0,32,0;3,0,8,0;2,0,1,12;1,0,0,1;</VersionInfo>
<UsingDefaultContentFilename>1</UsingDefaultContentFilename>
<UsingDefaultAlternateFilename>1</UsingDefaultAlternateFilename>
<ContentFilename>Untitled-1_content.html</ContentFilename>
<AlternateFilename>Untitled-1_alternate.html</AlternateFilename>
<UsingOwnAlternateFile>0</UsingOwnAlternateFile>
<OwnAlternateFilename></OwnAlternateFilename>
<Width>550</Width>
<Height>400</Height>
<Align>0</Align>
<Units>0</Units>
<Loop>1</Loop>
<StartPaused>0</StartPaused>
<Scale>0</Scale>
<HorizontalAlignment>1</HorizontalAlignment>
<VerticalAlignment>1</VerticalAlignment>
<Quality>4</Quality>
<DeblockingFilter>0</DeblockingFilter>
<WindowMode>0</WindowMode>
<DisplayMenu>1</DisplayMenu>
<DeviceFont>0</DeviceFont>
<TemplateFileName>C:\Users\MyUser\AppData\Local\Adobe\Flash CS6\en_US\Configuration\HTML\Default.html</TemplateFileName>
<showTagWarnMsg>1</showTagWarnMsg>
</PublishHtmlProperties>
<PublishFlashProperties enabled="true">
<TopDown></TopDown>
<FireFox></FireFox>
<Report>0</Report>
<Protect>0</Protect>
<OmitTraceActions>0</OmitTraceActions>
<Quality>80</Quality>
<DeblockingFilter>0</DeblockingFilter>
<StreamFormat>0</StreamFormat>
<StreamCompress>7</StreamCompress>
<EventFormat>0</EventFormat>
<EventCompress>7</EventCompress>
<OverrideSounds>0</OverrideSounds>
<Version>15</Version>
<ExternalPlayer>FlashPlayer11.2</ExternalPlayer>
<ActionScriptVersion>3</ActionScriptVersion>
<PackageExportFrame>1</PackageExportFrame>
<PackagePaths></PackagePaths>
<AS3PackagePaths>.</AS3PackagePaths>
<AS3ConfigConst>CONFIG::FLASH_AUTHORING=&quot;true&quot;;</AS3ConfigConst>
<DebuggingPermitted>0</DebuggingPermitted>
<DebuggingPassword></DebuggingPassword>
<CompressMovie>1</CompressMovie>
<CompressionType>0</CompressionType>
<InvisibleLayer>1</InvisibleLayer>
<DeviceSound>0</DeviceSound>
<StreamUse8kSampleRate>0</StreamUse8kSampleRate>
<EventUse8kSampleRate>0</EventUse8kSampleRate>
<UseNetwork>0</UseNetwork>
<DocumentClass></DocumentClass>
<AS3Strict>2</AS3Strict>
<AS3Coach>4</AS3Coach>
<AS3AutoDeclare>4096</AS3AutoDeclare>
<AS3Dialect>AS3</AS3Dialect>
<AS3ExportFrame>1</AS3ExportFrame>
<AS3Optimize>1</AS3Optimize>
<ExportSwc>0</ExportSwc>
<ScriptStuckDelay>15</ScriptStuckDelay>
<IncludeXMP>1</IncludeXMP>
<HardwareAcceleration>0</HardwareAcceleration>
<AS3Flags>4102</AS3Flags>
<DefaultLibraryLinkage>rsl</DefaultLibraryLinkage>
<RSLPreloaderMethod>wrap</RSLPreloaderMethod>
<RSLPreloaderSWF>$(AppConfig)/ActionScript 3.0/rsls/loader_animation.swf</RSLPreloaderSWF>
<LibraryPath>
<library-path-entry>
<swc-path>$(AppConfig)/ActionScript 3.0/libs</swc-path>
<linkage>merge</linkage>
</library-path-entry>
<library-path-entry>
<swc-path>$(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc</swc-path>
<linkage usesDefault="true">rsl</linkage>
<rsl-url>http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz</rsl-url>
<policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
<rsl-url>textLayout_2.0.0.232.swz</rsl-url>
</library-path-entry>
</LibraryPath>
<LibraryVersions>
<library-version>
<swc-path>$(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc</swc-path>
<feature name="tlfText" majorVersion="2" minorVersion="0" build="232"/>
<rsl-url>http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz</rsl-url>
<policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
<rsl-url>textLayout_2.0.0.232.swz</rsl-url>
</library-version>
</LibraryVersions>
</PublishFlashProperties>
<PublishJpegProperties enabled="true">
<Width>550</Width>
<Height>400</Height>
<Progressive>0</Progressive>
<DPI>4718592</DPI>
<Size>0</Size>
<Quality>80</Quality>
<MatchMovieDim>1</MatchMovieDim>
</PublishJpegProperties>
<PublishRNWKProperties enabled="true">
<exportFlash>1</exportFlash>
<flashBitRate>0</flashBitRate>
<exportAudio>1</exportAudio>
<audioFormat>0</audioFormat>
<singleRateAudio>0</singleRateAudio>
<realVideoRate>100000</realVideoRate>
<speed28K>1</speed28K>
<speed56K>1</speed56K>
<speedSingleISDN>0</speedSingleISDN>
<speedDualISDN>0</speedDualISDN>
<speedCorporateLAN>0</speedCorporateLAN>
<speed256K>0</speed256K>
<speed384K>0</speed384K>
<speed512K>0</speed512K>
<exportSMIL>1</exportSMIL>
</PublishRNWKProperties>
<PublishGifProperties enabled="true">
<Width>550</Width>
<Height>400</Height>
<Animated>0</Animated>
<MatchMovieDim>1</MatchMovieDim>
<Loop>1</Loop>
<LoopCount></LoopCount>
<OptimizeColors>1</OptimizeColors>
<Interlace>0</Interlace>
<Smooth>1</Smooth>
<DitherSolids>0</DitherSolids>
<RemoveGradients>0</RemoveGradients>
<TransparentOption></TransparentOption>
<TransparentAlpha>128</TransparentAlpha>
<DitherOption></DitherOption>
<PaletteOption></PaletteOption>
<MaxColors>255</MaxColors>
<PaletteName></PaletteName>
</PublishGifProperties>
<PublishPNGProperties enabled="true">
<Width>550</Width>
<Height>400</Height>
<OptimizeColors>1</OptimizeColors>
<Interlace>0</Interlace>
<Transparent>0</Transparent>
<Smooth>1</Smooth>
<DitherSolids>0</DitherSolids>
<RemoveGradients>0</RemoveGradients>
<MatchMovieDim>1</MatchMovieDim>
<DitherOption></DitherOption>
<FilterOption></FilterOption>
<PaletteOption></PaletteOption>
<BitDepth>24-bit with Alpha</BitDepth>
<MaxColors>255</MaxColors>
<PaletteName></PaletteName>
</PublishPNGProperties>
<PublishQTProperties enabled="true">
<Width>550</Width>
<Height>400</Height>
<MatchMovieDim>1</MatchMovieDim>
<UseQTSoundCompression>0</UseQTSoundCompression>
<AlphaOption></AlphaOption>
<LayerOption></LayerOption>
<QTSndSettings>00000000</QTSndSettings>
<ControllerOption>0</ControllerOption>
<Looping>0</Looping>
<PausedAtStart>0</PausedAtStart>
<PlayEveryFrame>0</PlayEveryFrame>
<Flatten>1</Flatten>
</PublishQTProperties>
</flash_profile>
</flash_profiles>

View File

@@ -0,0 +1 @@
PROXY-CS5

View File

@@ -517,6 +517,7 @@ public class CommandLineArgumentParser {
List<String> selectionClasses = null;
String nextParam = null;
String nextParamOriginal = null;
int subLength = 1;
OUTER:
while (true) {
nextParamOriginal = args.pop();
@@ -534,14 +535,17 @@ public class CommandLineArgumentParser {
cliMode = true;
break;
case "-selectid":
selectionIds = parseSelect(args);
selectionIds = parseSelect(args, false, "selectid");
break;
case "-select":
selection = parseSelect(args);
selection = parseSelect(args, true, "select");
break;
case "-selectclass":
selectionClasses = parseSelectClass(args);
break;
case "-sublength":
subLength = parseSubLength(args);
break;
case "-exportembed":
exportEmbed = true;
break;
@@ -677,7 +681,7 @@ public class CommandLineArgumentParser {
} else if (command.equals("proxy")) {
parseProxy(args);
} else if (command.equals("export")) {
parseExport(selectionClasses, selection, selectionIds, args, handler, traceLevel, format, zoom, charset, exportEmbed, resampleWav, transparentBackground, urlResolver);
parseExport(selectionClasses, selection, selectionIds, args, handler, traceLevel, format, zoom, charset, exportEmbed, resampleWav, transparentBackground, urlResolver, subLength);
System.exit(0);
} else if (command.equals("compress")) {
parseCompress(args);
@@ -1584,16 +1588,29 @@ public class CommandLineArgumentParser {
private static class Range {
public Integer prefix;
public Integer min;
public Integer max;
public Range(Integer min, Integer max) {
public Range(Integer prefix, Integer min, Integer max) {
this.prefix = prefix;
this.min = min;
this.max = max;
}
public boolean contains(int index) {
return contains(0, index);
}
public boolean contains(int prefix, int index) {
if (this.prefix == null && prefix == 0) {
return false;
}
if (this.prefix != null && this.prefix != prefix) {
return false;
}
int minimum = min == null ? Integer.MIN_VALUE : min;
int maximum = max == null ? Integer.MAX_VALUE : max;
@@ -1607,7 +1624,7 @@ public class CommandLineArgumentParser {
public Selection() {
this.ranges = new ArrayList<>();
this.ranges.add(new Range(null, null));
this.ranges.add(new Range(0, null, null));
}
public Selection(List<Range> ranges) {
@@ -1615,36 +1632,76 @@ public class CommandLineArgumentParser {
}
public boolean contains(int index) {
return contains(0, index);
}
public boolean contains(int prefix, int index) {
boolean prefixFound = false;
for (Range r : ranges) {
if (r.contains(index)) {
if (r.prefix == prefix || (prefix != 0 && r.prefix == null)) {
prefixFound = true;
}
if (r.contains(prefix, index)) {
return true;
}
}
if (!prefixFound) {
return true;
}
return false;
}
}
private static Selection parseSelect(Stack<String> args) {
private static Selection parseSelect(Stack<String> args, boolean allowPrefix, String command) {
List<Range> ret = new ArrayList<>();
if (args.isEmpty()) {
System.err.println("range parameter expected");
badArguments("select");
badArguments(command);
}
String range = args.pop();
String[] ranges;
if (range.contains(",")) {
ranges = range.split(",");
ranges = range.split(",", -1);
} else {
ranges = new String[]{range};
}
Integer prefix = 0;
for (String r : ranges) {
Integer min = null;
Integer max = null;
if (r.contains("-")) {
String[] ps = r.split("\\-");
if (r.contains(":")) {
if (!allowPrefix) {
System.err.println("invalid range");
badArguments(command);
}
String[] ps = r.split(":", -1);
if (ps.length != 2) {
System.err.println("invalid range");
badArguments("select");
badArguments(command);
}
if ("all".equals(ps[0])) {
prefix = null;
} else {
try {
prefix = Integer.parseInt(ps[0]);
} catch (NumberFormatException nfe) {
System.err.println("invalid range");
badArguments(command);
}
if (prefix < 0) {
System.err.println("invalid range");
badArguments(command);
}
}
r = ps[1];
}
if (r.contains("-")) {
String[] ps = r.split("\\-", -1);
if (ps.length != 2) {
System.err.println("invalid range");
badArguments(command);
}
try {
if (!"".equals(ps[0])) {
@@ -1655,7 +1712,7 @@ public class CommandLineArgumentParser {
}
} catch (NumberFormatException nfe) {
System.err.println("invalid range");
badArguments("select");
badArguments(command);
}
} else {
try {
@@ -1663,13 +1720,33 @@ public class CommandLineArgumentParser {
max = min;
} catch (NumberFormatException nfe) {
System.err.println("invalid range");
badArguments("select");
badArguments(command);
}
}
ret.add(new Range(min, max));
ret.add(new Range(prefix, min, max));
}
return new Selection(ret);
}
private static int parseSubLength(Stack<String> args) {
if (args.isEmpty()) {
System.err.println("sub length parameter expected");
badArguments("sublength");
}
try {
int subLen = Integer.parseInt(args.pop());
if (subLen < 1) {
System.err.println("Minimum for sub length is 1");
badArguments("sublength");
subLen = 1;
}
return subLen;
} catch (NumberFormatException nre) {
System.err.println("Invalid sub length");
badArguments("sublength");
}
return 1;
}
private static double parseZoom(Stack<String> args) {
if (args.isEmpty()) {
@@ -2033,7 +2110,21 @@ public class CommandLineArgumentParser {
}
private static void parseExport(List<String> selectionClasses, Selection selection, Selection selectionIds, Stack<String> args, AbortRetryIgnoreHandler handler, Level traceLevel, Map<String, String> formats, double zoom, String charset, boolean exportEmbed, boolean resampleWav, boolean transparentBackground, UrlResolver urlResolver) {
private static void parseExport(
List<String> selectionClasses,
Selection selection,
Selection selectionIds,
Stack<String> args,
AbortRetryIgnoreHandler handler,
Level traceLevel,
Map<String, String> formats,
double zoom,
String charset,
boolean exportEmbed,
boolean resampleWav,
boolean transparentBackground,
UrlResolver urlResolver,
int subFrameLength) {
if (args.size() < 3) {
badArguments("export");
}
@@ -2258,20 +2349,27 @@ public class CommandLineArgumentParser {
System.out.println("Exporting frames...");
List<Integer> frames = new ArrayList<>();
for (int i = 0; i < swf.frameCount; i++) {
if (selection.contains(i + 1)) {
if (selection.contains(0, i + 1)) {
frames.add(i);
}
}
FrameExportSettings fes = new FrameExportSettings(enumFromStr(formats.get("frame"), FrameExportMode.class), zoom, transparentBackground);
frameExporter.exportFrames(handler, outDir + (multipleExportTypes ? File.separator + FrameExportSettings.EXPORT_FOLDER_NAME : ""), swf, 0, frames, 1, fes, evl);
frameExporter.exportFrames(handler, outDir + (multipleExportTypes ? File.separator + FrameExportSettings.EXPORT_FOLDER_NAME : ""), swf, 0, frames, subFrameLength, fes, evl);
}
if (exportAll || exportFormats.contains("sprite")) {
System.out.println("Exporting sprite...");
SpriteExportSettings ses = new SpriteExportSettings(enumFromStr(formats.get("sprite"), SpriteExportMode.class), zoom);
for (Tag t : extags) {
if (t instanceof DefineSpriteTag) {
frameExporter.exportSpriteFrames(handler, outDir + (multipleExportTypes ? File.separator + SpriteExportSettings.EXPORT_FOLDER_NAME : ""), swf, ((DefineSpriteTag) t).getCharacterId(), null, 1, ses, evl);
if (t instanceof DefineSpriteTag) {
List<Integer> frames = new ArrayList<>();
int spriteId = ((DefineSpriteTag) t).getCharacterId();
for (int i = 0; i < ((DefineSpriteTag) t).getFrameCount(); i++) {
if (selection.contains(spriteId, i + 1)) {
frames.add(i);
}
}
frameExporter.exportSpriteFrames(handler, outDir + (multipleExportTypes ? File.separator + SpriteExportSettings.EXPORT_FOLDER_NAME : ""), swf, spriteId, frames, subFrameLength, ses, evl);
}
}
}

View File

@@ -378,15 +378,30 @@ Pre-options:
-select <ranges>
Applies to: -export
Select frames/pages for export.
Comma separated ranges in format <min>-<max> (<max> is optional) or <num>.
If it has prefix "<characterId>:" then all following ranges apply
to the character with specific id.
Use "all" as characterId to apply for every character.
Use "0" (default) as characterId to apply for main timeline.
Example <ranges> formats:
1-5
2,3
2-5,7,9-
DO NOT PUT space between comma (,) and next ramge.
1-5 ... exports frames 1,2,3,4,5
2,3 ... exports frames 2 and 3
2-5,7,9- ... exports frames 2,3,4,5,7,9 and all after
57:5-10,12,62:5 ... exports frames 5,6,7,8,9,10,12
of character 57 and frame 5 of character 62
all:12-29 ... exports frames 12 to 29 of all characters
12:3,4,0:1-12 ... exports frames 3 and 4 of character 12
and first 12 frames of main timeline
DO NOT PUT space between comma (,) and next range.
-selectid <ranges>
-selectid <charRanges>
Applies to: -export
Select characters for export by character id.
<ranges> format is same as in -select
Comma separated ranges in format <min>-<max> (<max> is optional) or <characterId>.
Example <charRanges> formats:
1-5 ... exports characters 1,2,3,4,5
2,3 ... exports characters 2 and 3
2-5,7,9- ... exports characters 2,3,4,5,7,9 and all ids after
-selectclass <classnames>
Applies to: -export
@@ -398,6 +413,11 @@ Pre-options:
subpackages, class net.company.MyClass)
DO NOT PUT space between comma (,) and next class.
-sublength <length>
Applies to: -export
Export subsprite animation of length <length>.
<length> is measured in number of subframes. Must be >= 1.
-exportembed
Applies to: -export
Allow exporting embedded assets via [Embed tag].