diff --git a/libsrc/ffdec_cli/build.properties b/libsrc/ffdec_cli/build.properties
index 4dfe77317..587a8991a 100644
--- a/libsrc/ffdec_cli/build.properties
+++ b/libsrc/ffdec_cli/build.properties
@@ -34,3 +34,4 @@ main.class = com.jpexs.decompiler.flash.cli.CommandlineInterface
app.dir = ../../dist
app.lib.dir = ../../dist/lib
+ffdec_lib.path = lib/ffdec_lib.jar
\ No newline at end of file
diff --git a/libsrc/ffdec_cli/build.xml b/libsrc/ffdec_cli/build.xml
index 70b463675..0ce93ed56 100644
--- a/libsrc/ffdec_cli/build.xml
+++ b/libsrc/ffdec_cli/build.xml
@@ -137,7 +137,7 @@
-
+
diff --git a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/CommandlineInterface.java b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/CommandlineInterface.java
index cfd6cff59..dfa1aaf4e 100644
--- a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/CommandlineInterface.java
+++ b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/CommandlineInterface.java
@@ -17,6 +17,7 @@
package com.jpexs.decompiler.flash.cli;
import com.jpexs.decompiler.flash.cli.commands.Main;
+import java.net.URLDecoder;
import org.fusesource.jansi.AnsiConsole;
import picocli.CommandLine;
@@ -26,7 +27,26 @@ import picocli.CommandLine;
*/
public class CommandlineInterface {
+ /**
+ * To bypass wrong encoded unicode characters coming from EXE, it Launch5j
+ * encodes characters using URLEncoder.
+ *
+ */
+ private static void decodeLaunch5jArgs(String[] args) {
+ String encargs = System.getProperty("l5j.encargs");
+ if ("true".equals(encargs) || "1".equals(encargs)) {
+ for (int i = 0; i < args.length; ++i) {
+ try {
+ args[i] = URLDecoder.decode(args[i], "UTF-8");
+ } catch (Exception e) {
+ //ignored
+ }
+ }
+ }
+ }
+
public static void main(String[] args) {
+ decodeLaunch5jArgs(args);
AnsiConsole.systemInstall();
int exitCode = new CommandLine(new Main()).execute(args);
AnsiConsole.systemUninstall();
diff --git a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/VersionProvider.java b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/VersionProvider.java
new file mode 100644
index 000000000..53fe60cdf
--- /dev/null
+++ b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/VersionProvider.java
@@ -0,0 +1,15 @@
+package com.jpexs.decompiler.flash.cli;
+
+import com.jpexs.decompiler.flash.ApplicationInfo;
+import picocli.CommandLine;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class VersionProvider implements CommandLine.IVersionProvider {
+ @Override
+ public String[] getVersion() throws Exception {
+ return new String[]{ApplicationInfo.applicationVerName};
+ }
+}
\ No newline at end of file
diff --git a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Export.java b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Export.java
index d1f6db90f..15bb30ee1 100644
--- a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Export.java
+++ b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Export.java
@@ -15,6 +15,7 @@
* along with this program. If not, see .
*/
package com.jpexs.decompiler.flash.cli.commands;
+import com.jpexs.decompiler.flash.cli.VersionProvider;
import com.jpexs.decompiler.flash.cli.commands.types.ConfigConverter;
import com.jpexs.decompiler.flash.cli.commands.types.ExportObject;
import com.jpexs.decompiler.flash.cli.commands.types.ExportObjectFormat;
@@ -36,11 +37,20 @@ import picocli.CommandLine.ParentCommand;
* @author JPEXS
*/
@Command(name = "export",
+ mixinStandardHelpOptions = true,
+ versionProvider = VersionProvider.class,
header = "Export sources to a directory",
//descriptionHeading = "%n@|bold,underline Description|@:%n",
optionListHeading = "%n@|bold,underline Options|@:%n",
parameterListHeading = "%n@|bold,underline Parameters|@:%n",
- synopsisHeading = "@|bold,underline Usage|@:"
+ synopsisHeading = "@|bold,underline Usage|@:",
+ footerHeading = "%n@|bold,underline Examples|@:%n",
+ footer = {
+ "ffdec-cli export --character-id=51,43 shape:png,shape:bmp c:/out/ c:/files/input.swf",
+ "ffdec-cli export --frame=2-10 frame:svg c:/out/ c:/files/input.swf",
+ "ffdec-cli export --embed --class=mypkg.Main,other.+ script c:/out/ c:/files/input.swf",
+ "ffdec-cli export all c:/out/ c:/files/input.swf",
+ }
)
public class Export implements Runnable {
@@ -91,70 +101,39 @@ public class Export implements Runnable {
@Parameters(index = "0",
split = ",",
+ arity = "1",
converter = ExportObjectFormatConverter.class,
paramLabel = "",
- description = {"What objects to export. @|bold Available formats|@:",
- "script:as (default)",
- "script:pcode",
- "script:pcodehex",
- "script:hex",
- "shape:svg (default)",
- "shape:png",
- "shape:canvas",
- "shape:bmp",
- "morphshape:svg (default)",
- "morphshape:canvas",
- "frame:png (default)",
- "frame:gif",
- "frame:avi",
- "frame:svg",
- "frame:canvas",
- "frame:pdf",
- "frame:bmp",
- "sprite:png (default)",
- "sprite:gif",
- "sprite:avi",
- "sprite:svg",
- "sprite:canvas",
- "sprite:pdf",
- "sprite:bmp",
- "button:png (default)",
- "button:svg",
- "button:bmp",
- "image:png_gif_jpeg (default)",
- "image:png",
- "image:jpeg",
- "image:bmp",
- "image:png_gif_jpeg_alpha",
- "text:plain (default)",
- "text:formatted",
- "text:svg",
- "sound:mp3_wav_flv (default)",
- "sound:mp3_wav",
- "sound:wav",
- "sound:flv",
- "font:ttf (default)",
- "font:woff",
- "font4:cff (default)",
- "fla:cs5",
- "fla:cs5.5",
- "fla:cs6",
- "fla:cc",
- "xfl:cs5",
- "xfl:cs5.5",
- "xfl:cs6",
- "xfl:cc",
+ description = {"What objects to export.",
+ "@|bold Available types and formats|@:",
+ "script:as|pcode|pcodehex|hex",
+ "shape:svg|png|canvas|bmp|svg",
+ "morphshape:svg|canvas",
+ "frame:png|gif|avi|svg|canvas|pdf|bmp",
+ "sprite:png|gif|avi|svg|canvas|pdf|bmp",
+ "button:png|svg|bmp",
+ "image:png_gif_jpeg|png|jpeg|bmp|png_gif_jpeg_alpha",
+ "text:plain|formatted|svg",
+ "sound:mp3_wav_flv|mp3_wav|wav|flv",
+ "font:ttf|woff",
+ "font4:cff",
+ "fla:cs5|cs5.5|cs6|cc",
+ "xfl:cs5|cs5.5|cs6|cc",
+ "all (=everything except fla and xfl)"
})
private List objects;
- @Parameters(index = "1", description = "Target directory")
+ @Parameters(index = "1", description = "Target directory", paramLabel = "OUT_DIR")
private String outDirectory;
- @Parameters(index = "2", description = "Input file or directory")
+ @Parameters(index = "2", description = "Input file or directory", paramLabel = "IN_DIR_OR_FILE")
private String inFileOrDirectory;
@Override
public void run() {
System.out.println("exporting...ok");
+ for(String c : classes) {
+ System.out.println("class " + c);
+ }
}
}
diff --git a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Main.java b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Main.java
index b19f74ac9..ebf545569 100644
--- a/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Main.java
+++ b/libsrc/ffdec_cli/src/com/jpexs/decompiler/flash/cli/commands/Main.java
@@ -16,6 +16,7 @@
*/
package com.jpexs.decompiler.flash.cli.commands;
import com.jpexs.decompiler.flash.ApplicationInfo;
+import com.jpexs.decompiler.flash.cli.VersionProvider;
import com.jpexs.decompiler.flash.cli.commands.types.ConfigConverter;
import java.io.File;
import java.util.HashMap;
@@ -43,9 +44,6 @@ import picocli.CommandLine.ScopeType;
optionListHeading = "%n@|bold,underline Options|@:%n",
parameterListHeading = "%n@|bold,underline Parameters|@:%n",
synopsisHeading = "@|bold,underline Usage|@:",
- /*customSynopsis = {" [@|fg(yellow) FILE|@...]",
- " or [@|fg(yellow) -hV|@]",
- " or @|fg(yellow) --cli|@ [COMMAND]"},*/
description = {"JPEXS Free Flash Decompiler commandline interface"},
commandListHeading = "%n@|bold,underline Commands|@:%n"
)
@@ -66,10 +64,3 @@ public class Main {
private File[] files; */
}
-
-class VersionProvider implements IVersionProvider {
- @Override
- public String[] getVersion() throws Exception {
- return new String[]{ApplicationInfo.applicationVerName};
- }
-}
diff --git a/libsrc/ffdec_cli/src/picocli/CommandLine.java b/libsrc/ffdec_cli/src/picocli/CommandLine.java
index 9f4df91a7..8c2cd5bdd 100644
--- a/libsrc/ffdec_cli/src/picocli/CommandLine.java
+++ b/libsrc/ffdec_cli/src/picocli/CommandLine.java
@@ -15872,7 +15872,8 @@ public class CommandLine {
} else {
text = text.concat("[").concat(name).concat(param).concat("]");
if (option.isMultiValue()) { // add ellipsis to show option is repeatable
- if (option.splitRegex().isEmpty() && option.converters().length == 0) { //JPEXS
+ //if (option.splitRegex().isEmpty() && option.converters().length == 0)
+ { //JPEXS
text = text.concat("...");
}
}