From bb55292aad7929aadecf068bd3a72da0c26d5ddc Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 21 Jul 2015 22:18:22 +0200 Subject: [PATCH] pack and sort character id func moved to library --- .../src/com/jpexs/decompiler/flash/SWF.java | 37 +++++++++++++++++++ .../console/CommandLineArgumentParser.java | 33 +---------------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index fe92b08d1..a1470a1c0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -2885,6 +2885,43 @@ public final class SWF implements SWFContainerItem, Timelined { } } + public void packCharacterIds() { + int maxId = getNextCharacterId(); + int id = 1; + for (int i = 1; i < maxId; i++) { + CharacterTag charactertag = getCharacter(i); + if (charactertag != null) { + if (i != id) { + replaceCharacter(i, id); + } + id++; + } else { + // make sure that the id is not referenced in the tags + replaceCharacter(i, 0); + } + } + } + + public void sortCharacterIds() { + int maxId = Math.max(tags.size(), getNextCharacterId()); + int id = maxId; + // first set the chatacter ids to surely not used ids + for (Tag tag : tags) { + if (tag instanceof CharacterTag) { + CharacterTag characterTag = (CharacterTag) tag; + replaceCharacter(characterTag.getCharacterId(), id++); + } + } + // then set them to 1,2,3... + id = 1; + for (Tag tag : tags) { + if (tag instanceof CharacterTag) { + CharacterTag characterTag = (CharacterTag) tag; + replaceCharacter(characterTag.getCharacterId(), id++); + } + } + } + public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { boolean modified = false; for (Tag tag : tags) { diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index b958e36ec..e7ee7bd08 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -2172,38 +2172,9 @@ public class CommandLineArgumentParser { SWF swf = new SWF(is, Configuration.parallelSpeedUp.get()); String arg = args.pop().toLowerCase(); if (arg.equals("pack")) { - int maxId = swf.getNextCharacterId(); - int id = 1; - for (int i = 1; i < maxId; i += 2) { - CharacterTag charactertag = swf.getCharacter(i); - if (charactertag != null) { - if (i != id) { - swf.replaceCharacter(i, id); - } - id++; - } else { - // make sure that the id is not referenced in the tags - swf.replaceCharacter(i, 0); - } - } + swf.packCharacterIds(); } else if (arg.equals("sort")) { - int maxId = Math.max(swf.tags.size(), swf.getNextCharacterId()); - int id = maxId; - // first set the chatacter ids to surely not used ids - for (Tag tag : swf.tags) { - if (tag instanceof CharacterTag) { - CharacterTag characterTag = (CharacterTag) tag; - swf.replaceCharacter(characterTag.getCharacterId(), id++); - } - } - // then set them to 1,2,3... - id = 1; - for (Tag tag : swf.tags) { - if (tag instanceof CharacterTag) { - CharacterTag characterTag = (CharacterTag) tag; - swf.replaceCharacter(characterTag.getCharacterId(), id++); - } - } + swf.sortCharacterIds(); } else { String[] characterIdsStr = arg.split(","); if (characterIdsStr.length % 2 != 0) {