New tags,

Other code: organize imports
This commit is contained in:
Jindra Petk
2013-01-04 17:12:27 +01:00
parent b1ab3ca35b
commit 644110dd40
101 changed files with 4051 additions and 299 deletions

View File

@@ -523,7 +523,7 @@ public class Main {
System.err.println("FAIL");
}
} else if (args[pos].equals("-decompress")) {
if (args.length < pos+3) {
if (args.length < pos + 3) {
badArguments();
}
@@ -535,7 +535,7 @@ public class Main {
System.exit(1);
}
} else if (args[pos].equals("-dumpSWF")) {
if (args.length < pos+2) {
if (args.length < pos + 2) {
badArguments();
}
try {

View File

@@ -19,9 +19,9 @@ package com.jpexs.asdec;
import SevenZip.Compression.LZMA.Encoder;
import com.jpexs.asdec.action.TagNode;
import com.jpexs.asdec.helpers.Highlighting;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.DoABCTag;
import com.jpexs.asdec.tags.Tag;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.types.RECT;
import java.io.*;
@@ -287,8 +287,7 @@ public class SWF {
}
return true;
}
/**
* Decompress LZMA compressed SWF file
*
@@ -298,40 +297,40 @@ public class SWF {
public static boolean zws2fws(InputStream fis, OutputStream fos) {
try {
byte hdr[] = new byte[3];
fis.read(hdr);
String shdr = new String(hdr);
if (!shdr.equals("ZWS")) {
return false;
}
int version = fis.read();
SWFInputStream sis = new SWFInputStream(fis, version, 4);
long fileSize = sis.readUI32();
fis.read(hdr);
String shdr = new String(hdr);
if (!shdr.equals("ZWS")) {
return false;
}
int version = fis.read();
SWFInputStream sis = new SWFInputStream(fis, version, 4);
long fileSize = sis.readUI32();
if (hdr[0] == 'Z') {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
long outSize = sis.readUI32();
int propertiesSize = 5;
byte lzmaProperties[] = new byte[propertiesSize];
if (sis.read(lzmaProperties, 0, propertiesSize) != propertiesSize) {
throw new IOException("LZMA:input .lzma file is too short");
}
SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
if (!decoder.SetDecoderProperties(lzmaProperties)) {
throw new IOException("LZMA:Incorrect stream properties");
}
if (hdr[0] == 'Z') {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
long outSize = sis.readUI32();
int propertiesSize = 5;
byte lzmaProperties[] = new byte[propertiesSize];
if (sis.read(lzmaProperties, 0, propertiesSize) != propertiesSize) {
throw new IOException("LZMA:input .lzma file is too short");
}
SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
if (!decoder.SetDecoderProperties(lzmaProperties)) {
throw new IOException("LZMA:Incorrect stream properties");
}
if (!decoder.Code(sis, baos, fileSize - 8)) {
throw new IOException("LZMA:Error in data stream");
if (!decoder.Code(sis, baos, fileSize - 8)) {
throw new IOException("LZMA:Error in data stream");
}
SWFOutputStream sos = new SWFOutputStream(fos, version);
sos.write("FWS".getBytes());
sos.write(version);
sos.writeUI32(fileSize);
sos.write(baos.toByteArray());
sos.close();
} else {
return false;
}
SWFOutputStream sos=new SWFOutputStream(fos,version);
sos.write("FWS".getBytes());
sos.write(version);
sos.writeUI32(fileSize);
sos.write(baos.toByteArray());
sos.close();
}else{
return false;
}
} catch (FileNotFoundException ex) {
return false;
} catch (IOException ex) {

View File

@@ -38,6 +38,7 @@ import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.logging.Logger;
/**
* Class for reading data from SWF file
@@ -50,6 +51,7 @@ public class SWFInputStream extends InputStream {
private Stack<Integer> margedPos = new Stack<Integer>();
private long pos;
private int version;
private static final Logger log = Logger.getLogger(SWFInputStream.class.getName());
/**
* Constructor
@@ -405,6 +407,7 @@ public class SWFInputStream extends InputStream {
ret.Xmax = (int) readSB(NBits);
ret.Ymin = (int) readSB(NBits);
ret.Ymax = (int) readSB(NBits);
alignByte();
return ret;
}
@@ -511,7 +514,7 @@ public class SWFInputStream extends InputStream {
break;
case 8:
ret = new JPEGTablesTag(data, pos);
break;
break;
case 9:
ret = new SetBackgroundColorTag(data, pos);
break;
@@ -525,23 +528,23 @@ public class SWFInputStream extends InputStream {
ret = new DoActionTag(data, version, pos);
break;
case 13:
ret = new NotDefinedTag("DefineFontInfo",13,data,pos);
ret = new DefineFontInfoTag(data, version, pos);
break;
case 14:
ret = new NotDefinedTag("DefineSound",14,data,pos);
ret = new DefineSoundTag(data, version, pos);
break;
case 15:
ret = new NotDefinedTag("StartSound",15,data,pos);
ret = new StartSoundTag(data, version, pos);
break;
//case 16
case 17:
ret = new NotDefinedTag("DefineButtonSound",17,data,pos);
ret = new DefineButtonSoundTag(data, version, pos);
break;
case 18:
ret = new NotDefinedTag("SoundStreamHead",18,data,pos);
ret = new SoundStreamHeadTag(data, version, pos);
break;
case 19:
ret = new NotDefinedTag("SoundStreamBlock",19,data,pos);
ret = new SoundStreamBlockTag(data, version, pos);
break;
case 21:
ret = new DefineBitsJPEG2Tag(data, version, pos);
@@ -553,8 +556,8 @@ public class SWFInputStream extends InputStream {
ret = new DefineShape2Tag(data, version, pos);
break;
case 23:
ret = new NotDefinedTag("DefineButtonCxform",23,data,pos);
break;
ret = new DefineButtonCxform(data, version, pos);
break;
case 24:
ret = new ProtectTag(data, version, pos);
break;
@@ -573,8 +576,8 @@ public class SWFInputStream extends InputStream {
ret = new DefineShape3Tag(data, version, pos);
break;
case 33:
ret = new NotDefinedTag("DefineText2",33,data,pos);
break;
ret = new DefineText2Tag(data, version, pos);
break;
case 34:
ret = new DefineButton2Tag(data, version, pos);
break;
@@ -585,8 +588,8 @@ public class SWFInputStream extends InputStream {
ret = new DefineBitsLossless2Tag(data, version, pos);
break;
case 37:
ret = new NotDefinedTag("DefineEditText",37,data,pos);
break;
ret = new DefineEditTextTag(data, version, pos);
break;
//case 38:
case 39:
ret = new DefineSpriteTag(data, version, level, pos);
@@ -601,14 +604,14 @@ public class SWFInputStream extends InputStream {
break;
//case 44:
case 45:
ret = new NotDefinedTag("SoundStreamHead2",45,data,pos);
ret = new SoundStreamHead2Tag(data, version, pos);
break;
case 46:
ret = new NotDefinedTag("DefineMorphShape",46,data,pos);
ret = new DefineMorphShapeTag(data, version, pos);
break;
//case 47:
case 48:
ret = new NotDefinedTag("DefineFont2",48,data,pos);
ret = new DefineFont2Tag(data, version, pos);
break;
//case 49-55:
case 56:
@@ -619,25 +622,25 @@ public class SWFInputStream extends InputStream {
break;
case 58:
ret = new EnableDebuggerTag(data, version, pos);
break;
break;
case 59:
ret = new DoInitActionTag(data, version, pos);
break;
break;
case 60:
ret = new NotDefinedTag("DefineVideoStream",60,data,pos);
ret = new DefineVideoStreamTag(data, version, pos);
break;
case 61:
ret = new NotDefinedTag("VideoFrame",61,data,pos);
ret = new VideoFrameTag(data, version, pos);
break;
case 62:
ret = new NotDefinedTag("DefineFontInfo2",62,data,pos);
ret = new DefineFontInfo2Tag(data, version, pos);
break;
case 63:
ret = new DebugIDTag(data, version, pos);
break;
case 64:
ret = new EnableDebugger2Tag(data, version, pos);
break;
break;
case 65:
ret = new ScriptLimitsTag(data, version, pos);
break;
@@ -650,16 +653,16 @@ public class SWFInputStream extends InputStream {
break;
case 70:
ret = new PlaceObject3Tag(data, version, pos);
break;
break;
case 71:
ret = new ImportAssets2Tag(data, version, pos);
break;
break;
//case 72:
case 73:
ret = new DefineFontAlignZonesTag(data, version, pos);
break;
case 74:
ret = new NotDefinedTag("DefineFontInfo2",62,data,pos);
ret = new CSMTextSettingsTag(data, version, pos);
break;
case 75:
ret = new DefineFont3Tag(data, version, pos);
@@ -679,9 +682,9 @@ public class SWFInputStream extends InputStream {
break;
case 83:
ret = new DefineShape4Tag(data, version, pos);
break;
break;
case 84:
ret = new NotDefinedTag("DefineMorphShape2",84,data,pos);
ret = new DefineMorphShape2Tag(data, version, pos);
break;
//case 85:
case 86:
@@ -689,15 +692,15 @@ public class SWFInputStream extends InputStream {
break;
case 87:
ret = new DefineBinaryDataTag(data, version, pos);
break;
break;
case 88:
ret = new DefineFontNameTag(data, version, pos);
break;
case 89:
ret = new NotDefinedTag("StartSound2",89,data,pos);
ret = new StartSound2Tag(data, version, pos);
break;
case 90:
ret = new NotDefinedTag("DefineBitsJPEG4",84,data,pos);
ret = new DefineBitsJPEG4Tag(data, version, pos);
break;
case 91:
ret = new DefineFont4Tag(data, version, pos);
@@ -706,6 +709,39 @@ public class SWFInputStream extends InputStream {
ret = new Tag(tagID, data, pos);
}
ret.forceWriteAsLong = readLong;
byte dataNew[] = ret.getData(version);
int ignoreFirst = 0;
for (int i = 0; i < data.length; i++) {
if (i >= dataNew.length) {
break;
}
if (dataNew[i] != data[i]) {
if (ignoreFirst > 0) {
ignoreFirst--;
continue;
}
String e = "";
e = ("TAG " + ret.toString() + " WRONG, ");
for (int j = i - 10; j <= i + 5; j++) {
while (j < 0) {
j++;
}
if (j >= data.length) {
break;
}
if (j >= dataNew.length) {
break;
}
if (j >= i) {
e += (Long.toHexString(data[j] & 0xff) + " ( is " + Long.toHexString(dataNew[j] & 0xff) + ") ");
} else {
e += (Long.toHexString(data[j] & 0xff) + " ");
}
}
log.severe(e);
}
}
return ret;
}
@@ -1564,6 +1600,7 @@ public class SWFInputStream extends InputStream {
FILLSTYLEARRAY ret = new FILLSTYLEARRAY();
int fillStyleCount = readUI8();
if (((shapeNum == 2) || (shapeNum == 3)) && (fillStyleCount == 0xff)) {
fillStyleCount = readUI16();
}
@@ -1700,7 +1737,7 @@ public class SWFInputStream extends InputStream {
ser.numBits = (int) readUB(4);
ser.generalLineFlag = readUB(1) == 1;
if (!ser.generalLineFlag) {
ser.vertLineFlag = readSB(1) == 1;
ser.vertLineFlag = readUB(1) == 1;
}
if (ser.generalLineFlag || (!ser.vertLineFlag)) {
ser.deltaX = (int) readSB(ser.numBits + 2);
@@ -1771,6 +1808,332 @@ public class SWFInputStream extends InputStream {
}
ret.add(rec);
} while (!(rec instanceof EndShapeRecord));
alignByte();
return ret;
}
/**
* Reads one SOUNDINFO value from the stream
*
* @return SOUNDINFO value
* @throws IOException
*/
public SOUNDINFO readSOUNDINFO() throws IOException {
SOUNDINFO ret = new SOUNDINFO();
readUB(2);
ret.syncStop = readUB(1) == 1;
ret.syncNoMultiple = readUB(1) == 1;
ret.hasEnvelope = readUB(1) == 1;
ret.hasLoops = readUB(1) == 1;
ret.hasOutPoint = readUB(1) == 1;
ret.hasInPoint = readUB(1) == 1;
if (ret.hasInPoint) {
ret.inPoint = readUI32();
}
if (ret.hasOutPoint) {
ret.outPoint = readUI32();
}
if (ret.hasLoops) {
ret.loopCount = readUI16();
}
if (ret.hasEnvelope) {
int envPoints = readUI8();
ret.envelopeRecords = new SOUNDENVELOPE[envPoints];
for (int i = 0; i < envPoints; i++) {
ret.envelopeRecords[i] = readSOUNDENVELOPE();
}
}
return ret;
}
/**
* Reads one SOUNDENVELOPE value from the stream
*
* @return SOUNDENVELOPE value
* @throws IOException
*/
public SOUNDENVELOPE readSOUNDENVELOPE() throws IOException {
SOUNDENVELOPE ret = new SOUNDENVELOPE();
ret.pos44 = readUI32();
ret.leftLevel = readUI16();
ret.rightLevel = readUI16();
return ret;
}
/**
* Reads one GLYPHENTRY value from the stream
*
* @return GLYPHENTRY value
* @throws IOException
*/
public GLYPHENTRY readGLYPHENTRY(int glyphBits, int advanceBits) throws IOException {
GLYPHENTRY ret = new GLYPHENTRY();
ret.glyphIndex = (int) readUB(glyphBits);
ret.glyphAdvance = (int) readUB(advanceBits);
return ret;
}
/**
* Reads one TEXTRECORD value from the stream
*
* @return TEXTRECORD value
* @throws IOException
*/
public TEXTRECORD readTEXTRECORD(boolean inDefineText2, int glyphBits, int advanceBits) throws IOException {
TEXTRECORD ret = new TEXTRECORD();
int first = (int) readUB(1); //always 1
readUB(3); //always 0
ret.styleFlagsHasFont = readUB(1) == 1;
ret.styleFlagsHasColor = readUB(1) == 1;
ret.styleFlagsHasYOffset = readUB(1) == 1;
ret.styleFlagsHasXOffset = readUB(1) == 1;
if ((!ret.styleFlagsHasFont) && (!ret.styleFlagsHasColor) && (!ret.styleFlagsHasYOffset) && (!ret.styleFlagsHasXOffset) && (first == 0)) { //final text record
return null;
}
if (ret.styleFlagsHasFont) {
ret.fontId = readUI16();
}
if (ret.styleFlagsHasColor) {
if (inDefineText2) {
ret.textColorA = readRGBA();
} else {
ret.textColor = readRGB();
}
}
if (ret.styleFlagsHasXOffset) {
ret.xOffset = readSI16();
}
if (ret.styleFlagsHasYOffset) {
ret.yOffset = readSI16();
}
if (ret.styleFlagsHasFont) {
ret.textHeight = readUI16();
}
int glyphCount = readUI8();
ret.glyphEntries = new GLYPHENTRY[glyphCount];
for (int i = 0; i < glyphCount; i++) {
ret.glyphEntries[i] = readGLYPHENTRY(glyphBits, advanceBits);
}
return ret;
}
/**
* Reads one MORPHGRADRECORD value from the stream
*
* @return MORPHGRADRECORD value
* @throws IOException
*/
public MORPHGRADRECORD readMORPHGRADRECORD() throws IOException {
MORPHGRADRECORD ret = new MORPHGRADRECORD();
ret.startRatio = readUI8();
ret.startColor = readRGBA();
ret.endRatio = readUI8();
ret.endColor = readRGBA();
return ret;
}
/**
* Reads one MORPHGRADIENT value from the stream
*
* @return MORPHGRADIENT value
* @throws IOException
*/
public MORPHGRADIENT readMORPHGRADIENT() throws IOException {
MORPHGRADIENT ret = new MORPHGRADIENT();
int numGradients = (int) readUI8();
ret.gradientRecords = new MORPHGRADRECORD[numGradients];
for (int i = 0; i < numGradients; i++) {
ret.gradientRecords[i] = readMORPHGRADRECORD();
}
return ret;
}
/**
* Reads one MORPHFILLSTYLE value from the stream
*
* @return MORPHFILLSTYLE value
* @throws IOException
*/
public MORPHFILLSTYLE readMORPHFILLSTYLE() throws IOException {
MORPHFILLSTYLE ret = new MORPHFILLSTYLE();
ret.fillStyleType = readUI8();
if (ret.fillStyleType == MORPHFILLSTYLE.SOLID) {
ret.startColor = readRGBA();
ret.endColor = readRGBA();
}
if ((ret.fillStyleType == MORPHFILLSTYLE.LINEAR_GRADIENT)
|| (ret.fillStyleType == MORPHFILLSTYLE.RADIAL_GRADIENT)) {
ret.startGradientMatrix = readMatrix();
ret.endGradientMatrix = readMatrix();
}
if ((ret.fillStyleType == MORPHFILLSTYLE.LINEAR_GRADIENT)
|| (ret.fillStyleType == MORPHFILLSTYLE.RADIAL_GRADIENT)) {
ret.gradient = readMORPHGRADIENT();
}
if ((ret.fillStyleType == MORPHFILLSTYLE.REPEATING_BITMAP)
|| (ret.fillStyleType == MORPHFILLSTYLE.CLIPPED_BITMAP)
|| (ret.fillStyleType == MORPHFILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP)
|| (ret.fillStyleType == MORPHFILLSTYLE.NON_SMOOTHED_CLIPPED_BITMAP)) {
ret.bitmapId = readUI16();
ret.startBitmapMatrix = readMatrix();
ret.endBitmapMatrix = readMatrix();
}
return ret;
}
/**
* Reads one MORPHFILLSTYLEARRAY value from the stream
*
* @return MORPHFILLSTYLEARRAY value
* @throws IOException
*/
public MORPHFILLSTYLEARRAY readMORPHFILLSTYLEARRAY() throws IOException {
MORPHFILLSTYLEARRAY ret = new MORPHFILLSTYLEARRAY();
int fillStyleCount = readUI8();
if (fillStyleCount == 0xff) {
fillStyleCount = readUI16();
}
ret.fillStyles = new MORPHFILLSTYLE[fillStyleCount];
for (int i = 0; i < fillStyleCount; i++) {
ret.fillStyles[i] = readMORPHFILLSTYLE();
}
return ret;
}
/**
* Reads one MORPHLINESTYLE value from the stream
*
* @return MORPHLINESTYLE value
* @throws IOException
*/
public MORPHLINESTYLE readMORPHLINESTYLE() throws IOException {
MORPHLINESTYLE ret = new MORPHLINESTYLE();
ret.startWidth = readUI16();
ret.endWidth = readUI16();
ret.startColor = readRGBA();
ret.endColor = readRGBA();
return ret;
}
/**
* Reads one MORPHLINESTYLE2 value from the stream
*
* @return MORPHLINESTYLE2 value
* @throws IOException
*/
public MORPHLINESTYLE2 readMORPHLINESTYLE2() throws IOException {
MORPHLINESTYLE2 ret = new MORPHLINESTYLE2();
ret.startWidth = readUI16();
ret.endWidth = readUI16();
ret.startCapStyle = (int) readUB(2);
ret.joinStyle = (int) readUB(2);
ret.hasFillFlag = (int) readUB(1) == 1;
ret.noHScaleFlag = (int) readUB(1) == 1;
ret.noVScaleFlag = (int) readUB(1) == 1;
ret.pixelHintingFlag = (int) readUB(1) == 1;
readUB(5);//reserved
ret.noClose = (int) readUB(1) == 1;
ret.endCapStyle = (int) readUB(2);
if (ret.joinStyle == LINESTYLE2.MITER_JOIN) {
ret.miterLimitFactor = readUI16();
}
if (!ret.hasFillFlag) {
ret.startColor = readRGBA();
ret.endColor = readRGBA();
} else {
ret.fillType = readMORPHFILLSTYLE();
}
return ret;
}
/**
* Reads one MORPHLINESTYLEARRAY value from the stream
*
* @return MORPHLINESTYLEARRAY value
* @throws IOException
*/
public MORPHLINESTYLEARRAY readMORPHLINESTYLEARRAY(int morphShapeNum) throws IOException {
MORPHLINESTYLEARRAY ret = new MORPHLINESTYLEARRAY();
int lineStyleCount = readUI8();
if (lineStyleCount == 0xff) {
lineStyleCount = readUI16();
}
if (morphShapeNum == 1) {
ret.lineStyles = new MORPHLINESTYLE[lineStyleCount];
for (int i = 0; i < lineStyleCount; i++) {
ret.lineStyles[i] = readMORPHLINESTYLE();
}
} else if (morphShapeNum == 2) {
ret.lineStyles2 = new MORPHLINESTYLE2[lineStyleCount];
for (int i = 0; i < lineStyleCount; i++) {
ret.lineStyles2[i] = readMORPHLINESTYLE2();
}
}
return ret;
}
/**
* Reads one KERNINGRECORD value from the stream
*
* @return KERNINGRECORD value
* @throws IOException
*/
public KERNINGRECORD readKERNINGRECORD(boolean fontFlagsWideCodes) throws IOException {
KERNINGRECORD ret = new KERNINGRECORD();
if (fontFlagsWideCodes) {
ret.fontKerningCode1 = readUI16();
ret.fontKerningCode2 = readUI16();
} else {
ret.fontKerningCode1 = readUI8();
ret.fontKerningCode2 = readUI8();
}
ret.fontKerningAdjustment = readSI16();
return ret;
}
/**
* Reads one LANGCODE value from the stream
*
* @return LANGCODE value
* @throws IOException
*/
public LANGCODE readLANGCODE() throws IOException {
LANGCODE ret = new LANGCODE();
ret.languageCode = readUI8();
return ret;
}
/**
* Reads one ZONERECORD value from the stream
*
* @return ZONERECORD value
* @throws IOException
*/
public ZONERECORD readZONERECORD() throws IOException {
ZONERECORD ret = new ZONERECORD();
int numZoneData = readUI8();
ret.zonedata = new ZONEDATA[numZoneData];
for (int i = 0; i < numZoneData; i++) {
ret.zonedata[i] = readZONEDATA();
}
readUB(6);
ret.zoneMaskX = readUB(1) == 1;
ret.zoneMaskY = readUB(1) == 1;
return ret;
}
/**
* Reads one ZONEDATA value from the stream
*
* @return ZONEDATA value
* @throws IOException
*/
public ZONEDATA readZONEDATA() throws IOException {
ZONEDATA ret = new ZONEDATA();
ret.alignmentCoordinate = readFLOAT16();
ret.range = readFLOAT16();
return ret;
}

View File

@@ -19,6 +19,11 @@ package com.jpexs.asdec;
import com.jpexs.asdec.tags.Tag;
import com.jpexs.asdec.types.*;
import com.jpexs.asdec.types.filters.*;
import com.jpexs.asdec.types.shaperecords.CurvedEdgeRecord;
import com.jpexs.asdec.types.shaperecords.EndShapeRecord;
import com.jpexs.asdec.types.shaperecords.SHAPERECORD;
import com.jpexs.asdec.types.shaperecords.StraightEdgeRecord;
import com.jpexs.asdec.types.shaperecords.StyleChangeRecord;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -329,6 +334,7 @@ public class SWFOutputStream extends OutputStream {
writeSB(nBits, value.Xmax);
writeSB(nBits, value.Ymin);
writeSB(nBits, value.Ymax);
alignByte();
}
/**
@@ -1011,20 +1017,20 @@ public class SWFOutputStream extends OutputStream {
* @param value FILLSTYLEARRAY value
* @throws IOException
*/
public void writeFILLSTYLEARRAY(FILLSTYLEARRAY value,int shapeNum) throws IOException {
int fillStyleCount=value.fillStyles.length;
if(shapeNum==2||shapeNum==3){
if(fillStyleCount>=0xff){
public void writeFILLSTYLEARRAY(FILLSTYLEARRAY value, int shapeNum) throws IOException {
int fillStyleCount = value.fillStyles.length;
if (shapeNum == 2 || shapeNum == 3) {
if (fillStyleCount >= 0xff) {
writeUI8(0xff);
writeUI16(fillStyleCount);
}else{
} else {
writeUI8(fillStyleCount);
}
}else{
} else {
writeUI8(fillStyleCount);
}
for (int i = 0; i < value.fillStyles.length; i++) {
writeFILLSTYLE(value.fillStyles[i], shapeNum);
writeFILLSTYLE(value.fillStyles[i], shapeNum);
}
}
@@ -1095,7 +1101,7 @@ public class SWFOutputStream extends OutputStream {
* @param value LINESTYLE2 value
* @throws IOException
*/
public void writeLINESTYLE2(LINESTYLE2 value,int shapeNum) throws IOException {
public void writeLINESTYLE2(LINESTYLE2 value, int shapeNum) throws IOException {
writeUI16(value.width);
writeUB(2, value.startCapStyle);
writeUB(2, value.joinStyle);
@@ -1112,7 +1118,7 @@ public class SWFOutputStream extends OutputStream {
if (!value.hasFillFlag) {
writeRGBA(value.color);
} else {
writeFILLSTYLE(value.fillType,shapeNum);
writeFILLSTYLE(value.fillType, shapeNum);
}
}
@@ -1144,8 +1150,402 @@ public class SWFOutputStream extends OutputStream {
writeUI8(lineStyleCount);
}
for (int i = 0; i < lineStyleCount; i++) {
writeLINESTYLE2(value.lineStyles2[i],shapeNum);
writeLINESTYLE2(value.lineStyles2[i], shapeNum);
}
}
}
/**
* Writes SHAPE value to the stream
*
* @param value SHAPE value
* @throws IOException
*/
public void writeSHAPE(SHAPE value, int shapeNum) throws IOException {
writeUB(4, value.numFillBits);
writeUB(4, value.numLineBits);
writeSHAPERECORDS(value.shapeRecords, value.numFillBits, value.numLineBits, shapeNum);
}
/**
* Writes SHAPEWITHSTYLE value to the stream
*
* @param value SHAPEWITHSTYLE value
* @throws IOException
*/
public void writeSHAPEWITHSTYLE(SHAPEWITHSTYLE value, int shapeNum) throws IOException {
writeFILLSTYLEARRAY(value.fillStyles, shapeNum);
writeLINESTYLEARRAY(value.lineStyles, shapeNum);
writeUB(4, value.numFillBits);
writeUB(4, value.numLineBits);
writeSHAPERECORDS(value.shapeRecords, value.numFillBits, value.numLineBits, shapeNum);
}
/**
* Writes SHAPERECORDs value to the stream
*
* @param value SHAPERECORDS value
* @throws IOException
*/
public void writeSHAPERECORDS(List<SHAPERECORD> value, int fillBits, int lineBits, int shapeNum) throws IOException {
for (SHAPERECORD sh : value) {
if (sh instanceof CurvedEdgeRecord) {
CurvedEdgeRecord cer = (CurvedEdgeRecord) sh;
writeUB(1, 1); //typeFlag
writeUB(1, 0);//curvedEdge
writeUB(4, cer.numBits);
writeUB(cer.numBits + 2, cer.controlDeltaX);
writeUB(cer.numBits + 2, cer.controlDeltaY);
writeUB(cer.numBits + 2, cer.anchorDeltaX);
writeUB(cer.numBits + 2, cer.anchorDeltaY);
} else if (sh instanceof StraightEdgeRecord) {
StraightEdgeRecord ser = (StraightEdgeRecord) sh;
writeUB(1, 1); //typeFlag
writeUB(1, 1);//straightEdge
writeUB(4, ser.numBits);
writeUB(1, ser.generalLineFlag ? 1 : 0);
if (!ser.generalLineFlag) {
writeUB(1, ser.vertLineFlag ? 1 : 0);
}
if (ser.generalLineFlag || (!ser.vertLineFlag)) {
writeSB(ser.numBits + 2, ser.deltaX);
}
if (ser.generalLineFlag || ser.vertLineFlag) {
writeSB(ser.numBits + 2, ser.deltaY);
}
} else if (sh instanceof StyleChangeRecord) {
StyleChangeRecord scr = (StyleChangeRecord) sh;
writeUB(1, 0); //typeFlag
writeUB(1, scr.stateNewStyles ? 1 : 0);
writeUB(1, scr.stateLineStyle ? 1 : 0);
writeUB(1, scr.stateFillStyle1 ? 1 : 0);
writeUB(1, scr.stateFillStyle0 ? 1 : 0);
writeUB(1, scr.stateMoveTo ? 1 : 0);
if (scr.stateMoveTo) {
writeUB(5, scr.moveBits);
writeUB(scr.moveBits, scr.moveDeltaX);
writeUB(scr.moveBits, scr.moveDeltaY);
}
if (scr.stateFillStyle0) {
writeUB(fillBits, scr.fillStyle0);
}
if (scr.stateFillStyle1) {
writeUB(fillBits, scr.fillStyle1);
}
if (scr.stateLineStyle) {
writeUB(lineBits, scr.lineStyle);
}
if (scr.stateNewStyles) {
writeFILLSTYLEARRAY(scr.fillStyles, shapeNum);
writeLINESTYLEARRAY(scr.lineStyles, shapeNum);
writeUB(4, scr.numFillBits);
writeUB(4, scr.numLineBits);
}
} else if (sh instanceof EndShapeRecord) {
writeUB(1, 0); //typeFlag
writeUB(5, 0); //end of shape flag
}
}
alignByte();
}
/**
* Writes SOUNDINFO value to the stream
*
* @param value SOUNDINFO value
* @throws IOException
*/
public void writeSOUNDINFO(SOUNDINFO value) throws IOException {
writeUB(2, 0);//reserved
writeUB(1, value.syncStop ? 1 : 0);
writeUB(1, value.syncNoMultiple ? 1 : 0);
writeUB(1, value.hasEnvelope ? 1 : 0);
writeUB(1, value.hasLoops ? 1 : 0);
writeUB(1, value.hasOutPoint ? 1 : 0);
writeUB(1, value.hasInPoint ? 1 : 0);
if (value.hasInPoint) {
writeUI32(value.inPoint);
}
if (value.hasOutPoint) {
writeUI32(value.outPoint);
}
if (value.hasLoops) {
writeUI16(value.loopCount);
}
if (value.hasEnvelope) {
writeUI8(value.envelopeRecords.length);
for (SOUNDENVELOPE env : value.envelopeRecords) {
writeSOUNDENVELOPE(env);
}
}
}
/**
* Writes SOUNDENVELOPE value to the stream
*
* @param value SOUNDENVELOPE value
* @throws IOException
*/
public void writeSOUNDENVELOPE(SOUNDENVELOPE value) throws IOException {
writeUI32(value.pos44);
writeUI16(value.leftLevel);
writeUI16(value.rightLevel);
}
/**
* Writes TEXTRECORD value to the stream
*
* @param value TEXTRECORD value
* @throws IOException
*/
public void writeTEXTRECORD(TEXTRECORD value, boolean inDefineText2, int glyphBits, int advanceBits) throws IOException {
writeUB(1, 1);
writeUB(3, 0);
writeUB(1, value.styleFlagsHasFont ? 1 : 0);
writeUB(1, value.styleFlagsHasColor ? 1 : 0);
writeUB(1, value.styleFlagsHasYOffset ? 1 : 0);
writeUB(1, value.styleFlagsHasXOffset ? 1 : 0);
if (value.styleFlagsHasFont) {
writeUI16(value.fontId);
}
if (value.styleFlagsHasColor) {
if (inDefineText2) {
writeRGBA(value.textColorA);
} else {
writeRGB(value.textColor);
}
}
if (value.styleFlagsHasXOffset) {
writeSI16(value.xOffset);
}
if (value.styleFlagsHasYOffset) {
writeSI16(value.yOffset);
}
if (value.styleFlagsHasFont) {
writeUI16(value.textHeight);
}
writeUI8(value.glyphEntries.length);
for (GLYPHENTRY ge : value.glyphEntries) {
writeGLYPHENTRY(ge, glyphBits, advanceBits);
}
}
/**
* Writes GLYPHENTRY value to the stream
*
* @param value GLYPHENTRY value
* @throws IOException
*/
public void writeGLYPHENTRY(GLYPHENTRY value, int glyphBits, int advanceBits) throws IOException {
writeUB(glyphBits, value.glyphIndex);
writeSB(advanceBits, value.glyphAdvance);
}
/**
* Writes MORPHFILLSTYLE value to the stream
*
* @param value MORPHFILLSTYLE value
* @throws IOException
*/
public void writeMORPHFILLSTYLE(MORPHFILLSTYLE value, int shapeNum) throws IOException {
writeUI8(value.fillStyleType);
if (value.fillStyleType == MORPHFILLSTYLE.SOLID) {
writeRGBA(value.startColor);
writeRGBA(value.endColor);
}
if ((value.fillStyleType == MORPHFILLSTYLE.LINEAR_GRADIENT)
|| (value.fillStyleType == MORPHFILLSTYLE.RADIAL_GRADIENT)) {
writeMatrix(value.startGradientMatrix);
writeMatrix(value.endGradientMatrix);
}
if ((value.fillStyleType == MORPHFILLSTYLE.LINEAR_GRADIENT)
|| (value.fillStyleType == MORPHFILLSTYLE.RADIAL_GRADIENT)) {
writeMORPHGRADIENT(value.gradient, shapeNum);
}
if ((value.fillStyleType == MORPHFILLSTYLE.REPEATING_BITMAP)
|| (value.fillStyleType == MORPHFILLSTYLE.CLIPPED_BITMAP)
|| (value.fillStyleType == MORPHFILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP)
|| (value.fillStyleType == MORPHFILLSTYLE.NON_SMOOTHED_CLIPPED_BITMAP)) {
writeUI16(value.bitmapId);
writeMatrix(value.startBitmapMatrix);
writeMatrix(value.endBitmapMatrix);
}
}
/**
* WritesMORPH FILLSTYLEARRAY value to the stream
*
* @param value MORPHFILLSTYLEARRAY value
* @throws IOException
*/
public void writeMORPHFILLSTYLEARRAY(MORPHFILLSTYLEARRAY value, int morphShapeNum) throws IOException {
int fillStyleCount = value.fillStyles.length;
if (fillStyleCount >= 0xff) {
writeUI8(0xff);
writeUI16(fillStyleCount);
} else {
writeUI8(fillStyleCount);
}
for (int i = 0; i < value.fillStyles.length; i++) {
writeMORPHFILLSTYLE(value.fillStyles[i], morphShapeNum);
}
}
/**
* Writes MORPHGRADIENT value to the stream
*
* @param value MORPHGRADIENT value
* @throws IOException
*/
public void writeMORPHGRADIENT(MORPHGRADIENT value, int shapeNum) throws IOException {
writeUB(4, value.gradientRecords.length);
for (int i = 0; i < value.gradientRecords.length; i++) {
writeMORPHGRADRECORD(value.gradientRecords[i]);
}
}
/**
* Writes MORPHGRADRECORD value to the stream
*
* @param value MORPHGRADRECORD value
* @throws IOException
*/
public void writeMORPHGRADRECORD(MORPHGRADRECORD value) throws IOException {
writeUI8(value.startRatio);
writeRGBA(value.startColor);
writeUI8(value.endRatio);
writeRGBA(value.endColor);
}
/**
* Writes MORPHLINESTYLE value to the stream
*
* @param value LINESTYLE value
* @throws IOException
*/
public void writeMORPHLINESTYLE(MORPHLINESTYLE value, int shapeNum) throws IOException {
writeUI16(value.startWidth);
writeUI16(value.endWidth);
writeRGBA(value.startColor);
writeRGBA(value.endColor);
}
/**
* Writes MORPHLINESTYLE2 value to the stream
*
* @param value MORPHLINESTYLE2 value
* @throws IOException
*/
public void writeMORPHLINESTYLE2(MORPHLINESTYLE2 value, int shapeNum) throws IOException {
writeUI16(value.startWidth);
writeUI16(value.endWidth);
writeUB(2, value.startCapStyle);
writeUB(2, value.joinStyle);
writeUB(1, value.hasFillFlag ? 1 : 0);
writeUB(1, value.noHScaleFlag ? 1 : 0);
writeUB(1, value.noVScaleFlag ? 1 : 0);
writeUB(1, value.pixelHintingFlag ? 1 : 0);
writeUB(5, 0);//reserved
writeUB(1, value.noClose ? 1 : 0);
writeUB(2, value.endCapStyle);
if (value.joinStyle == LINESTYLE2.MITER_JOIN) {
writeUI16(value.miterLimitFactor);
}
if (!value.hasFillFlag) {
writeRGBA(value.startColor);
writeRGBA(value.endColor);
} else {
writeMORPHFILLSTYLE(value.fillType, shapeNum);
}
}
/**
* Writes MORPHLINESTYLEARRAY value to the stream
*
* @param value MORPHFILLSTYLEARRAY value
* @throws IOException
*/
public void writeMORPHLINESTYLEARRAY(MORPHLINESTYLEARRAY value, int morphShapeNum) throws IOException {
int lineStyleCount;
if (morphShapeNum == 1) {
lineStyleCount = value.lineStyles.length;
if (lineStyleCount >= 0xff) {
writeUI8(0xff);
writeUI16(lineStyleCount);
} else {
writeUI8(lineStyleCount);
}
for (int i = 0; i < lineStyleCount; i++) {
writeMORPHLINESTYLE(value.lineStyles[i], morphShapeNum);
}
} else if (morphShapeNum == 2) {
lineStyleCount = value.lineStyles2.length;
if (lineStyleCount >= 0xff) {
writeUI8(0xff);
writeUI16(lineStyleCount);
} else {
writeUI8(lineStyleCount);
}
for (int i = 0; i < lineStyleCount; i++) {
writeMORPHLINESTYLE2(value.lineStyles2[i], morphShapeNum);
}
}
}
/**
* Writes KERNINGRECORD value to the stream
*
* @param value KERNINGRECORD value
* @throws IOException
*/
public void writeKERNINGRECORD(KERNINGRECORD value, boolean fontFlagsWideCodes) throws IOException {
if (fontFlagsWideCodes) {
writeUI16(value.fontKerningCode1);
writeUI16(value.fontKerningCode2);
} else {
writeUI8(value.fontKerningCode1);
writeUI8(value.fontKerningCode2);
}
writeSI16(value.fontKerningAdjustment);
}
/**
* Writes LANGCODE value to the stream
*
* @param value LANGCODE value
* @throws IOException
*/
public void writeLANGCODE(LANGCODE value) throws IOException {
writeUI8(value.languageCode);
}
/**
* Writes ZONERECORD value to the stream
*
* @param value ZONERECORD value
* @throws IOException
*/
public void writeZONERECORD(ZONERECORD value) throws IOException {
writeUI8(value.zonedata.length);
for (int i = 0; i < value.zonedata.length; i++) {
writeZONEDATA(value.zonedata[i]);
}
writeUB(6, 0);
writeUB(1, value.zoneMaskX ? 1 : 0);
writeUB(1, value.zoneMaskY ? 1 : 0);
}
/**
* Writes ZONEDATA value to the stream
*
* @param value ZONEDATA value
* @throws IOException
*/
public void writeZONEDATA(ZONEDATA value) throws IOException {
writeFLOAT16(value.alignmentCoordinate);
writeFLOAT16(value.range);
}
}

View File

@@ -28,6 +28,7 @@ public class CopyOutputStream extends OutputStream {
private int TEMPSIZE = 5;
private int temp[] = new int[TEMPSIZE];
private int tempPos = 0;
public int ignoreFirst = 0;
public CopyOutputStream(OutputStream os, InputStream is) {
this.os = os;
@@ -42,25 +43,29 @@ public class CopyOutputStream extends OutputStream {
pos++;
int r = is.read();
if ((b & 0xff) != r) {
os.flush();
if (ignoreFirst <= 0) {
os.flush();
boolean output = false;
boolean output = true;
if (output) {
System.out.print("Last written:");
for (int i = 0; i < TEMPSIZE; i++) {
System.out.print("" + Integer.toHexString(temp[(tempPos + i) % TEMPSIZE]) + " ");
if (output) {
System.out.print("Last written:");
for (int i = 0; i < TEMPSIZE; i++) {
System.out.print("" + Integer.toHexString(temp[(tempPos + i) % TEMPSIZE]) + " ");
}
System.out.println("");
System.out.println("More expected:");
for (int i = 0; i < TEMPSIZE; i++) {
System.out.println("" + Integer.toHexString(is.read()));
}
System.out.println("");
System.out.println(Integer.toHexString(r) + " expected but " + Integer.toHexString(b) + " found");
}
System.out.println("");
System.out.println("More expected:");
for (int i = 0; i < TEMPSIZE; i++) {
System.out.println("" + Integer.toHexString(is.read()));
}
System.out.println("");
System.out.println(Integer.toHexString(r) + " expected but " + Integer.toHexString(b) + " found");
throw new NotSameException(pos);
} else {
ignoreFirst--;
}
throw new NotSameException(pos);
}
os.write(b);
}

View File

@@ -63,7 +63,7 @@ public class ConstructIns extends InstructionDefinition {
} else if (item instanceof AddTreeItem) {
ret = ret && walkXML(((AddTreeItem) item).leftSide, list);
ret = ret && walkXML(((AddTreeItem) item).rightSide, list);
} else if ((item instanceof EscapeXElemTreeItem)||(item instanceof EscapeXAttrTreeItem)) {
} else if ((item instanceof EscapeXElemTreeItem) || (item instanceof EscapeXAttrTreeItem)) {
list.add(item);
} else {
return false;

View File

@@ -22,9 +22,7 @@ import com.jpexs.asdec.abc.avm2.LocalDataArea;
import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction;
import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition;
import com.jpexs.asdec.abc.avm2.treemodel.DefaultXMLNamespace;
import com.jpexs.asdec.abc.avm2.treemodel.StringTreeItem;
import com.jpexs.asdec.abc.avm2.treemodel.TreeItem;
import com.jpexs.asdec.abc.avm2.treemodel.UnparsedTreeItem;
import com.jpexs.asdec.abc.types.MethodInfo;
import java.util.HashMap;
import java.util.List;

View File

@@ -23,7 +23,6 @@ import com.jpexs.asdec.abc.avm2.instructions.AVM2Instruction;
import com.jpexs.asdec.abc.avm2.instructions.InstructionDefinition;
import com.jpexs.asdec.abc.avm2.treemodel.EscapeXAttrTreeItem;
import com.jpexs.asdec.abc.avm2.treemodel.TreeItem;
import com.jpexs.asdec.abc.avm2.treemodel.UnparsedTreeItem;
import com.jpexs.asdec.abc.types.MethodInfo;
import java.util.HashMap;
import java.util.List;

View File

@@ -13,19 +13,17 @@ import java.util.List;
*
* @author Jindra
*/
public class DefaultXMLNamespace extends TreeItem{
public class DefaultXMLNamespace extends TreeItem {
private TreeItem ns;
public DefaultXMLNamespace(AVM2Instruction instruction,TreeItem ns) {
public DefaultXMLNamespace(AVM2Instruction instruction, TreeItem ns) {
super(instruction, NOPRECEDENCE);
this.ns=ns;
this.ns = ns;
}
@Override
public String toString(ConstantPool constants, HashMap<Integer, String> localRegNames, List<String> fullyQualifiedNames) {
return hilight("default xml namespace = ")+ns.toString(constants, localRegNames, fullyQualifiedNames);
return hilight("default xml namespace = ") + ns.toString(constants, localRegNames, fullyQualifiedNames);
}
}

View File

@@ -37,8 +37,6 @@ import javax.swing.border.BevelBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.*;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import jsyntaxpane.DefaultSyntaxKit;
public class MainFrame extends JFrame implements ActionListener, ItemListener {

View File

@@ -16,14 +16,14 @@
*/
package com.jpexs.asdec.action;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.tags.DefineButton2Tag;
import com.jpexs.asdec.tags.DefineButtonTag;
import com.jpexs.asdec.tags.DefineSpriteTag;
import com.jpexs.asdec.tags.DoInitActionTag;
import com.jpexs.asdec.tags.ExportAssetsTag;
import com.jpexs.asdec.tags.ShowFrameTag;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.base.Container;
import java.util.ArrayList;
import java.util.List;

View File

@@ -25,8 +25,8 @@ import com.jpexs.asdec.action.parser.ParseException;
import com.jpexs.asdec.gui.LoadingPanel;
import com.jpexs.asdec.gui.View;
import com.jpexs.asdec.helpers.Highlighting;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.Tag;
import com.jpexs.asdec.tags.base.ASMSource;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;

View File

@@ -0,0 +1,90 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class CSMTextSettingsTag extends Tag {
public int textID;
public int useFlashType;
public int gridFit;
public double thickness;
public double sharpness;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(textID);
sos.writeUB(2, useFlashType);
sos.writeUB(3, gridFit);
sos.writeUB(3, 0);
sos.writeFIXED(thickness); //TODO:write F32
sos.writeFIXED(sharpness); //TODO:write F32
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public CSMTextSettingsTag(byte data[], int version, long pos) throws IOException {
super(74, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
textID = sis.readUI16();
useFlashType = (int) sis.readUB(2);
gridFit = (int) sis.readUB(3);
sis.readUB(3); //reserved
thickness = sis.readFIXED(); //TODO: read F32
sharpness = sis.readFIXED(); //TODO: read F32
sis.readUI8(); //reserved
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "CSMTextSettings";
}
}

View File

@@ -22,8 +22,6 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*

View File

@@ -16,11 +16,42 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineBinaryDataTag extends Tag {
public DefineBinaryDataTag(byte[] data, int version, long pos) {
public int tag;
public byte binaryData[];
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(tag);
sos.write(binaryData);
} catch (IOException e) {
}
return baos.toByteArray();
}
public DefineBinaryDataTag(byte[] data, int version, long pos) throws IOException {
super(87, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
tag = sis.readUI16();
binaryData = sis.readBytes(sis.available());
}
@Override

View File

@@ -16,11 +16,20 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class DefineBitsJPEG2Tag extends Tag {
public DefineBitsJPEG2Tag(byte[] data, int version, long pos) {
public int characterId;
public byte[] imageData;
public DefineBitsJPEG2Tag(byte[] data, int version, long pos) throws IOException {
super(21, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterId = sis.readUI16();
imageData = sis.readBytes(sis.available());
}
@Override

View File

@@ -16,11 +16,47 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineBitsJPEG3Tag extends Tag {
public DefineBitsJPEG3Tag(byte[] data, int version, long pos) {
public int characterID;
public byte imageData[];
public byte bitmapAlphaData[];
public DefineBitsJPEG3Tag(byte[] data, int version, long pos) throws IOException {
super(35, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
long alphaDataOffset = sis.readUI32();
imageData = sis.readBytes(alphaDataOffset);
bitmapAlphaData = sis.readBytes(sis.available());
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.writeUI32(imageData.length);
sos.write(imageData);
sos.write(bitmapAlphaData);
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -0,0 +1,86 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineBitsJPEG4Tag extends Tag {
public int characterID;
public int deblockParam;
public byte imageData[];
public byte bitmapAlphaData[];
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.writeUI32(imageData.length);
sos.writeUI16(deblockParam);
sos.write(imageData);
sos.write(bitmapAlphaData);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineBitsJPEG4Tag(byte data[], int version, long pos) throws IOException {
super(90, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
long alphaDataOffset = sis.readUI32();
deblockParam = sis.readUI16();
imageData = sis.readBytes(alphaDataOffset);
bitmapAlphaData = sis.readBytes(sis.available());
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineBitsJPEG4";
}
}

View File

@@ -16,13 +16,61 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineBitsLossless2Tag extends Tag {
public int characterID;
public int bitmapFormat;
public int bitmapWidth;
public int bitmapHeight;
public int bitmapColorTableSize;
public byte zlibBitmapData[]; //TODO: Parse ALPHACOLORMAPDATA,ALPHABITMAPDATA
public static final int FORMAT_8BIT_COLORMAPPED = 3;
public static final int FORMAT_15BIT_RGB = 4;
public static final int FORMAT_24BIT_RGB = 5;
public DefineBitsLossless2Tag(byte[] data, int version, long pos) throws IOException {
super(36, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
bitmapFormat = sis.readUI8();
bitmapWidth = sis.readUI16();
bitmapHeight = sis.readUI16();
if (bitmapFormat == FORMAT_15BIT_RGB) {
bitmapColorTableSize = sis.readUI8();
}
zlibBitmapData = sis.readBytes(sis.available());
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.writeUI8(bitmapFormat);
sos.writeUI16(bitmapWidth);
sos.writeUI16(bitmapHeight);
if (bitmapFormat == FORMAT_15BIT_RGB) {
sos.writeUI8(bitmapColorTableSize);
}
sos.write(zlibBitmapData);
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -16,11 +16,61 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineBitsLosslessTag extends Tag {
public DefineBitsLosslessTag(byte[] data, int version, long pos) {
public int characterID;
public int bitmapFormat;
public int bitmapWidth;
public int bitmapHeight;
public int bitmapColorTableSize;
public byte zlibBitmapData[]; //TODO: Parse COLORMAPDATA,BITMAPDATA
public static final int FORMAT_8BIT_COLORMAPPED = 3;
public static final int FORMAT_15BIT_RGB = 4;
public static final int FORMAT_24BIT_RGB = 5;
public DefineBitsLosslessTag(byte[] data, int version, long pos) throws IOException {
super(20, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
bitmapFormat = sis.readUI8();
bitmapWidth = sis.readUI16();
bitmapHeight = sis.readUI16();
if (bitmapFormat == FORMAT_15BIT_RGB) {
bitmapColorTableSize = sis.readUI8();
}
zlibBitmapData = sis.readBytes(sis.available());
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.writeUI8(bitmapFormat);
sos.writeUI16(bitmapWidth);
sos.writeUI16(bitmapHeight);
if (bitmapFormat == FORMAT_15BIT_RGB) {
sos.writeUI8(bitmapColorTableSize);
}
sos.write(zlibBitmapData);
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -16,11 +16,42 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineBitsTag extends Tag {
public DefineBitsTag(byte[] data, int version, long pos) {
public int characterID;
public byte jpegData[];
public DefineBitsTag(byte[] data, int version, long pos) throws IOException {
super(6, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
jpegData = sis.readBytes(sis.available());
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.write(jpegData);
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -16,12 +16,12 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.Main;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.types.BUTTONCONDACTION;
import com.jpexs.asdec.types.BUTTONRECORD;
import java.io.ByteArrayInputStream;

View File

@@ -0,0 +1,79 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.CXFORM;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineButtonCxform extends Tag {
public int buttonId;
public CXFORM buttonColorTransform;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(buttonId);
sos.writeCXFORM(buttonColorTransform);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineButtonCxform(byte data[], int version, long pos) throws IOException {
super(23, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
buttonId = sis.readUI16();
buttonColorTransform = sis.readCXFORM();
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineButtonCxform";
}
}

View File

@@ -0,0 +1,116 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.SOUNDINFO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineButtonSoundTag extends Tag {
public int buttonId;
public int buttonSoundChar0;
public SOUNDINFO buttonSoundInfo0;
public int buttonSoundChar1;
public SOUNDINFO buttonSoundInfo1;
public int buttonSoundChar2;
public SOUNDINFO buttonSoundInfo2;
public int buttonSoundChar3;
public SOUNDINFO buttonSoundInfo3;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(buttonId);
sos.writeUI16(buttonSoundChar0);
if (buttonSoundChar0 != 0) {
sos.writeSOUNDINFO(buttonSoundInfo0);
}
sos.writeUI16(buttonSoundChar1);
if (buttonSoundChar1 != 0) {
sos.writeSOUNDINFO(buttonSoundInfo1);
}
sos.writeUI16(buttonSoundChar2);
if (buttonSoundChar2 != 0) {
sos.writeSOUNDINFO(buttonSoundInfo2);
}
sos.writeUI16(buttonSoundChar3);
if (buttonSoundChar3 != 0) {
sos.writeSOUNDINFO(buttonSoundInfo3);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineButtonSoundTag(byte data[], int version, long pos) throws IOException {
super(17, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
buttonId = sis.readUI16();
buttonSoundChar0 = sis.readUI16();
if (buttonSoundChar0 != 0) {
buttonSoundInfo0 = sis.readSOUNDINFO();
}
buttonSoundChar1 = sis.readUI16();
if (buttonSoundChar1 != 0) {
buttonSoundInfo1 = sis.readSOUNDINFO();
}
buttonSoundChar2 = sis.readUI16();
if (buttonSoundChar2 != 0) {
buttonSoundInfo2 = sis.readSOUNDINFO();
}
buttonSoundChar3 = sis.readUI16();
if (buttonSoundChar3 != 0) {
buttonSoundInfo3 = sis.readSOUNDINFO();
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineButtonSound";
}
}

View File

@@ -16,13 +16,13 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.Main;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.action.Action;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.types.BUTTONRECORD;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

View File

@@ -0,0 +1,194 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.RGBA;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineEditTextTag extends Tag {
public int characterId;
public RECT bounds;
public boolean hasText;
public boolean wordWrap;
public boolean multiline;
public boolean password;
public boolean readOnly;
public boolean hasTextColor;
public boolean hasMaxLength;
public boolean hasFont;
public boolean hasFontClass;
public boolean autoSize;
public boolean hasLayout;
public boolean noSelect;
public boolean border;
public boolean wasStatic;
public boolean html;
public boolean useOutlines;
public int fontId;
public String fontClass;
public int fontHeight;
public RGBA textColor;
public int maxLength;
public int align;
public int leftMargin;
public int rightMargin;
public int indent;
public int leading;
public String variableName;
public String initialText;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterId);
sos.writeRECT(bounds);
sos.writeUB(1, hasText ? 1 : 0);
sos.writeUB(1, wordWrap ? 1 : 0);
sos.writeUB(1, multiline ? 1 : 0);
sos.writeUB(1, password ? 1 : 0);
sos.writeUB(1, readOnly ? 1 : 0);
sos.writeUB(1, hasTextColor ? 1 : 0);
sos.writeUB(1, hasMaxLength ? 1 : 0);
sos.writeUB(1, hasFont ? 1 : 0);
sos.writeUB(1, hasFontClass ? 1 : 0);
sos.writeUB(1, autoSize ? 1 : 0);
sos.writeUB(1, hasLayout ? 1 : 0);
sos.writeUB(1, noSelect ? 1 : 0);
sos.writeUB(1, border ? 1 : 0);
sos.writeUB(1, wasStatic ? 1 : 0);
sos.writeUB(1, html ? 1 : 0);
sos.writeUB(1, useOutlines ? 1 : 0);
if (hasFont) {
sos.writeUI16(fontId);
}
if (hasFontClass) {
sos.writeString(fontClass);
}
if (hasFont) {
sos.writeUI16(fontHeight);
}
if (hasTextColor) {
sos.writeRGBA(textColor);
}
if (hasMaxLength) {
sos.writeUI16(maxLength);
}
if (hasLayout) {
sos.writeUI8(align);
sos.writeUI16(leftMargin);
sos.writeUI16(rightMargin);
sos.writeUI16(indent);
sos.writeSI16(leading);
}
sos.writeString(variableName);
if (hasText) {
sos.writeString(initialText);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineEditTextTag(byte data[], int version, long pos) throws IOException {
super(0, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterId = sis.readUI16();
bounds = sis.readRECT();
hasText = sis.readUB(1) == 1;
wordWrap = sis.readUB(1) == 1;
multiline = sis.readUB(1) == 1;
password = sis.readUB(1) == 1;
readOnly = sis.readUB(1) == 1;
hasTextColor = sis.readUB(1) == 1;
hasMaxLength = sis.readUB(1) == 1;
hasFont = sis.readUB(1) == 1;
hasFontClass = sis.readUB(1) == 1;
autoSize = sis.readUB(1) == 1;
hasLayout = sis.readUB(1) == 1;
noSelect = sis.readUB(1) == 1;
border = sis.readUB(1) == 1;
wasStatic = sis.readUB(1) == 1;
html = sis.readUB(1) == 1;
useOutlines = sis.readUB(1) == 1;
if (hasFont) {
fontId = sis.readUI16();
}
if (hasFontClass) {
fontClass = sis.readString();
}
if (hasFont) {
fontHeight = sis.readUI16();
}
if (hasTextColor) {
textColor = sis.readRGBA();
}
if (hasMaxLength) {
maxLength = sis.readUI16();
}
if (hasLayout) {
align = sis.readUI8(); //0 left,1 right, 2 center, 3 justify
leftMargin = sis.readUI16();
rightMargin = sis.readUI16();
indent = sis.readUI16();
leading = sis.readSI16();
}
variableName = sis.readString();
if (hasText) {
initialText = sis.readString();
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineEditText";
}
}

View File

@@ -0,0 +1,219 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.types.KERNINGRECORD;
import com.jpexs.asdec.types.LANGCODE;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.SHAPE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineFont2Tag extends Tag {
public int fontId;
public boolean fontFlagsHasLayout;
public boolean fontFlagsShiftJIS;
public boolean fontFlagsSmallText;
public boolean fontFlagsANSI;
public boolean fontFlagsWideOffsets;
public boolean fontFlagsWideCodes;
public boolean fontFlagsItalic;
public boolean fontFlagsBold;
public LANGCODE languageCode;
public String fontName;
public int numGlyphs;
public long offsetTable[];
public SHAPE glyphShapeTable[];
public int codeTable[];
public int fontAscent;
public int fontDescent;
public int fontLeading;
public int fontAdvanceTable[];
public RECT fontBoundsTable[];
public KERNINGRECORD fontKerningTable[];
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = new CopyOutputStream(baos, new ByteArrayInputStream(data));
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontId);
sos.writeUB(1, fontFlagsHasLayout ? 1 : 0);
sos.writeUB(1, fontFlagsShiftJIS ? 1 : 0);
sos.writeUB(1, fontFlagsSmallText ? 1 : 0);
sos.writeUB(1, fontFlagsANSI ? 1 : 0);
sos.writeUB(1, fontFlagsWideOffsets ? 1 : 0);
sos.writeUB(1, fontFlagsWideCodes ? 1 : 0);
sos.writeUB(1, fontFlagsItalic ? 1 : 0);
sos.writeUB(1, fontFlagsBold ? 1 : 0);
sos.writeLANGCODE(languageCode);
sos.writeUI8(fontName.getBytes().length);
sos.write(fontName.getBytes());
sos.writeUI16(numGlyphs);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
SWFOutputStream sos2 = new SWFOutputStream(baos2, version);
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideOffsets) {
sos2.writeUI32(offsetTable[i]);
} else {
sos2.writeUI16((int) offsetTable[i]);
}
}
byte ba2[] = baos2.toByteArray();
ByteArrayOutputStream baos3 = new ByteArrayOutputStream();
SWFOutputStream sos3 = new SWFOutputStream(baos3, version);
for (int i = 0; i < numGlyphs; i++) {
sos3.writeSHAPE(glyphShapeTable[i], 1);
}
byte ba3[] = baos3.toByteArray();
sos.write(ba2);
long offset = ba2.length + ba3.length;
if (fontFlagsWideOffsets) {
sos.writeUI32(offset + 4);
} else {
sos.writeUI16((int) (offset + 2));
}
sos.write(ba3);
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideCodes) {
sos.writeUI16(codeTable[i]);
} else {
sos.writeUI8(codeTable[i]);
}
}
if (fontFlagsHasLayout) {
sos.writeSI16(fontAscent);
sos.writeSI16(fontDescent);
sos.writeSI16(fontLeading);
for (int i = 0; i < numGlyphs; i++) {
sos.writeSI16(fontAdvanceTable[i]);
}
for (int i = 0; i < numGlyphs; i++) {
sos.writeRECT(fontBoundsTable[i]);
}
sos.writeUI16(fontKerningTable.length);
for (int k = 0; k < fontKerningTable.length; k++) {
sos.writeKERNINGRECORD(fontKerningTable[k], fontFlagsWideCodes);
}
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineFont2Tag(byte data[], int version, long pos) throws IOException {
super(48, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontId = sis.readUI16();
fontFlagsHasLayout = sis.readUB(1) == 1;
fontFlagsShiftJIS = sis.readUB(1) == 1;
fontFlagsSmallText = sis.readUB(1) == 1;
fontFlagsANSI = sis.readUB(1) == 1;
fontFlagsWideOffsets = sis.readUB(1) == 1;
fontFlagsWideCodes = sis.readUB(1) == 1;
fontFlagsItalic = sis.readUB(1) == 1;
fontFlagsBold = sis.readUB(1) == 1;
languageCode = sis.readLANGCODE();
int fontNameLen = sis.readUI8();
fontName = new String(sis.readBytes(fontNameLen));
numGlyphs = sis.readUI16();
offsetTable = new long[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideOffsets) {
offsetTable[i] = sis.readUI32();
} else {
offsetTable[i] = sis.readUI16();
}
}
long codeTableOffset;
if (fontFlagsWideOffsets) {
codeTableOffset = sis.readUI32();
} else {
codeTableOffset = sis.readUI16();
}
glyphShapeTable = new SHAPE[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
glyphShapeTable[i] = sis.readSHAPE(1);
}
codeTable = new int[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideCodes) {
codeTable[i] = sis.readUI16();
} else {
codeTable[i] = sis.readUI8();
}
}
if (fontFlagsHasLayout) {
fontAscent = sis.readSI16();
fontDescent = sis.readSI16();
fontLeading = sis.readSI16();
fontAdvanceTable = new int[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
fontAdvanceTable[i] = sis.readSI16();
}
fontBoundsTable = new RECT[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
fontBoundsTable[i] = sis.readRECT();
}
int kerningCount = sis.readUI16();
fontKerningTable = new KERNINGRECORD[kerningCount];
for (int i = 0; i < kerningCount; i++) {
fontKerningTable[i] = sis.readKERNINGRECORD(fontFlagsWideCodes);
}
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineFont2";
}
}

View File

@@ -16,11 +16,171 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.KERNINGRECORD;
import com.jpexs.asdec.types.LANGCODE;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.SHAPE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineFont3Tag extends Tag {
public DefineFont3Tag(byte[] data, int version, long pos) {
public int fontId;
public boolean fontFlagsHasLayout;
public boolean fontFlagsShiftJIS;
public boolean fontFlagsSmallText;
public boolean fontFlagsANSI;
public boolean fontFlagsWideOffsets;
public boolean fontFlagsWideCodes;
public boolean fontFlagsItalic;
public boolean fontFlagsBold;
public LANGCODE languageCode;
public String fontName;
public int numGlyphs;
public long offsetTable[];
public SHAPE glyphShapeTable[];
public int codeTable[];
public int fontAscent;
public int fontDescent;
public int fontLeading;
public int fontAdvanceTable[];
public RECT fontBoundsTable[];
public KERNINGRECORD fontKerningTable[];
public DefineFont3Tag(byte[] data, int version, long pos) throws IOException {
super(75, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontId = sis.readUI16();
fontFlagsHasLayout = sis.readUB(1) == 1;
fontFlagsShiftJIS = sis.readUB(1) == 1;
fontFlagsSmallText = sis.readUB(1) == 1;
fontFlagsANSI = sis.readUB(1) == 1;
fontFlagsWideOffsets = sis.readUB(1) == 1;
fontFlagsWideCodes = sis.readUB(1) == 1;
fontFlagsItalic = sis.readUB(1) == 1;
fontFlagsBold = sis.readUB(1) == 1;
languageCode = sis.readLANGCODE();
int fontNameLen = sis.readUI8();
fontName = new String(sis.readBytes(fontNameLen));
numGlyphs = sis.readUI16();
offsetTable = new long[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideOffsets) {
offsetTable[i] = sis.readUI32();
} else {
offsetTable[i] = sis.readUI16();
}
}
long codeTableOffset = sis.readUI32();
glyphShapeTable = new SHAPE[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
glyphShapeTable[i] = sis.readSHAPE(1);
}
codeTable = new int[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideOffsets) {
codeTable[i] = sis.readUI16();
} else {
codeTable[i] = sis.readUI8();
}
}
if (fontFlagsHasLayout) {
fontAscent = sis.readSI16();
fontDescent = sis.readSI16();
fontLeading = sis.readSI16();
fontAdvanceTable = new int[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
fontAdvanceTable[i] = sis.readSI16();
}
fontBoundsTable = new RECT[numGlyphs];
for (int i = 0; i < numGlyphs; i++) {
fontBoundsTable[i] = sis.readRECT();
}
int kerningCount = sis.readUI16();
fontKerningTable = new KERNINGRECORD[kerningCount];
for (int i = 0; i < kerningCount; i++) {
fontKerningTable[i] = sis.readKERNINGRECORD(fontFlagsWideCodes);
}
}
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontId);
sos.writeUB(1, fontFlagsHasLayout ? 1 : 0);
sos.writeUB(1, fontFlagsShiftJIS ? 1 : 0);
sos.writeUB(1, fontFlagsSmallText ? 1 : 0);
sos.writeUB(1, fontFlagsANSI ? 1 : 0);
sos.writeUB(1, fontFlagsWideOffsets ? 1 : 0);
sos.writeUB(1, fontFlagsWideCodes ? 1 : 0);
sos.writeUB(1, fontFlagsItalic ? 1 : 0);
sos.writeUB(1, fontFlagsBold ? 1 : 0);
sos.writeLANGCODE(languageCode);
sos.writeUI8(fontName.getBytes().length);
sos.write(fontName.getBytes());
sos.write(numGlyphs);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
SWFOutputStream sos2 = new SWFOutputStream(baos2, version);
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideOffsets) {
sos2.writeUI32(offsetTable[i]);
} else {
sos2.writeUI16((int) offsetTable[i]);
}
}
byte ba2[] = baos2.toByteArray();
ByteArrayOutputStream baos3 = new ByteArrayOutputStream();
SWFOutputStream sos3 = new SWFOutputStream(baos2, version);
for (int i = 0; i < numGlyphs; i++) {
sos3.writeSHAPE(glyphShapeTable[i], 1);
}
byte ba3[] = baos3.toByteArray();
sos.write(ba2);
sos.writeUI32(ba2.length + ba3.length + 4);
sos.write(ba3);
for (int i = 0; i < numGlyphs; i++) {
if (fontFlagsWideCodes) {
sos.writeUI16(codeTable[i]);
} else {
sos.writeUI8(codeTable[i]);
}
}
if (fontFlagsHasLayout) {
sos.writeSI16(fontAscent);
sos.writeSI16(fontDescent);
sos.writeSI16(fontLeading);
for (int i = 0; i < numGlyphs; i++) {
sos.writeSI16(fontAdvanceTable[i]);
}
for (int i = 0; i < numGlyphs; i++) {
sos.writeRECT(fontBoundsTable[i]);
}
sos.writeUI16(fontKerningTable.length);
for (int k = 0; k < fontKerningTable.length; k++) {
sos.writeKERNINGRECORD(fontKerningTable[k], fontFlagsWideCodes);
}
}
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -16,11 +16,56 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DefineFont4Tag extends Tag {
public DefineFont4Tag(byte[] data, int version, long pos) {
public int fontID;
public boolean fontFlagsHasFontData;
public boolean fontFlagsItalic;
public boolean fontFlagsBold;
public String fontName;
public byte fontData[];
public DefineFont4Tag(byte[] data, int version, long pos) throws IOException {
super(91, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontID = sis.readUI16();
sis.readUB(5);
fontFlagsHasFontData = sis.readUB(1) == 1;
fontFlagsItalic = sis.readUB(1) == 1;
fontFlagsBold = sis.readUB(1) == 1;
fontName = sis.readString();
fontData = sis.readBytes(sis.available());
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontID);
sos.writeUB(5, 0);
sos.writeUB(1, fontFlagsHasFontData ? 1 : 0);
sos.writeUB(1, fontFlagsItalic ? 1 : 0);
sos.writeUB(1, fontFlagsBold ? 1 : 0);
sos.writeString(fontName);
sos.write(fontData);
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -16,11 +16,55 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.ZONERECORD;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class DefineFontAlignZonesTag extends Tag {
public DefineFontAlignZonesTag(byte[] data, int version, long pos) {
public int fontID;
public int CSMTableHint;
public List<ZONERECORD> zoneTable;
public DefineFontAlignZonesTag(byte[] data, int version, long pos) throws IOException {
super(73, data, pos);
// TODO Auto-generated constructor stub
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontID = sis.readUI16();
CSMTableHint = (int) sis.readUB(2);
sis.readUB(6);
zoneTable = new ArrayList<ZONERECORD>();
while (sis.available() > 0) {
zoneTable.add(sis.readZONERECORD());
}
}
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontID);
sos.writeUB(2, CSMTableHint);
sos.writeUB(6, 0);
for (ZONERECORD z : zoneTable) {
sos.writeZONERECORD(z);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
@Override

View File

@@ -0,0 +1,112 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.LANGCODE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineFontInfo2Tag extends Tag {
public int fontID;
public String fontName;
public boolean fontFlagsSmallText;
public boolean fontFlagsShiftJIS;
public boolean fontFlagsANSI;
public boolean fontFlagsItalic;
public boolean fontFlagsBold;
public boolean fontFlagsWideCodes;
public LANGCODE languageCode;
public int codeTable[];
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontID);
sos.writeUI8(fontName.getBytes().length);
sos.write(fontName.getBytes());
sos.writeUB(2, 0);
sos.writeUB(1, fontFlagsSmallText ? 1 : 0);
sos.writeUB(1, fontFlagsShiftJIS ? 1 : 0);
sos.writeUB(1, fontFlagsANSI ? 1 : 0);
sos.writeUB(1, fontFlagsItalic ? 1 : 0);
sos.writeUB(1, fontFlagsBold ? 1 : 0);
sos.writeUB(1, fontFlagsWideCodes ? 1 : 0);
sos.writeLANGCODE(languageCode);
for (int i = 0; i < codeTable.length; i++) {
sos.writeUI16(codeTable[i]);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineFontInfo2Tag(byte data[], int version, long pos) throws IOException {
super(62, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontID = sis.readUI16();
int fontNameLen = sis.readUI8();
fontName = new String(sis.readBytes(fontNameLen));
sis.readUB(2);//reserved
fontFlagsSmallText = sis.readUB(1) == 1;
fontFlagsShiftJIS = sis.readUB(1) == 1;
fontFlagsANSI = sis.readUB(1) == 1;
fontFlagsItalic = sis.readUB(1) == 1;
fontFlagsBold = sis.readUB(1) == 1;
fontFlagsWideCodes = sis.readUB(1) == 1;
languageCode = sis.readLANGCODE();
codeTable = new int[sis.available() / 2];
for (int i = 0; i < codeTable.length; i++) {
codeTable[i] = sis.readUI16();
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineFontInfo2";
}
}

View File

@@ -0,0 +1,118 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author JPEXS
*/
public class DefineFontInfoTag extends Tag {
public int fontId;
public String fontName;
public boolean fontFlagsSmallText;
public boolean fontFlagsShiftJIS;
public boolean fontFlagsANSI;
public boolean fontFlagsItalic;
public boolean fontFlagsBold;
public boolean fontFlagsWideCodes;
public List<Integer> codeTable;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(fontId);
sos.writeUI8(fontName.getBytes().length);
sos.write(fontName.getBytes());
sos.writeUB(2, 0); //reserved
sos.writeUB(1, fontFlagsSmallText ? 1 : 0);
sos.writeUB(1, fontFlagsShiftJIS ? 1 : 0);
sos.writeUB(1, fontFlagsANSI ? 1 : 0);
sos.writeUB(1, fontFlagsItalic ? 1 : 0);
sos.writeUB(1, fontFlagsBold ? 1 : 0);
sos.writeUB(1, fontFlagsWideCodes ? 1 : 0);
for (int code : codeTable) {
if (fontFlagsWideCodes) {
sos.writeUI16(code);
} else {
sos.writeUI8(code);
}
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineFontInfoTag(byte data[], int version, long pos) throws IOException {
super(13, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontId = sis.readUI16();
int fontNameLen = sis.readUI8();
fontName = new String(sis.readBytes(fontNameLen));
sis.readUB(2); //reserved
fontFlagsSmallText = sis.readUB(1) == 1;
fontFlagsShiftJIS = sis.readUB(1) == 1;
fontFlagsANSI = sis.readUB(1) == 1;
fontFlagsItalic = sis.readUB(1) == 1;
fontFlagsBold = sis.readUB(1) == 1;
fontFlagsWideCodes = sis.readUB(1) == 1;
codeTable = new ArrayList<Integer>();
do {
if (fontFlagsWideCodes) {
codeTable.add(sis.readUI16());
} else {
codeTable.add(sis.readUI8());
}
} while (sis.available() > 0);
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineFontInfo";
}
}

View File

@@ -22,9 +22,9 @@ import java.io.IOException;
public class DefineFontNameTag extends Tag {
private int fontId;
private String fontName;
private String fontCopyright;
public int fontId;
public String fontName;
public String fontCopyright;
public DefineFontNameTag(byte[] data, int version, long pos) throws IOException {
super(88, data, pos);

View File

@@ -18,20 +18,23 @@ package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.SHAPE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* @author JPEXS
*/
public class DefineFontTag extends Tag {
public int fontId;
public int offsetTable[];
public SHAPE glyphShapeTable[];
/**
* Gets data bytes
*
@@ -43,10 +46,16 @@ public class DefineFontTag extends Tag {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
/*try {
//sos.write
} catch (IOException e) {
}*/
try {
sos.writeUI16(fontId);
for (int offset : offsetTable) {
sos.writeUI16(offset);
}
for (SHAPE shape : glyphShapeTable) {
sos.writeSHAPE(shape, 1);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
@@ -60,7 +69,18 @@ public class DefineFontTag extends Tag {
public DefineFontTag(byte data[], int version, long pos) throws IOException {
super(10, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
fontId = sis.readUI16();
int firstOffset = sis.readUI16();
int nGlyphs = firstOffset / 2;
offsetTable = new int[nGlyphs];
glyphShapeTable = new SHAPE[nGlyphs];
offsetTable[0] = firstOffset;
for (int i = 1; i < nGlyphs; i++) {
offsetTable[i] = sis.readUI16();
}
for (int i = 0; i < nGlyphs; i++) {
glyphShapeTable[i] = sis.readSHAPE(1);
}
}
/**

View File

@@ -0,0 +1,117 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.MORPHFILLSTYLEARRAY;
import com.jpexs.asdec.types.MORPHLINESTYLEARRAY;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.SHAPE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineMorphShape2Tag extends Tag {
public int characterId;
public RECT startBounds;
public RECT endBounds;
public RECT startEdgeBounds;
public RECT endEdgeBounds;
public boolean usesNonScalingStrokes;
public boolean usesScalingStrokes;
public MORPHFILLSTYLEARRAY morphFillStyles;
public MORPHLINESTYLEARRAY morphLineStyles;
public SHAPE startEdges;
public SHAPE endEdges;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterId);
sos.writeRECT(startBounds);
sos.writeRECT(endBounds);
sos.writeRECT(startEdgeBounds);
sos.writeRECT(endEdgeBounds);
sos.writeUB(6, 0);
sos.writeUB(1, usesNonScalingStrokes ? 1 : 0);
sos.writeUB(1, usesScalingStrokes ? 1 : 0);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
SWFOutputStream sos2 = new SWFOutputStream(baos2, version);
sos2.writeMORPHFILLSTYLEARRAY(morphFillStyles, 2);
sos2.writeMORPHLINESTYLEARRAY(morphLineStyles, 2);
sos2.writeSHAPE(startEdges, 1);
byte ba2[] = baos2.toByteArray();
sos.writeUI32(ba2.length);
sos.write(ba2);
sos.writeSHAPE(endEdges, 1);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineMorphShape2Tag(byte data[], int version, long pos) throws IOException {
super(84, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterId = sis.readUI16();
startBounds = sis.readRECT();
endBounds = sis.readRECT();
startEdgeBounds = sis.readRECT();
endEdgeBounds = sis.readRECT();
sis.readUB(6); //reserved
usesNonScalingStrokes = sis.readUB(1) == 1;
usesScalingStrokes = sis.readUB(1) == 1;
long offset = sis.readUI32();
morphFillStyles = sis.readMORPHFILLSTYLEARRAY();
morphLineStyles = sis.readMORPHLINESTYLEARRAY(2);
startEdges = sis.readSHAPE(1);
endEdges = sis.readSHAPE(1);
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineMorphShape2";
}
}

View File

@@ -0,0 +1,104 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.MORPHFILLSTYLEARRAY;
import com.jpexs.asdec.types.MORPHLINESTYLEARRAY;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.SHAPE;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineMorphShapeTag extends Tag {
public int characterId;
public RECT startBounds;
public RECT endBounds;
public MORPHFILLSTYLEARRAY morphFillStyles;
public MORPHLINESTYLEARRAY morphLineStyles;
public SHAPE startEdges;
public SHAPE endEdges;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterId);
sos.writeRECT(startBounds);
sos.writeRECT(endBounds);
ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
SWFOutputStream sos2 = new SWFOutputStream(baos2, version);
sos2.writeMORPHFILLSTYLEARRAY(morphFillStyles, 1);
sos2.writeMORPHLINESTYLEARRAY(morphLineStyles, 1);
sos2.writeSHAPE(startEdges, 1);
byte d[] = baos2.toByteArray();
sos.writeUI32(d.length);
sos.write(d);
sos.writeSHAPE(endEdges, 1);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineMorphShapeTag(byte data[], int version, long pos) throws IOException {
super(46, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterId = sis.readUI16();
startBounds = sis.readRECT();
endBounds = sis.readRECT();
long offset = sis.readUI32(); //ignore
morphFillStyles = sis.readMORPHFILLSTYLEARRAY();
morphLineStyles = sis.readMORPHLINESTYLEARRAY(1);
startEdges = sis.readSHAPE(1);
endEdges = sis.readSHAPE(1);
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineMorphShape";
}
}

View File

@@ -22,8 +22,6 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*

View File

@@ -23,15 +23,17 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
public class DefineShape2Tag extends Tag {
public int shapeId;
public RECT shapeBounds;
public SHAPEWITHSTYLE shapes;
public DefineShape2Tag(byte[] data, int version, long pos) throws IOException {
super(22, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
shapeId=sis.readUI16();
shapeBounds=sis.readRECT();
shapes=sis.readSHAPEWITHSTYLE(2);
shapeId = sis.readUI16();
shapeBounds = sis.readRECT();
shapes = sis.readSHAPEWITHSTYLE(2);
}
@Override

View File

@@ -31,18 +31,18 @@ public class DefineShape4Tag extends Tag {
public boolean usesNonScalingStrokes;
public boolean usesScalingStrokes;
public SHAPEWITHSTYLE shapes;
public DefineShape4Tag(byte[] data, int version, long pos) throws IOException {
super(83, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
shapeId=sis.readUI16();
shapeBounds=sis.readRECT();
edgeBounds=sis.readRECT();
shapeId = sis.readUI16();
shapeBounds = sis.readRECT();
edgeBounds = sis.readRECT();
sis.readUB(5);
usesFillWindingRule=sis.readUB(1)==1;
usesNonScalingStrokes=sis.readUB(1)==1;
usesScalingStrokes=sis.readUB(1)==1;
shapes=sis.readSHAPEWITHSTYLE(4);
usesFillWindingRule = sis.readUB(1) == 1;
usesNonScalingStrokes = sis.readUB(1) == 1;
usesScalingStrokes = sis.readUB(1) == 1;
shapes = sis.readSHAPEWITHSTYLE(4);
}
@Override

View File

@@ -27,12 +27,13 @@ public class DefineShapeTag extends Tag {
public int shapeId;
public RECT shapeBounds;
public SHAPEWITHSTYLE shapes;
public DefineShapeTag(byte[] data, int version, long pos) throws IOException {
super(2, data, pos);
super(2, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
shapeId=sis.readUI16();
shapeBounds=sis.readRECT();
shapes=sis.readSHAPEWITHSTYLE(1);
shapeId = sis.readUI16();
shapeBounds = sis.readRECT();
shapes = sis.readSHAPEWITHSTYLE(1);
}
@Override

View File

@@ -0,0 +1,98 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineSoundTag extends Tag {
public int soundId;
public int soundFormat;
public static final int FORMAT_UNCOMPRESSED_NATIVE_ENDIAN = 0;
public static final int FORMAT_ADPCM = 1;
public static final int FORMAT_MP3 = 2;
public static final int FORMAT_UNCOMPRESSED_LITTLE_ENDIAN = 3;
public static final int FORMAT_NELLYMOSER16KHZ = 4;
public static final int FORMAT_NELLYMOSER8KHZ = 5;
public static final int FORMAT_NELLYMOSER = 6;
public static final int FORMAT_SPEEX = 11;
public int soundRate;
public boolean soundType;//true=stereo
public long soundSampleCount;
public byte soundData[];
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(soundId);
sos.writeUB(4, soundFormat);
sos.writeUB(2, soundRate);
sos.writeUB(1, soundType ? 1 : 0);
sos.writeUI32(soundSampleCount);
sos.write(soundData);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineSoundTag(byte data[], int version, long pos) throws IOException {
super(14, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
soundId = sis.readUI16();
soundFormat = (int) sis.readUB(4);
soundRate = (int) sis.readUB(2);
soundType = sis.readUB(1) == 1;
soundSampleCount = sis.readUI32();
soundData = sis.readBytes(sis.available());
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineSound";
}
}

View File

@@ -16,12 +16,12 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.Main;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.tags.base.TagName;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

View File

@@ -0,0 +1,102 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.MATRIX;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.TEXTRECORD;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
*
* @author JPEXS
*/
public class DefineText2Tag extends Tag {
public int characterID;
public RECT textBounds;
public MATRIX textMatrix;
public int glyphBits;
public int advanceBits;
public List<TEXTRECORD> textRecords;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterID);
sos.writeRECT(textBounds);
sos.writeMatrix(textMatrix);
sos.writeUI8(glyphBits);
sos.writeUI8(advanceBits);
for (TEXTRECORD tr : textRecords) {
sos.writeTEXTRECORD(tr, true, glyphBits, advanceBits);
}
sos.writeUI8(0);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineText2Tag(byte data[], int version, long pos) throws IOException {
super(33, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
textBounds = sis.readRECT();
textMatrix = sis.readMatrix();
glyphBits = sis.readUI8();
advanceBits = sis.readUI8();
textRecords = new ArrayList<TEXTRECORD>();
TEXTRECORD tr;
while ((tr = sis.readTEXTRECORD(true, glyphBits, advanceBits)) != null) {
textRecords.add(tr);
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineText2";
}
}

View File

@@ -18,6 +18,9 @@ package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.MATRIX;
import com.jpexs.asdec.types.RECT;
import com.jpexs.asdec.types.TEXTRECORD;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -26,12 +29,19 @@ import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* @author JPEXS
*/
public class DefineTextTag extends Tag {
public int characterID;
public RECT textBounds;
public MATRIX textMatrix;
public int glyphBits;
public int advanceBits;
public List<TEXTRECORD> textRecords;
/**
* Gets data bytes
*
@@ -43,10 +53,18 @@ public class DefineTextTag extends Tag {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
/*try {
//sos.write
} catch (IOException e) {
}*/
try {
sos.writeUI16(characterID);
sos.writeRECT(textBounds);
sos.writeMatrix(textMatrix);
sos.writeUI8(glyphBits);
sos.writeUI8(advanceBits);
for (TEXTRECORD tr : textRecords) {
sos.writeTEXTRECORD(tr, false, glyphBits, advanceBits);
}
sos.writeUI8(0);
} catch (IOException e) {
}
return baos.toByteArray();
}
@@ -60,7 +78,16 @@ public class DefineTextTag extends Tag {
public DefineTextTag(byte data[], int version, long pos) throws IOException {
super(11, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterID = sis.readUI16();
textBounds = sis.readRECT();
textMatrix = sis.readMatrix();
glyphBits = sis.readUI8();
advanceBits = sis.readUI8();
textRecords = new ArrayList<TEXTRECORD>();
TEXTRECORD tr;
while ((tr = sis.readTEXTRECORD(false, glyphBits, advanceBits)) != null) {
textRecords.add(tr);
}
}
/**

View File

@@ -0,0 +1,95 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class DefineVideoStreamTag extends Tag {
public int characterId;
public int numFrames;
public int width;
public int height;
public int videoFlagsDeblocking;
public boolean videoFlagsSmoothing;
public int codecID;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(characterId);
sos.writeUI16(numFrames);
sos.writeUI16(width);
sos.writeUI16(height);
sos.writeUB(4, 0);
sos.writeUB(3, videoFlagsDeblocking);
sos.writeUB(1, videoFlagsSmoothing ? 1 : 0);
sos.writeUI8(codecID);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public DefineVideoStreamTag(byte data[], int version, long pos) throws IOException {
super(60, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
characterId = sis.readUI16();
numFrames = sis.readUI16();
width = sis.readUI16();
height = sis.readUI16();
sis.readUB(4);
videoFlagsDeblocking = (int) sis.readUB(3);
videoFlagsSmoothing = sis.readUB(1) == 1;
codecID = sis.readUI8();
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "DefineVideoStream";
}
}

View File

@@ -16,9 +16,9 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.action.Action;
import com.jpexs.asdec.tags.base.ASMSource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;

View File

@@ -16,11 +16,11 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.TagName;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.action.Action;
import com.jpexs.asdec.tags.base.ASMSource;
import com.jpexs.asdec.tags.base.TagName;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

View File

@@ -30,6 +30,7 @@ import java.io.OutputStream;
*/
public class EnableDebugger2Tag extends Tag {
public int reserved;
/**
* MD5 hash of password
*/
@@ -47,7 +48,7 @@ public class EnableDebugger2Tag extends Tag {
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(0);//reserved
sos.writeUI16(reserved);
sos.writeString(passwordHash);
} catch (IOException e) {
@@ -65,7 +66,7 @@ public class EnableDebugger2Tag extends Tag {
public EnableDebugger2Tag(byte data[], int version, long pos) throws IOException {
super(64, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
sis.readUI16(); //reserved
reserved = sis.readUI16();
passwordHash = sis.readString();
}

View File

@@ -16,14 +16,7 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Extends the functionality of the PlaceObject2Tag

View File

@@ -54,7 +54,7 @@ public class ExportAssetsTag extends Tag {
assets.put(characterId, name);
}
}
/**
* Gets data bytes
*
@@ -68,7 +68,7 @@ public class ExportAssetsTag extends Tag {
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(assets.size());
for(int characterId:assets.keySet()){
for (int characterId : assets.keySet()) {
sos.writeUI16(characterId);
sos.writeString(assets.get(characterId));
}

View File

@@ -25,27 +25,30 @@ import java.io.OutputStream;
public class FileAttributesTag extends Tag {
private boolean useDirectBlit;
private boolean useGPU;
private boolean hasMetadata;
private boolean actionScript3;
private boolean useNetwork;
public boolean useDirectBlit;
public boolean useGPU;
public boolean hasMetadata;
public boolean actionScript3;
public boolean useNetwork;
private int reserved1;
private int reserved2;
private int reserved3;
public FileAttributesTag(byte[] data, int version, long pos) throws IOException {
super(69, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
sis.readUB(1); // reserved
reserved1 = (int) sis.readUB(1); // reserved
// UB[1] == 0 (reserved)
useDirectBlit = sis.readUB(1) != 0;
useGPU = sis.readUB(1) != 0;
hasMetadata = sis.readUB(1) != 0;
actionScript3 = sis.readUB(1) != 0;
sis.readUB(2); // reserved
reserved2 = (int) sis.readUB(2); // reserved
useNetwork = sis.readUB(1) != 0;
// UB[24] == 0 (reserved)
sis.readUB(24); //reserved
reserved3 = (int) sis.readUB(24); //reserved
}
/**
* Gets data bytes
*
@@ -58,24 +61,14 @@ public class FileAttributesTag extends Tag {
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUB(1, 0); //reserved
if(useDirectBlit){
sos.writeUB(1, 1);
}
if(useGPU){
sos.writeUB(1, 1);
}
if(hasMetadata){
sos.writeUB(1, 1);
}
if(actionScript3){
sos.writeUB(1, 1);
}
sos.writeUB(2, 0); //reserved
if(useNetwork){
sos.writeUB(1, 1);
}
sos.writeUB(24, 0); //reserved
sos.writeUB(1, reserved1); //reserved
sos.writeUB(1, useDirectBlit ? 1 : 0);
sos.writeUB(1, useGPU ? 1 : 0);
sos.writeUB(1, hasMetadata ? 1 : 0);
sos.writeUB(1, actionScript3 ? 1 : 0);
sos.writeUB(2, reserved2); //reserved
sos.writeUB(1, useNetwork ? 1 : 0);
sos.writeUB(24, reserved3); //reserved
} catch (IOException e) {
}
return baos.toByteArray();

View File

@@ -21,8 +21,7 @@ import java.io.IOException;
public class JPEGTablesTag extends Tag {
public JPEGTablesTag(byte[] data, long pos) throws IOException {
super(8, data, pos);
// TODO Auto-generated constructor stub
super(8, data, pos); //data is JPEG data
}
@Override

View File

@@ -25,18 +25,17 @@ import java.io.OutputStream;
public class MetadataTag extends Tag {
private String xmlMetadata;
public String xmlMetadata;
public MetadataTag(byte[] data, int version, long pos) {
super(77, data, pos);
super(77, data, pos);
try {
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
xmlMetadata = sis.readString();
} catch (IOException ex) {
}
}
/**
* Gets data bytes
*

View File

@@ -21,16 +21,16 @@ package com.jpexs.asdec.tags;
* @author JPEXS
*/
public class NotDefinedTag extends Tag {
private String name;
public NotDefinedTag(String name,int id, byte[] data, long pos) {
public NotDefinedTag(String name, int id, byte[] data, long pos) {
super(id, data, pos);
this.name=name;
this.name = name;
}
@Override
public String toString() {
return name;
}
}

View File

@@ -16,11 +16,11 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.Main;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.types.CLIPACTIONS;
import com.jpexs.asdec.types.CXFORMWITHALPHA;
import com.jpexs.asdec.types.MATRIX;

View File

@@ -16,11 +16,11 @@
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.Main;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.abc.CopyOutputStream;
import com.jpexs.asdec.tags.base.Container;
import com.jpexs.asdec.types.CLIPACTIONS;
import com.jpexs.asdec.types.CXFORMWITHALPHA;
import com.jpexs.asdec.types.MATRIX;

View File

@@ -22,13 +22,13 @@ import java.io.IOException;
public class ProductInfoTag extends Tag {
private long productID;
private long edition;
private int majorVersion;
private int minorVersion;
private long buildLow;
private long buildHigh;
private long compilationDate;
public long productID;
public long edition;
public int majorVersion;
public int minorVersion;
public long buildLow;
public long buildHigh;
public long compilationDate;
public ProductInfoTag(byte[] data, int version, long pos) throws IOException {
super(41, data, pos);

View File

@@ -22,7 +22,7 @@ import java.io.IOException;
public class RemoveObject2Tag extends Tag {
private int depth;
public int depth;
public RemoveObject2Tag(byte[] data, int version, long pos) throws IOException {
super(28, data, pos);

View File

@@ -25,8 +25,8 @@ import java.io.OutputStream;
public class ScriptLimitsTag extends Tag {
private int maxRecursionDepth;
private int scriptTimeoutSeconds;
public int maxRecursionDepth;
public int scriptTimeoutSeconds;
public ScriptLimitsTag(byte[] data, int version, long pos) throws IOException {
super(65, data, pos);
@@ -53,7 +53,7 @@ public class ScriptLimitsTag extends Tag {
}
return baos.toByteArray();
}
@Override
public String toString() {
return "ScriptLimits";

View File

@@ -20,7 +20,7 @@ import com.jpexs.asdec.types.RGB;
public class SetBackgroundColorTag extends Tag {
private RGB backgroundColor;
public RGB backgroundColor;
public SetBackgroundColorTag(byte[] data, long pos) {
super(9, data, pos);

View File

@@ -79,6 +79,6 @@ public class SetTabIndexTag extends Tag {
*/
@Override
public String toString() {
return "";
return "SetTabIndex";
}
}

View File

@@ -0,0 +1,48 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import java.io.IOException;
/**
*
*
* @author JPEXS
*/
public class SoundStreamBlockTag extends Tag {
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public SoundStreamBlockTag(byte data[], int version, long pos) throws IOException {
super(19, data, pos); //all data is streamSoundData
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "SoundStreamBlock";
}
}

View File

@@ -0,0 +1,105 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class SoundStreamHead2Tag extends Tag {
public int playBackSoundRate;
public int playBackSoundSize;
public int playBackSoundType;
public int streamSoundCompression;
public int streamSoundRate;
public int streamSoundSize;
public int streamSoundType;
public int streamSoundSampleCount;
public int latencySeek;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUB(4, 0);//reserved
sos.writeUB(2, playBackSoundRate);
sos.writeUB(1, playBackSoundSize);
sos.writeUB(1, playBackSoundType);
sos.writeUB(4, streamSoundCompression);
sos.writeUB(2, streamSoundRate);
sos.writeUB(1, streamSoundSize);
sos.writeUB(1, streamSoundType);
sos.writeUI16(streamSoundSampleCount);
if (streamSoundCompression == 2) {
sos.writeSI16(latencySeek);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public SoundStreamHead2Tag(byte data[], int version, long pos) throws IOException {
super(45, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
sis.readUB(4);//reserved
playBackSoundRate = (int) sis.readUB(2);
playBackSoundSize = (int) sis.readUB(1);
playBackSoundType = (int) sis.readUB(1);
streamSoundCompression = (int) sis.readUB(4);
streamSoundRate = (int) sis.readUB(2);
streamSoundSize = (int) sis.readUB(1);
streamSoundType = (int) sis.readUB(1);
streamSoundSampleCount = sis.readUI16();
if (streamSoundCompression == 2) {
latencySeek = sis.readSI16();
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "SoundStreamHead2";
}
}

View File

@@ -0,0 +1,105 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class SoundStreamHeadTag extends Tag {
public int playBackSoundRate;
public int playBackSoundSize;
public int playBackSoundType;
public int streamSoundCompression;
public int streamSoundRate;
public int streamSoundSize;
public int streamSoundType;
public int streamSoundSampleCount;
public int latencySeek;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUB(4, 0);//reserved
sos.writeUB(2, playBackSoundRate);
sos.writeUB(1, playBackSoundSize);
sos.writeUB(1, playBackSoundType);
sos.writeUB(4, streamSoundCompression);
sos.writeUB(2, streamSoundRate);
sos.writeUB(1, streamSoundSize);
sos.writeUB(1, streamSoundType);
sos.writeUI16(streamSoundSampleCount);
if (streamSoundCompression == 2) {
sos.writeSI16(latencySeek);
}
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public SoundStreamHeadTag(byte data[], int version, long pos) throws IOException {
super(18, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
sis.readUB(4);//reserved
playBackSoundRate = (int) sis.readUB(2);
playBackSoundSize = (int) sis.readUB(1);
playBackSoundType = (int) sis.readUB(1);
streamSoundCompression = (int) sis.readUB(4);
streamSoundRate = (int) sis.readUB(2);
streamSoundSize = (int) sis.readUB(1);
streamSoundType = (int) sis.readUB(1);
streamSoundSampleCount = sis.readUI16();
if (streamSoundCompression == 2) {
latencySeek = sis.readSI16();
}
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "SoundStreamHead";
}
}

View File

@@ -0,0 +1,78 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.SOUNDINFO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class StartSound2Tag extends Tag {
public String soundClassName;
public SOUNDINFO soundInfo;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
/*try {
//sos.write
} catch (IOException e) {
}*/
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public StartSound2Tag(byte data[], int version, long pos) throws IOException {
super(89, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
soundClassName = sis.readString();
soundInfo = sis.readSOUNDINFO();
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "StartSound2";
}
}

View File

@@ -0,0 +1,79 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import com.jpexs.asdec.types.SOUNDINFO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class StartSoundTag extends Tag {
public int soundId;
public SOUNDINFO soundInfo;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(soundId);
sos.writeSOUNDINFO(soundInfo);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public StartSoundTag(byte data[], int version, long pos) throws IOException {
super(15, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
soundId = sis.readUI16();
soundInfo = sis.readSOUNDINFO();
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "StartSound";
}
}

View File

@@ -25,8 +25,8 @@ import java.io.OutputStream;
public class SymbolClassTag extends Tag {
private int tagIDs[];
private String classNames[];
public int tagIDs[];
public String classNames[];
public SymbolClassTag(byte[] data, int version, long pos) throws IOException {
super(76, data, pos);

View File

@@ -69,6 +69,15 @@ public class Tag {
return data;
}
/**
* Gets original read data
*
* @return Bytes of data
*/
public byte[] getOriginalData() {
return data;
}
/**
* Returns string representation of the object
*

View File

@@ -22,15 +22,13 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* @author JPEXS
*/
public class StubTag extends Tag {
public class TagStub extends Tag {
/**
* Gets data bytes
@@ -57,7 +55,7 @@ public class StubTag extends Tag {
* @param version SWF version
* @throws IOException
*/
public StubTag(byte data[], int version, long pos) throws IOException {
public TagStub(byte data[], int version, long pos) throws IOException {
super(0, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);

View File

@@ -0,0 +1,81 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.tags;
import com.jpexs.asdec.SWFInputStream;
import com.jpexs.asdec.SWFOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
*
*
* @author JPEXS
*/
public class VideoFrameTag extends Tag {
public int streamID;
public int frameNum;
public byte[] videoData;
/**
* Gets data bytes
*
* @param version SWF version
* @return Bytes of data
*/
@Override
public byte[] getData(int version) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream os = baos;
SWFOutputStream sos = new SWFOutputStream(os, version);
try {
sos.writeUI16(streamID);
sos.writeUI16(frameNum);
sos.write(videoData);
} catch (IOException e) {
}
return baos.toByteArray();
}
/**
* Constructor
*
* @param data Data bytes
* @param version SWF version
* @throws IOException
*/
public VideoFrameTag(byte data[], int version, long pos) throws IOException {
super(61, data, pos);
SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version);
streamID = sis.readUI16();
frameNum = sis.readUI16();
videoData = sis.readBytes(sis.available()); //TODO: Parse video packets
}
/**
* Returns string representation of the object
*
* @return String representation of the object
*/
@Override
public String toString() {
return "VideoFrame";
}
}

View File

@@ -32,9 +32,7 @@ public class CXFORM {
* Has color multiply values
*/
public boolean hasMultTerms;
public int nbits;
/**
* Red multiply value
*/
@@ -47,7 +45,6 @@ public class CXFORM {
* Blue multiply value
*/
public int blueMultTerm;
/**
* Red addition value
*/
@@ -60,5 +57,4 @@ public class CXFORM {
* Blue addition value
*/
public int blueAddTerm;
}

View File

@@ -21,16 +21,16 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class FILLSTYLE {
public int fillStyleType;
public static final int SOLID=0x0;
public static final int LINEAR_GRADIENT=0x10;
public static final int RADIAL_GRADIENT=0x12;
public static final int FOCAL_RADIAL_GRADIENT=0x13;
public static final int REPEATING_BITMAP=0x40;
public static final int CLIPPED_BITMAP=0x41;
public static final int NON_SMOOTHED_REPEATING_BITMAP=0x42;
public static final int NON_SMOOTHED_CLIPPED_BITMAP=0x43;
public static final int SOLID = 0x0;
public static final int LINEAR_GRADIENT = 0x10;
public static final int RADIAL_GRADIENT = 0x12;
public static final int FOCAL_RADIAL_GRADIENT = 0x13;
public static final int REPEATING_BITMAP = 0x40;
public static final int CLIPPED_BITMAP = 0x41;
public static final int NON_SMOOTHED_REPEATING_BITMAP = 0x42;
public static final int NON_SMOOTHED_CLIPPED_BITMAP = 0x43;
public boolean inShape3;
public RGB color;
public RGBA colorA; //Shape3
@@ -39,5 +39,4 @@ public class FILLSTYLE {
public FOCALGRADIENT focalGradient;
public int bitmapId;
public MATRIX bitmapMatrix;
}

View File

@@ -21,5 +21,6 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class FILLSTYLEARRAY {
public FILLSTYLE fillStyles[];
}

View File

@@ -21,10 +21,9 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class FOCALGRADIENT {
public int spreadMode;
public int interPolationMode;
public GRADRECORD gradientRecords[];
public float focalPoint;
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class GLYPHENTRY {
public int glyphIndex;
public int glyphAdvance;
}

View File

@@ -21,20 +21,16 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class GRADIENT {
public int spreadMode;
public static final int SPREAD_PAD_MODE=0;
public static final int SPREAD_REFLECT_MODE=1;
public static final int SPREAD_REPAT_MODE=2;
public static final int SPREAD_RESERVED=3;
public static final int SPREAD_PAD_MODE = 0;
public static final int SPREAD_REFLECT_MODE = 1;
public static final int SPREAD_REPAT_MODE = 2;
public static final int SPREAD_RESERVED = 3;
public int interPolationMode;
public static final int INTERPOLATION_RGB_MODE=0;
public static final int INTERPOLATION_LINEAR_RGB_MODE=1;
public static final int INTERPOLATION_RESERVED1=2;
public static final int INTERPOLATION_RESERVED2=3;
public static final int INTERPOLATION_RGB_MODE = 0;
public static final int INTERPOLATION_LINEAR_RGB_MODE = 1;
public static final int INTERPOLATION_RESERVED1 = 2;
public static final int INTERPOLATION_RESERVED2 = 3;
public GRADRECORD gradientRecords[];
}

View File

@@ -21,9 +21,9 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class GRADRECORD {
public int ratio;
public boolean inShape3;
public RGB color;
public RGBA colorA;
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
* Represents 24-bit red, green, blue value
*
* @author JPEXS
*/
public class KERNINGRECORD {
public int fontKerningCode1;
public int fontKerningCode2;
public int fontKerningAdjustment;
}

View File

@@ -0,0 +1,26 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class LANGCODE {
public int languageCode;
}

View File

@@ -21,8 +21,8 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class LINESTYLE {
public int width;
public RGB color;
public RGBA colorA;
}

View File

@@ -21,27 +21,23 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class LINESTYLE2 {
public int width;
public int startCapStyle;
public int joinStyle;
public static final int ROUND_JOIN=0;
public static final int BEVEL_JOIN=1;
public static final int MITER_JOIN=2;
public static final int ROUND_JOIN = 0;
public static final int BEVEL_JOIN = 1;
public static final int MITER_JOIN = 2;
public boolean hasFillFlag;
public boolean noHScaleFlag;
public boolean noVScaleFlag;
public boolean pixelHintingFlag;
public boolean noClose;
public int endCapStyle;
public static final int ROUND_CAP=0;
public static final int NO_CAP=1;
public static final int SQUARE_CAP=2;
public static final int ROUND_CAP = 0;
public static final int NO_CAP = 1;
public static final int SQUARE_CAP = 2;
public int miterLimitFactor;
public RGBA color;
public FILLSTYLE fillType;
}

View File

@@ -21,6 +21,7 @@ package com.jpexs.asdec.types;
* @author JPEXS
*/
public class LINESTYLEARRAY {
public LINESTYLE lineStyles[];
public LINESTYLE2 lineStyles2[];
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHFILLSTYLE {
public int fillStyleType;
public static final int SOLID = 0x0;
public static final int LINEAR_GRADIENT = 0x10;
public static final int RADIAL_GRADIENT = 0x12;
public static final int REPEATING_BITMAP = 0x40;
public static final int CLIPPED_BITMAP = 0x41;
public static final int NON_SMOOTHED_REPEATING_BITMAP = 0x42;
public static final int NON_SMOOTHED_CLIPPED_BITMAP = 0x43;
public RGBA startColor;
public RGBA endColor;
public MATRIX startGradientMatrix;
public MATRIX endGradientMatrix;
public MORPHGRADIENT gradient;
public int bitmapId;
public MATRIX startBitmapMatrix;
public MATRIX endBitmapMatrix;
}

View File

@@ -0,0 +1,26 @@
/*
* Copyright (C) 2010-2013 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHFILLSTYLEARRAY {
public MORPHFILLSTYLE fillStyles[];
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHGRADIENT {
public int numGradients;
public MORPHGRADRECORD gradientRecords[];
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHGRADRECORD {
public int startRatio;
public RGBA startColor;
public int endRatio;
public RGBA endColor;
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHLINESTYLE {
public int startWidth;
public int endWidth;
public RGBA startColor;
public RGBA endColor;
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHLINESTYLE2 {
public int startWidth;
public int endWidth;
public int startCapStyle;
public int joinStyle;
public static final int ROUND_JOIN = 0;
public static final int BEVEL_JOIN = 1;
public static final int MITER_JOIN = 2;
public boolean hasFillFlag;
public boolean noHScaleFlag;
public boolean noVScaleFlag;
public boolean pixelHintingFlag;
public boolean noClose;
public int endCapStyle;
public static final int ROUND_CAP = 0;
public static final int NO_CAP = 1;
public static final int SQUARE_CAP = 2;
public int miterLimitFactor;
public RGBA startColor;
public RGBA endColor;
public MORPHFILLSTYLE fillType;
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright (C) 2010-2013 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class MORPHLINESTYLEARRAY {
public MORPHLINESTYLE lineStyles[];
public MORPHLINESTYLE2 lineStyles2[];
}

View File

@@ -24,6 +24,7 @@ import java.util.List;
* @author JPEXS
*/
public class SHAPE {
public int numFillBits;
public int numLineBits;
public List<SHAPERECORD> shapeRecords;

View File

@@ -24,9 +24,10 @@ import java.util.List;
* @author JPEXS
*/
public class SHAPEWITHSTYLE {
public FILLSTYLEARRAY fillStyles;
public LINESTYLEARRAY lineStyles;
public int numFillBits;
public int numLineBits;
public int numLineBits;
public List<SHAPERECORD> shapeRecords;
}

View File

@@ -0,0 +1,28 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class SOUNDENVELOPE {
public long pos44;
public int leftLevel;
public int rightLevel;
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class SOUNDINFO {
public boolean syncStop;
public boolean syncNoMultiple;
public boolean hasEnvelope;
public boolean hasLoops;
public boolean hasOutPoint;
public boolean hasInPoint;
public long inPoint;
public long outPoint;
public int loopCount;
public SOUNDENVELOPE envelopeRecords[];
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
*
* @author JPEXS
*/
public class TEXTRECORD {
public boolean styleFlagsHasFont;
public boolean styleFlagsHasColor;
public boolean styleFlagsHasYOffset;
public boolean styleFlagsHasXOffset;
public int fontId;
public RGB textColor;
public RGBA textColorA;
public int xOffset;
public int yOffset;
public int textHeight;
public GLYPHENTRY glyphEntries[];
}

View File

@@ -0,0 +1,28 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
* Represents 32-bit alpha, red, green and blue value
*
* @author JPEXS
*/
public class ZONEDATA {
public float alignmentCoordinate;
public float range;
}

View File

@@ -0,0 +1,29 @@
/*
* Copyright (C) 2010-2011 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.asdec.types;
/**
* Represents 32-bit alpha, red, green and blue value
*
* @author JPEXS
*/
public class ZONERECORD {
public ZONEDATA zonedata[];
public boolean zoneMaskX;
public boolean zoneMaskY;
}

View File

@@ -16,17 +16,22 @@
*/
package com.jpexs.asdec.types.shaperecords;
/**
*
* @author JPEXS
*/
public class CurvedEdgeRecord implements SHAPERECORD{
public int typeFlag=1;
public int straightFlag=0;
public class CurvedEdgeRecord implements SHAPERECORD {
public int typeFlag = 1;
public int straightFlag = 0;
public int numBits;
public int controlDeltaX;
public int controlDeltaY;
public int anchorDeltaX;
public int anchorDeltaY;
@Override
public String toString() {
return "[CurvedEdgeRecord numBits=" + numBits + ", controlDeltaX=" + controlDeltaX + ", controlDeltaY=" + controlDeltaY + ", anchorDeltaX=" + anchorDeltaX + ". anchorDeltaY=" + anchorDeltaY + "]";
}
}

View File

@@ -20,7 +20,13 @@ package com.jpexs.asdec.types.shaperecords;
*
* @author JPEXS
*/
public class EndShapeRecord implements SHAPERECORD{
public int typeFlag=0;
public int endOfShape=0;
public class EndShapeRecord implements SHAPERECORD {
public int typeFlag = 0;
public int endOfShape = 0;
@Override
public String toString() {
return "[EndShapeRecord]";
}
}

View File

@@ -21,5 +21,4 @@ package com.jpexs.asdec.types.shaperecords;
* @author JPEXS
*/
public interface SHAPERECORD {
}

View File

@@ -16,17 +16,22 @@
*/
package com.jpexs.asdec.types.shaperecords;
/**
*
* @author JPEXS
*/
public class StraightEdgeRecord implements SHAPERECORD{
public int typeFlag=1;
public int straightFlag=1;
public class StraightEdgeRecord implements SHAPERECORD {
public int typeFlag = 1;
public int straightFlag = 1;
public int numBits;
public boolean generalLineFlag;
public boolean vertLineFlag;
public int deltaX;
public int deltaY;
public int deltaY;
@Override
public String toString() {
return "[StraightEdgeRecord numBits=" + numBits + ", generalLineFlag=" + generalLineFlag + ", vertLineFlag=" + vertLineFlag + ", deltaX=" + deltaX + ", deltaY=" + deltaY + "]";
}
}

Some files were not shown because too many files have changed in this diff Show More