#967 Replace DefineText content from CLI

This commit is contained in:
honfika@gmail.com
2015-07-14 21:52:44 +02:00
parent 74c78b4b28
commit c4530dfdd5
3 changed files with 50 additions and 20 deletions

View File

@@ -119,26 +119,33 @@ public class TextImporter {
for (String fileName : files) {
String texts = Helper.readTextFile(Path.combine(textsFolder.getPath(), fileName));
int characterId = Integer.parseInt(fileName.split("\\.")[0]);
String recordSeparator = Helper.newLine + Configuration.textExportSingleFileRecordSeparator.get() + Helper.newLine;
boolean formatted = !texts.contains(recordSeparator) && texts.startsWith("[" + Helper.newLine);
if (!formatted) {
String[] records = texts.split(recordSeparator);
TextTag textTag = swf.getText(characterId);
if (textTag != null) {
String text = textTag.getFormattedText().text;
if (!saveText(textTag, text, records)) {
return;
}
TextTag textTag = swf.getText(characterId);
if (!importText(textTag, texts)) {
return;
}
}
}
public boolean importText(TextTag textTag, String newText) {
String recordSeparator = Helper.newLine + Configuration.textExportSingleFileRecordSeparator.get() + Helper.newLine;
boolean formatted = !newText.contains(recordSeparator) && newText.startsWith("[" + Helper.newLine);
if (!formatted) {
String[] records = newText.split(recordSeparator);
if (textTag != null) {
String text = textTag.getFormattedText().text;
if (!saveText(textTag, text, records)) {
return false;
}
} else {
TextTag textTag = swf.getText(characterId);
if (textTag != null) {
if (!saveText(textTag, texts, null)) {
return;
}
}
} else {
if (textTag != null) {
if (!saveText(textTag, newText, null)) {
return false;
}
}
}
return true;
}
/**

View File

@@ -83,6 +83,7 @@ import com.jpexs.decompiler.flash.importers.BinaryDataImporter;
import com.jpexs.decompiler.flash.importers.ImageImporter;
import com.jpexs.decompiler.flash.importers.ShapeImporter;
import com.jpexs.decompiler.flash.importers.SwfXmlImporter;
import com.jpexs.decompiler.flash.importers.TextImporter;
import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag;
import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag;
@@ -95,8 +96,11 @@ import com.jpexs.decompiler.flash.tags.base.ButtonTag;
import com.jpexs.decompiler.flash.tags.base.CharacterIdTag;
import com.jpexs.decompiler.flash.tags.base.CharacterTag;
import com.jpexs.decompiler.flash.tags.base.ImageTag;
import com.jpexs.decompiler.flash.tags.base.MissingCharacterHandler;
import com.jpexs.decompiler.flash.tags.base.ShapeTag;
import com.jpexs.decompiler.flash.tags.base.SoundTag;
import com.jpexs.decompiler.flash.tags.base.TextImportErrorHandler;
import com.jpexs.decompiler.flash.tags.base.TextTag;
import com.jpexs.decompiler.flash.treeitems.SWFList;
import com.jpexs.decompiler.flash.types.ColorTransform;
import com.jpexs.decompiler.flash.types.RECT;
@@ -107,6 +111,7 @@ import com.jpexs.helpers.CancellableWorker;
import com.jpexs.helpers.Helper;
import com.jpexs.helpers.Path;
import com.jpexs.helpers.streams.SeekableInputStream;
import com.jpexs.helpers.utf8.Utf8Helper;
import com.sun.jna.Platform;
import com.sun.jna.platform.win32.Kernel32;
import gnu.jpdf.PDFJob;
@@ -316,7 +321,7 @@ public class CommandLineArgumentParser {
out.println(" " + (cnt++) + ") -zoom <N>");
out.println(" ...apply zoom during export (currently for FlashPaper conversion only)");
out.println(" " + (cnt++) + ") -replace <infile> <outfile> (<characterId1>|<scriptName1>) <importDataFile1> [methodBodyIndex1] [(<characterId2>|<scriptName2>) <importDataFile2> [methodBodyIndex2]]...");
out.println(" ...replaces the data of the specified BinaryData, Image, DefineSound tag or Script");
out.println(" ...replaces the data of the specified BinaryData, Image, Text, DefineSound tag or Script");
out.println(" ...methodBodyIndexN parameter should be specified if and only if the imported entity is an AS3 P-Code");
out.println(" " + (cnt++) + ") -replaceAlpha <infile> <outfile> <imageId1> <importDataFile1> [<imageId2> <importDataFile2>]...");
out.println(" ...replaces the alpha channel of the specified JPEG3 or JPEG4 tag");
@@ -1788,6 +1793,24 @@ public class CommandLineArgumentParser {
} else if (characterTag instanceof ShapeTag) {
ShapeTag shapeTag = (ShapeTag) characterTag;
new ShapeImporter().importImage(shapeTag, data);
} else if (characterTag instanceof TextTag) {
TextTag textTag = (TextTag) characterTag;
new TextImporter(new MissingCharacterHandler(), new TextImportErrorHandler() {
@Override
public boolean handle(TextTag textTag) {
String msg = "Error during text import.";
logger.log(Level.SEVERE, msg);
return false;
}
@Override
public boolean handle(TextTag textTag, String message, long line) {
String msg = "Error during text import: %text% on line %line%".replace("%text%", message).replace("%line%", Long.toString(line));
logger.log(Level.SEVERE, msg);
return false;
}
}).importText(textTag, new String(data, Utf8Helper.charset));
} else if (characterTag instanceof SoundTag) {
SoundTag st = (SoundTag) characterTag;
int soundFormat = SoundFormat.FORMAT_UNCOMPRESSED_LITTLE_ENDIAN;

View File

@@ -1981,12 +1981,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
private final ConfigurationItem<Boolean> showAgainInvalidText = new ConfigurationItem<>("showAgainInvalidText", true, true);
private String getTextTagInfo(TextTag textTag) {
String ret = "";
StringBuilder ret = new StringBuilder();
if (textTag != null) {
ret += " TextId: " + textTag.getCharacterId() + " (" + String.join(", ", textTag.getTexts()) + ")";
ret.append(" TextId: ").append(textTag.getCharacterId()).append(" (").append(String.join(", ", textTag.getTexts())).append(")");
}
return ret;
return ret.toString();
}
@Override