| CODENOTIFIER | HelpYou are not signed inSign in |
Project: Flanderra
Revision: 17
Author: pcherkas
Date: 02 Aug 2008 18:09:21
Changes:1. developed SWFIO
2. dtd for structure files
3. developed support for custom shapes
| ... | ...@@ -3,17 +3,14 @@ | |
| 3 | 3 | import java.io.IOException; |
| 4 | 4 | import java.io.InputStream; |
| 5 | 5 | import java.io.OutputStream; |
| 6 | import java.io.PrintWriter; | |
| 7 | 6 | import java.util.ArrayList; |
| 8 | 7 | import java.util.HashMap; |
| 9 | 8 | import java.util.Iterator; |
| 10 | 9 | import java.util.List; |
| 11 | 10 | import java.util.Map; |
| 12 | 11 | import java.util.Properties; |
| 13 | import java.util.Set; | |
| 14 | 12 | |
| 15 | 13 | import org.apache.commons.beanutils.PropertyUtils; |
| 16 | import org.junit.Assert; | |
| 17 | 14 | |
| 18 | 15 | public class PropertiesStubUtil implements IStubUtil { |
| 19 | 16 | private static PropertiesStubUtil instance; |
| ... | ...@@ -87,7 +84,7 @@ | |
| 87 | 84 | |
| 88 | 85 | public void write(Map<String, Object> input, OutputStream output) { |
| 89 | 86 | try { |
| 90 | write("swf", input, output); | |
| 87 | write("", input, output); | |
| 91 | 88 | } catch (IOException e) { |
| 92 | 89 | e.printStackTrace(); |
| 93 | 90 | } |
| ... | ...@@ -95,16 +92,18 @@ | |
| 95 | 92 | |
| 96 | 93 | public void write(String prefix, Object obj1, OutputStream output) throws IOException { |
| 97 | 94 | if (obj1 instanceof Map) { |
| 95 | prefix = (prefix == null || prefix.equals(""))? "" : prefix + "."; | |
| 98 | 96 | for (Iterator iterator1 = ((Map) obj1).keySet().iterator(); iterator1.hasNext();) { |
| 99 | 97 | String key = (String) iterator1.next(); |
| 100 | 98 | Object obj2 = ((Map) obj1).get(key); |
| 101 | write(prefix + "." + key, obj2, output); | |
| 99 | write(prefix + key, obj2, output); | |
| 102 | 100 | } |
| 103 | 101 | } else if (obj1 instanceof List) { |
| 104 | 102 | int i = 0; |
| 103 | prefix = (prefix == null || prefix.equals(""))? "" : prefix + "."; | |
| 105 | 104 | for (Iterator iterator2 = ((List) obj1).iterator(); iterator2.hasNext(); i++) { |
| 106 | 105 | Object obj2 = (Object) iterator2.next(); |
| 107 | write(prefix + "." + i, obj2, output); | |
| 106 | write(prefix + i, obj2, output); | |
| 108 | 107 | } |
| 109 | 108 | } else { |
| 110 | 109 | output.write((prefix + "=" + obj1 + "\n").getBytes()); |
| ... | ...@@ -1,40 +1,19 @@ | |
| 1 | <types> | |
| 2 | <type name="SetBackgroundColor"> | |
| 3 | <field type="RGB" name="backgroundColor"/> | |
| 4 | </type> | |
| 5 | <!-- | |
| 6 | <type name="DefineShape"> | |
| 7 | <field type="NONE" autocalculated="true" name="defineShapeVersion" value="1"/> | |
| 8 | <field type="UI16" name="shapeId"/> | |
| 9 | <field type="RECT" name="shapeBounds"/> | |
| 10 | <field type="SHAPEWITHSTYLE" name="shapes"/> | |
| 11 | </type> | |
| 12 | <type name="DefineShape2"> | |
| 13 | <field type="NONE" autocalculated="true" name="defineShapeVersion" value="2"/> | |
| 14 | <field type="UI16" name="shapeId"/> | |
| 15 | <field type="RECT" name="shapeBounds"/> | |
| 16 | <field type="SHAPEWITHSTYLE" name="shapes"/> | |
| 17 | </type> | |
| 18 | <type name="DefineShape3"> | |
| 19 | <field type="NONE" autocalculated="true" name="defineShapeVersion" value="3"/> | |
| 20 | <field type="UI16" name="shapeId"/> | |
| 21 | <field type="RECT" name="shapeBounds"/> | |
| 22 | <field type="SHAPEWITHSTYLE" name="shapes"/> | |
| 23 | </type> | |
| 24 | --> | |
| 25 | <type name="PlaceObject"> | |
| 26 | <field type="NONE" autocalculated="true" name="placeObjectVersion" value="1"/> | |
| 27 | <field type="UI16" name="shapeId"/> | |
| 28 | <field type="UI16" name="depth"/> | |
| 29 | <field type="MATRIX" name="placeMatrix"/> | |
| 30 | <field type="CXFORM" name="placeColorTransform"/> | |
| 31 | </type> | |
| 1 | <?xml version="1.0" encoding="UTF-8"?> | |
| 2 | <!DOCTYPE structures SYSTEM "structure-format.dtd"> | |
| 3 | <structures> | |
| 4 | <struct name="SetBackgroundColor"> | |
| 5 | <entry type="RGB" name="backgroundColor"/> | |
| 6 | </struct> | |
| 32 | 7 | |
| 33 | <!-- TODO PlaceObject2, PlaceObject3 --> | |
| 34 | <type name="End"> | |
| 35 | </type> | |
| 36 | ||
| 37 | <type name="ShowFrame"> | |
| 38 | </type> | |
| 39 | ||
| 40 | </types> | |
| 8 | <struct name="PlaceObject"> | |
| 9 | <entry type="NONE" autocalculated="true" name="placeObjectVersion" value="1"/> | |
| 10 | <entry type="UI16" name="shapeId"/> | |
| 11 | <entry type="UI16" name="depth"/> | |
| 12 | <entry type="MATRIX" name="placeMatrix"/> | |
| 13 | <entry type="CXFORM" name="placeColorTransform"/> | |
| 14 | </struct> | |
| 15 | <struct name="End"> | |
| 16 | </struct> | |
| 17 | <struct name="ShowFrame"> | |
| 18 | </struct> | |
| 19 | </structures> |
| ... | ...@@ -1,29 +1,27 @@ | |
| 1 | <types> | |
| 2 | <type name="GRADIENT" aligned="true"> | |
| 3 | <field type="UB[2]" name="spreadMode"/> | |
| 4 | <field type="UB[2]" name="interpolationMode"/> | |
| 5 | <field type="UB[4]" | |
| 6 | name="numGradients" | |
| 7 | autocalculated="true" | |
| 8 | value="hlp.colSize(gradientRecords)"/> | |
| 9 | <field type="GRADRECORD" name="gradientRecords" collection="true" collectionsize="numGradients" | |
| 10 | transmit="shapeVersion" | |
| 11 | /> | |
| 12 | </type> | |
| 13 | <type name="FOCALGRADIENT" aligned="true"> | |
| 14 | <field type="UB[2]" name="spreadMode"/> | |
| 15 | <field type="UB[2]" name="interpolationMode"/> | |
| 16 | <field type="UB[4]" name="numGradients" autocalculated="true" | |
| 17 | value="hlp.colSize(gradientRecords)"/> | |
| 18 | <field type="GRADRECORD" | |
| 19 | collection="true" transmit="shapeVersion" | |
| 20 | collectionsize="numGradients" name="gradientRecords"/> | |
| 21 | <field type="FIXED16" name="focalPoint"/> | |
| 22 | </type> | |
| 23 | ||
| 24 | <type name="GRADRECORD" aligned="false"> | |
| 25 | <field type="UI8" name="ratio"/> | |
| 26 | <field type="RGB" name="color" transmit="shapeVersion" state="(shapeVersion eq 1) or (shapeVersion eq 2)"/> | |
| 27 | <field type="RGBA" name="color" transmit="shapeVersion" state="shapeVersion ge 3"/> | |
| 28 | </type> | |
| 29 | </types> | |
| 30 | 1 | \ No newline at end of file |
| 2 | <?xml version="1.0" encoding="UTF-8"?> | |
| 3 | <!DOCTYPE structures SYSTEM "structure-format.dtd"> | |
| 4 | <structures> | |
| 5 | <struct name="GRADIENT" aligned="true"> | |
| 6 | <entry type="UB[2]" name="spreadMode" /> | |
| 7 | <entry type="UB[2]" name="interpolationMode" /> | |
| 8 | <entry type="UB[4]" name="numGradients" autocalculated="true" | |
| 9 | value="hlp.colSize(gradientRecords)" /> | |
| 10 | <entry type="GRADRECORD" name="gradientRecords" collection="true" | |
| 11 | collectionsize="numGradients" transmit="shapeVersion" /> | |
| 12 | </struct> | |
| 13 | <struct name="FOCALGRADIENT" aligned="true"> | |
| 14 | <entry type="UB[2]" name="spreadMode" /> | |
| 15 | <entry type="UB[2]" name="interpolationMode" /> | |
| 16 | <entry type="UB[4]" name="numGradients" autocalculated="true" | |
| 17 | value="hlp.colSize(gradientRecords)" /> | |
| 18 | <entry type="GRADRECORD" collection="true" transmit="shapeVersion" | |
| 19 | collectionsize="numGradients" name="gradientRecords" /> | |
| 20 | <entry type="FIXED16" name="focalPoint" /> | |
| 21 | </struct> | |
| 22 | <struct name="GRADRECORD" aligned="false"> | |
| 23 | <entry type="UI8" name="ratio" /> | |
| 24 | <entry type="RGB" name="color" transmit="shapeVersion" | |
| 25 | state="(shapeVersion eq 1) or (shapeVersion eq 2)" /> | |
| 26 | <entry type="RGBA" name="color" transmit="shapeVersion" state="shapeVersion ge 3" /> | |
| 27 | </struct> | |
| 28 | </structures> | |
| 31 | 29 | \ No newline at end of file |
| ... | ...@@ -1,67 +1,69 @@ | |
| 1 | <types> | |
| 2 | <type name="RGB"> | |
| 3 | <field type="UI8" name="red"/> | |
| 4 | <field type="UI8" name="green"/> | |
| 5 | <field type="UI8" name="blue"/> | |
| 6 | </type> | |
| 7 | <type name="RGBA"> | |
| 8 | <field type="UI8" name="red"/> | |
| 9 | <field type="UI8" name="green"/> | |
| 10 | <field type="UI8" name="blue"/> | |
| 11 | <field type="UI8" name="alpha"/> | |
| 12 | </type> | |
| 13 | <type name="RECT"> | |
| 14 | <field type="UB[5]" name="nbits" autocalculated="true" value="hlp.lenSB(xmin, xmax, ymin, ymax)"/> | |
| 15 | <field type="SB[nbits]" name="xmin"/> | |
| 16 | <field type="SB[nbits]" name="xmax"/> | |
| 17 | <field type="SB[nbits]" name="ymin"/> | |
| 18 | <field type="SB[nbits]" name="ymax"/> | |
| 19 | </type> | |
| 20 | <type name="MATRIX" aligned="true" calcseq="nScaleBits, nRotateBits, nTranslateBits"> | |
| 21 | <field type="UB[1]" name="hasScale"/> | |
| 22 | <field type="UB[5]" name="nScaleBits" autocalculated="true" value="hlp.lenFB(scaleX, scaleY)" state="hasScale eq 1"/> | |
| 23 | <field type="FB[nScaleBits]" name="scaleX" state="hasScale eq 1"/> | |
| 24 | <field type="FB[nScaleBits]" name="scaleY" state="hasScale eq 1"/> | |
| 25 | ||
| 26 | <field type="UB[1]" name="hasRotate"/> | |
| 27 | <field type="UB[5]" name="nRotateBits" autocalculated="true" value="hlp.lenFB(rotateSkew0, rotateSkew1)" state="hasRotate eq 1"/> | |
| 28 | <field type="FB[nRotateBits]" name="rotateSkew0" state="hasRotate eq 1"/> | |
| 29 | <field type="FB[nRotateBits]" name="rotateSkew1" state="hasRotate eq 1"/> | |
| 30 | ||
| 31 | <field type="UB[5]" name="nTranslateBits" autocalculated="true" value="hlp.lenSB(translateX, translateY)"/> | |
| 32 | <field type="SB[nTranslateBits]" name="translateX"/> | |
| 33 | <field type="SB[nTranslateBits]" name="translateY"/> | |
| 34 | </type> | |
| 35 | ||
| 36 | <type name="CXFORM" aligned="true"> | |
| 37 | <field type="UB[1]" name="hasAddTerms"/> | |
| 38 | <field type="UB[1]" name="hasMultTerms"/> | |
| 39 | ||
| 40 | <field type="UB[4]" name="nbits" autocalculated="true" value="hlp.lenSB(redMultTerm, greenMultTerm, blueMultTerm, redAddTerm, greenAddTerm, blueAddTerm)"/> | |
| 41 | ||
| 42 | <field type="SB[nbits]" name="redMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 43 | <field type="SB[nbits]" name="greenMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 44 | <field type="SB[nbits]" name="blueMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 45 | ||
| 46 | <field type="SB[nbits]" name="redAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 47 | <field type="SB[nbits]" name="greenAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 48 | <field type="SB[nbits]" name="blueAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 49 | </type> | |
| 50 | <type name="CXFORMWITHALPHA"> | |
| 51 | <field type="UB[1]" name="hasAddTerms"/> | |
| 52 | <field type="UB[1]" name="hasMultTerms"/> | |
| 1 | <?xml version="1.0" encoding="UTF-8"?> | |
| 2 | <!DOCTYPE structures SYSTEM "structure-format.dtd"> | |
| 3 | <structures> | |
| 4 | <struct name="RGB"> | |
| 5 | <entry type="UI8" name="red"/> | |
| 6 | <entry type="UI8" name="green"/> | |
| 7 | <entry type="UI8" name="blue"/> | |
| 8 | </struct> | |
| 9 | <struct name="RGBA"> | |
| 10 | <entry type="UI8" name="red"/> | |
| 11 | <entry type="UI8" name="green"/> | |
| 12 | <entry type="UI8" name="blue"/> | |
| 13 | <entry type="UI8" name="alpha"/> | |
| 14 | </struct> | |
| 15 | <struct name="RECT"> | |
| 16 | <entry type="UB[5]" name="nbits" autocalculated="true" value="hlp.lenSB(xmin, xmax, ymin, ymax)"/> | |
| 17 | <entry type="SB[nbits]" name="xmin"/> | |
| 18 | <entry type="SB[nbits]" name="xmax"/> | |
| 19 | <entry type="SB[nbits]" name="ymin"/> | |
| 20 | <entry type="SB[nbits]" name="ymax"/> | |
| 21 | </struct> | |
| 22 | <struct name="MATRIX" aligned="true" calcseq="nScaleBits, nRotateBits, nTranslateBits"> | |
| 23 | <entry type="UB[1]" name="hasScale"/> | |
| 24 | <entry type="UB[5]" name="nScaleBits" autocalculated="true" value="hlp.lenFB(scaleX, scaleY)" state="hasScale eq 1"/> | |
| 25 | <entry type="FB[nScaleBits]" name="scaleX" state="hasScale eq 1"/> | |
| 26 | <entry type="FB[nScaleBits]" name="scaleY" state="hasScale eq 1"/> | |
| 27 | ||
| 28 | <entry type="UB[1]" name="hasRotate"/> | |
| 29 | <entry type="UB[5]" name="nRotateBits" autocalculated="true" value="hlp.lenFB(rotateSkew0, rotateSkew1)" state="hasRotate eq 1"/> | |
| 30 | <entry type="FB[nRotateBits]" name="rotateSkew0" state="hasRotate eq 1"/> | |
| 31 | <entry type="FB[nRotateBits]" name="rotateSkew1" state="hasRotate eq 1"/> | |
| 32 | ||
| 33 | <entry type="UB[5]" name="nTranslateBits" autocalculated="true" value="hlp.lenSB(translateX, translateY)"/> | |
| 34 | <entry type="SB[nTranslateBits]" name="translateX"/> | |
| 35 | <entry type="SB[nTranslateBits]" name="translateY"/> | |
| 36 | </struct> | |
| 37 | ||
| 38 | <struct name="CXFORM" aligned="true"> | |
| 39 | <entry type="UB[1]" name="hasAddTerms"/> | |
| 40 | <entry type="UB[1]" name="hasMultTerms"/> | |
| 41 | ||
| 42 | <entry type="UB[4]" name="nbits" autocalculated="true" value="hlp.lenSB(redMultTerm, greenMultTerm, blueMultTerm, redAddTerm, greenAddTerm, blueAddTerm)"/> | |
| 43 | ||
| 44 | <entry type="SB[nbits]" name="redMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 45 | <entry type="SB[nbits]" name="greenMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 46 | <entry type="SB[nbits]" name="blueMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 47 | ||
| 48 | <entry type="SB[nbits]" name="redAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 49 | <entry type="SB[nbits]" name="greenAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 50 | <entry type="SB[nbits]" name="blueAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 51 | </struct> | |
| 52 | <struct name="CXFORMWITHALPHA"> | |
| 53 | <entry type="UB[1]" name="hasAddTerms"/> | |
| 54 | <entry type="UB[1]" name="hasMultTerms"/> | |
| 53 | 55 | |
| 54 | <field type="UB[4]" name="nbits" autocalculated="true" | |
| 56 | <entry type="UB[4]" name="nbits" autocalculated="true" | |
| 55 | 57 | value="hlp.lenSB(redMultTerm, greenMultTerm, blueMultTerm, alphaMultTerm, redAddTerm, greenAddTerm, blueAddTerm, alphaMultTerm)"/> |
| 56 | 58 | |
| 57 | <field type="SB[nbits]" name="redMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 58 | <field type="SB[nbits]" name="greenMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 59 | <field type="SB[nbits]" name="blueMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 60 | <field type="SB[nbits]" name="alphaMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 61 | ||
| 62 | <field type="SB[nbits]" name="redAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 63 | <field type="SB[nbits]" name="greenAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 64 | <field type="SB[nbits]" name="blueAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 65 | <field type="SB[nbits]" name="alphaAddTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 66 | </type> | |
| 67 | </types> | |
| 68 | 59 | \ No newline at end of file |
| 60 | <entry type="SB[nbits]" name="redMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 61 | <entry type="SB[nbits]" name="greenMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 62 | <entry type="SB[nbits]" name="blueMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 63 | <entry type="SB[nbits]" name="alphaMultTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 64 | ||
| 65 | <entry type="SB[nbits]" name="redAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 66 | <entry type="SB[nbits]" name="greenAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 67 | <entry type="SB[nbits]" name="blueAddTerm" transmit="nbits" state="hasAddTerms eq 1"/> | |
| 68 | <entry type="SB[nbits]" name="alphaAddTerm" transmit="nbits" state="hasMultTerms eq 1"/> | |
| 69 | </struct> | |
| 70 | </structures> | |
| 69 | 71 | \ No newline at end of file |
| ... | ...@@ -1,18 +0,0 @@ | |
| 1 | package com.flanderra.commons.struct.custom; | |
| 2 | ||
| 3 | import com.flanderra.commons.utils.BitInputStream; | |
| 4 | ||
| 5 | import java.util.Map; | |
| 6 | ||
| 7 | /** | |
| 8 | * @author <a href="mailto:cherkashin.pavel@otr.ru">Pavel Cherkashin</a> | |
| 9 | */ | |
| 10 | public class SHAPERECORD implements CustomStructureFormat { | |
| 11 | public Object[] format(Map<String, Object> context) { | |
| 12 | throw new IllegalStateException("Not implemented yet"); | |
| 13 | } | |
| 14 | ||
| 15 | public Map<String, Object> parse(Map<String, Object> context, BitInputStream bis) { | |
| 16 | throw new IllegalStateException("Not implemented yet"); | |
| 17 | } | |
| 18 | } |
| ... | ...@@ -1,113 +1,75 @@ | |
| 1 | <types> | |
| 2 | <type name="FILLSTYLE"> | |
| 3 | <field type="UI8" name="fillStyleType"/> | |
| 4 | <field type="RGB" name="color" state="(fillStyleType eq 0) and (shapeVersion eq 1 || shapeVersion eq 2)"/> | |
| 5 | <field type="RGBA" name="color" state="(fillStyleType eq 0) and (shapeVersion eq 3)"/> | |
| 6 | <field type="MATRIX" name="gradientMatrix" state="fillStyleType eq 16 || fillStyleType eq 18"/> | |
| 7 | <field type="GRADIENT" name="gradient" state="fillStyleType eq 16 || fillStyleType eq 18"/> | |
| 8 | <field type="FOCALGRADIENT" name="gradient" state="fillStyleType eq 19"/> | |
| 9 | <field type="UI16" name="bitmapId" state="(fillStyleType ge 64) and (fillStyleType le 67)"/> | |
| 10 | <field type="MATRIX" name="bitmapMatrix" state="(fillStyleType ge 64) and (fillStyleType le 67)"/> | |
| 11 | </type> | |
| 12 | ||
| 13 | <type name="FILLSTYLEARRAY" calcseq="fillStyleCount, fillStyleCountExtended"> | |
| 14 | <field type="UI8" name="fillStyleCount" autocalculated="true" state="hlp.colSize(fillStylesCol) gt 255" value="255"/> | |
| 15 | <field type="UI8" name="fillStyleCount" autocalculated="true" state="hlp.colSize(fillStylesCol) le 255" value="hlp.colSize(fillStylesCol)"/> | |
| 16 | <field type="UI16" name="fillStyleCountExtended" autocalculated="true" state="hlp.colSize(fillStylesCol) gt 255" value="hlp.colSize(fillStylesCol)"/> | |
| 17 | <field type="FILLSTYLE" collection="true" name="fillStylesCol" collectionsize="fillStyleCount"/> | |
| 18 | </type> | |
| 19 | ||
| 20 | <type name="LINESTYLE"> | |
| 21 | <field type="UI16" name="width"/> | |
| 22 | <field type="RGB" name="color" state="shapeVersion eq 1||shapeVersion eq 2"/> | |
| 23 | <field type="RGBA" name="color" state="shapeVersion eq 3"/> | |
| 24 | </type> | |
| 25 | ||
| 26 | <type name="LINESTYLE2"> | |
| 27 | <field type="UI16" name="width"/> | |
| 28 | <field type="UB[2]" name="startCapStyle"/> | |
| 29 | <field type="UB[2]" name="joinStyle"/> | |
| 30 | <field type="UB[1]" name="hasFillFlag"/> | |
| 31 | <field type="UB[1]" name="noHScaleFlag"/> | |
| 32 | <field type="UB[1]" name="noVScaleFlag"/> | |
| 33 | <field type="UB[1]" name="pixelHintingFlag"/> | |
| 34 | <field type="UB[5]" name="reserved" autocalculated="true" value="0"/> | |
| 35 | <field type="UB[1]" name="noClose"/> | |
| 36 | <field type="UB[2]" name="endCapStyle"/> | |
| 37 | <field type="FB[2]" name="miterLimitFactor" state="joinStyle eq 2"/> | |
| 38 | <field type="RGBA" name="color" state="hasFillFlag eq 0"/> | |
| 39 | <field type="FILLSTYLE" name="fillType" state="hasFillFlag eq 1"/> | |
| 40 | </type> | |
| 41 | ||
| 42 | <type name="LINESTYLEARRAY" calcseq="lineStyleCount, lineStyleCountExtended"> | |
| 43 | <field type="UI8" name="lineStyleCount" autocalculated="true" state="hlp.colSize(lineStylesCol) gt 255" value="255"/> | |
| 44 | <field type="UI8" name="lineStyleCount" autocalculated="true" state="hlp.colSize(lineStylesCol) le 255" value="hlp.colSize(lineStylesCol)"/> | |
| 45 | <field type="UI16" name="lineStyleCountExtended" autocalculated="true" state="hlp.colSize(lineStylesCol) gt 255" value="hlp.colSize(lineStylesCol)"/> | |
| 46 | <field type="LINESTYLE" collection="true" name="lineStylesCol" state="shapeVersion eq 1||shapeVersion eq 2"/> | |
| 47 | <field type="LINESTYLE2" collection="true" name="lineStylesCol" state="shapeVersion ge 3"/> | |
| 48 | </type> | |
| 49 | ||
| 50 | <type name="SHAPERECORD" aligned="false" customStruct="com.flanderra.commons.struct.custom.SHAPERECORD"> | |
| 51 | <field type="ENDSHAPERECORD" route="true" name="endShapeRecord" state="recordType eq 0"/> | |
| 52 | <field type="STYLECHANGERECORD" route="true" name="styleChangeRecord" state="recordType eq 1"/> | |
| 53 | <field type="CURVEDEDGERECORD" route="true" name="curvedEdgeRecord" state="recordType eq 2"/> | |
| 54 | <field type="STRAIGHTEDGERECORD" route="true" name="straightEdgeRecord" state="recordType eq 3"/> | |
| 55 | <field type="NONE" name="recordType"/> | |
| 56 | </type> | |
| 57 | ||
| 58 | <type name="ENDSHAPERECORD" aligned="false"> | |
| 59 | <field type="UB[1]" autocalculated="true" name="typeFlag" value="0"/> | |
| 60 | <field type="UB[5]" autocalculated="true" name="endOfShape" value="0"/> | |
| 61 | </type> | |
| 62 | <type name="STYLECHANGERECORD" aligned="false"> | |
| 63 | <field type="UB[1]" autocalculated="true" name="typeFlag" value="0"/> | |
| 64 | <field type="UB[1]" name="stateNewStyles" /> | |
| 65 | <field type="UB[1]" name="stateLineStyle" /> | |
| 66 | <field type="UB[1]" name="stateFillStyle1" /> | |
| 67 | <field type="UB[1]" name="stateFillStyle0" /> | |
| 68 | <field type="UB[1]" name="stateMoveTo" /> | |
| 69 | <field type="UB[5]" name="moveBits" autocalculated="true" state="stateMoveTo eq 1" value="hlp.lenSB(moveDeltaX, moveDeltaY)"/> | |
| 70 | <field type="SB[moveBits]" name="moveDeltaX" state="stateMoveTo eq 1"/> | |
| 71 | <field type="SB[moveBits]" name="moveDeltaY" state="stateMoveTo eq 1"/> | |
| 72 | <field type="UB[numFillBits]" name="fillStyle0" state="stateFillStyle0 eq 1"/> | |
| 73 | <field type="UB[numFillBits]" name="fillStyle1" state="stateFillStyle1 eq 1"/> | |
| 74 | <field type="UB[numLineBits]" name="lineStyle" state="stateLineStyle eq 1"/> | |
| 75 | <field type="FILLSTYLEARRAY" name="recFillStyles" state="stateNewStyles eq 1"/> | |
| 76 | <field type="LINESTYLEARRAY" name="recLineStyles" state="stateNewStyles eq 1"/> | |
| 77 | <field type="UB[4]" name="numRecFillBits" autocalculated="true" state="stateNewStyles eq 1" value="hlp.colSize(recFillStyles.fillStylesCol)"/> | |
| 78 | <field type="UB[4]" name="numRecLineBits" autocalculated="true" state="stateNewStyles eq 1" value="hlp.colSize(recLineStyles.lineStylesCol)"/> | |
| 79 | </type> | |
| 80 | <type name="CURVEDEDGERECORD" aligned="false"> | |
| 81 | <field type="UB[1]" autocalculated="true" name="typeFlag" value="1"/> | |
| 82 | <field type="UB[1]" autocalculated="true" name="straightFlag" value="0"/> | |
| 83 | <field type="UB[4]" autocalculated="true" name="numBits" value="hlp.lenSB(controlDeltaX, controlDeltaY, anchorDeltaX, anchorDeltaY) - 2"/> | |
| 84 | <field type="NONE" autocalculated="true" name="numBitsPlusTwo" value="hlp.lenSB(controlDeltaX, controlDeltaY, anchorDeltaX, anchorDeltaY)"/> | |
| 85 | <field type="UB[numBitsPlusTwo]" name="controlDeltaX" /> | |
| 86 | <field type="UB[numBitsPlusTwo]" name="controlDeltaY" /> | |
| 87 | <field type="UB[numBitsPlusTwo]" name="anchorDeltaX" /> | |
| 88 | <field type="UB[numBitsPlusTwo]" name="anchorDeltaY" /> | |
| 89 | </type> | |
| 90 | <type name="STRAIGHTEDGERECORD" aligned="false"> | |
| 91 | <field type="UB[1]" autocalculated="true" name="typeFlag" value="1"/> | |
| 92 | <field type="UB[1]" autocalculated="true" name="straightFlag" value="1"/> | |
| 93 | <field type="UB[4]" autocalculated="true" name="numBits" value="hlp.lenSB(deltaX, deltaY) - 2"/> | |
| 94 | <field type="NONE" autocalculated="true" name="numBitsPlusTwo" value="hlp.lenSB(deltaX, deltaY)"/> | |
| 95 | <field type="UB[1]" name="generalLineFlag" /> | |
| 96 | <field type="UB[1]" name="vertLineFlag" state="generalLineFlag eq 0"/> | |
| 97 | <field type="SB[numBitsPlusTwo]" name="deltaX" state="(generalLineFlag eq 1) or (vertLineFlag eq 0)"/> | |
| 98 | <field type="SB[numBitsPlusTwo]" name="deltaY" state="(generalLineFlag eq 1) or (vertLineFlag eq 1)"/> | |
| 99 | </type> | |
| 100 | ||
| 101 | <type name="SHAPE"> | |
| 102 | <field type="UB[4]" name="numFillBits" autocalculated="true" value="15"/> | |
| 103 | <field type="UB[4]" name="numLineBits" autocalculated="true" value="15"/> | |
| 104 | <field type="SHAPERECORD" name="shapeRecords"/> | |
| 105 | </type> | |
| 106 | <type name="SHAPEWITHSTYLE"> | |
| 107 | <field type="FILLSTYLEARRAY" name="fillStyles"/> | |
| 108 | <field type="LINESTYLEARRAY" name="lineStyles"/> | |
| 109 | <field type="UB[4]" name="numFillBits" autocalculated="true" value="hlp.colSize(fillStyles.fillStylesCol)"/> | |
| 110 | <field type="UB[4]" name="numLineBits" autocalculated="true" value="hlp.colSize(lineStyles.lineStylesCol)"/> | |
| 111 | <field type="SHAPERECORD" name="shapeRecords"/> | |
| 112 | </type> | |
| 113 | </types> | |
| 114 | 1 | \ No newline at end of file |
| 2 | <?xml version="1.0" encoding="UTF-8"?> | |
| 3 | <!DOCTYPE structures SYSTEM "structure-format.dtd"> | |
| 4 | <structures> | |
| 5 | <!-- | |
| 6 | <struct name="DefineShape"> | |
| 7 | <entry type="NONE" autocalculated="true" name="shapeVersion" value="1"/> | |
| 8 | <entry type="UI16" name="shapeId"/> | |
| 9 | <entry type="RECT" name="shapeBounds"/> | |
| 10 | <entry type="SHAPEWITHSTYLE" name="shape"/> | |
| 11 | </struct> | |
| 12 | ||
| 13 | ||
| 14 | <struct name="DefineShape2"> | |
| 15 | <entry type="NONE" autocalculated="true" name="shapeVersion" value="2"/> | |
| 16 | <entry type="UI16" name="shapeId"/> | |
| 17 | <entry type="RECT" name="shapeBounds"/> | |
| 18 | <entry type="SHAPEWITHSTYLE" name="shape"/> | |
| 19 | </struct> | |
| 20 | <struct name="DefineShape3"> | |
| 21 | <entry type="NONE" autocalculated="true" name="shapeVersion" value="3"/> | |
| 22 | <entry type="UI16" name="shapeId"/> | |
| 23 | <entry type="RECT" name="shapeBounds"/> | |
| 24 | <entry type="SHAPEWITHSTYLE" name="shape"/> | |
| 25 | </struct> | |
| 26 | <struct name="DefineShape4"> | |
| 27 | <entry type="NONE" autocalculated="true" name="shapeVersion" value="4"/> | |
| 28 | <entry type="UI16" name="shapeId"/> | |
| 29 | <entry type="RECT" name="shapeBounds"/> | |
| 30 | <entry type="RECT" name="edgeBounds"/> | |
| 31 | <entry type="UB[6]" name="reserved" autocalculated="true" expression="0"/> | |
| 32 | <entry type="UB[1]" name="usesNonScalingStrokes" /> | |
| 33 | <entry type="UB[1]" name="usesScalingStrokes" /> | |
| 34 | <entry type="SHAPEWITHSTYLE" name="shape"/> | |
| 35 | </struct> | |
| 36 | --> | |
| 37 | <struct name="SHAPE" | |
| 38 | implementation="com.flanderra.commons.struct.custom.shapes.ShapeImpl"> | |
| 39 | </struct> | |
| 40 | <struct name="SHAPEWITHSTYLE" | |
| 41 | implementation="com.flanderra.commons.struct.custom.shapes.ShapeWithStyleImpl"> | |
| 42 | </struct> | |
| 43 | ||
| 44 | <struct name="FILLSTYLE"> | |
| 45 | <entry type="UI8" name="fillStyleType"/> | |
| 46 | <entry type="RGB" name="color" state="(fillStyleType eq 0) and (shapeVersion eq 1 || shapeVersion eq 2)"/> | |
| 47 | <entry type="RGBA" name="color" state="(fillStyleType eq 0) and (shapeVersion eq 3)"/> | |
| 48 | <entry type="MATRIX" name="gradientMatrix" state="fillStyleType eq 16 || fillStyleType eq 18"/> | |
| 49 | <entry type="GRADIENT" name="gradient" state="fillStyleType eq 16 || fillStyleType eq 18"/> | |
| 50 | <entry type="FOCALGRADIENT" name="gradient" state="fillStyleType eq 19"/> | |
| 51 | <entry type="UI16" name="bitmapId" state="(fillStyleType ge 64) and (fillStyleType le 67)"/> | |
| 52 | <entry type="MATRIX" name="bitmapMatrix" state="(fillStyleType ge 64) and (fillStyleType le 67)"/> | |
| 53 | </struct> | |
| 54 | ||
| 55 | <struct name="LINESTYLE"> | |
| 56 | <entry type="UI16" name="width"/> | |
| 57 | <entry type="RGB" transmit="shapeVersion" name="color" state="(shapeVersion eq 1) || (shapeVersion eq 2)"/> | |
| 58 | <entry type="RGBA" transmit="shapeVersion" name="color" state="(shapeVersion eq 3) || (shapeVersion eq 4)"/> | |
| 59 | </struct> | |
| 60 | ||
| 61 | <struct name="LINESTYLE2"> | |
| 62 | <entry type="UI16" name="width"/> | |
| 63 | <entry type="UB[2]" name="startCapStyle"/> | |
| 64 | <entry type="UB[2]" name="joinStyle"/> | |
| 65 | <entry type="UB[1]" name="hasFillFlag"/> | |
| 66 | <entry type="UB[1]" name="noHScaleFlag"/> | |
| 67 | <entry type="UB[1]" name="noVScaleFlag"/> | |
| 68 | <entry type="UB[1]" name="pixelHintingFlag"/> | |
| 69 | <entry type="UB[5]" name="reserved" autocalculated="true" value="0"/> | |
| 70 | <entry type="UB[1]" name="noClose"/> | |
| 71 | <entry type="UB[2]" name="endCapStyle"/> | |
| 72 | <entry type="FB[2]" name="miterLimitFactor" state="joinStyle eq 2"/> | |
| 73 | <entry type="RGBA" name="color" state="hasFillFlag eq 0"/> | |
| 74 | <entry type="FILLSTYLE" name="fillType" state="hasFillFlag eq 1"/> | |
| 75 | </struct> | |
| 76 | </structures> | |
| 115 | 77 | \ No newline at end of file |
| ... | ...@@ -1,6 +1,6 @@ | |
| 1 | 1 | package com.flanderra.commons.struct; |
| 2 | 2 | |
| 3 | import com.flanderra.commons.struct.custom.CustomStructureFormat; | |
| 3 | import com.flanderra.commons.struct.custom.ICustomStructureFormat; | |
| 4 | 4 | |
| 5 | 5 | import java.util.List; |
| 6 | 6 | |
| ... | ...@@ -14,14 +14,14 @@ | |
| 14 | 14 | protected boolean aligned; |
| 15 | 15 | protected boolean tag; |
| 16 | 16 | protected long tagCode; |
| 17 | protected CustomStructureFormat customStructureFormat; | |
| 17 | protected ICustomStructureFormat customStructureFormat; | |
| 18 | 18 | |
| 19 | public CustomStructureFormat getCustomStructureFormat() { | |
| 19 | public ICustomStructureFormat getCustomStructureFormat() { | |
| 20 | 20 | return customStructureFormat; |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | public void setCustomStructureFormat( |
| 24 | CustomStructureFormat customStructureFormat) { | |
| 24 | ICustomStructureFormat customStructureFormat) { | |
| 25 | 25 | this.customStructureFormat = customStructureFormat; |
| 26 | 26 | } |
| 27 | 27 |
| ... | ...@@ -12,7 +12,7 @@ | |
| 12 | 12 | import org.dom4j.Node; |
| 13 | 13 | import org.dom4j.io.SAXReader; |
| 14 | 14 | |
| 15 | import com.flanderra.commons.struct.custom.CustomStructureFormat; | |
| 15 | import com.flanderra.commons.struct.custom.ICustomStructureFormat; | |
| 16 | 16 | |
| 17 | 17 | /** |
| 18 | 18 | * The singleton class, which holds all types configuration. |
| ... | ...@@ -82,11 +82,12 @@ | |
| 82 | 82 | URL url = Thread.currentThread().getContextClassLoader() |
| 83 | 83 | .getResource(file); |
| 84 | 84 | SAXReader reader = new SAXReader(); |
| 85 | reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); | |
| 85 | 86 | Document document = reader.read(url); |
| 86 | List<Node> typeNodes = document.selectNodes("//types/type"); | |
| 87 | for (Node typeNode : typeNodes) { | |
| 87 | List<Node> structNodes = document.selectNodes("//structures/struct"); | |
| 88 | for (Node structNode : structNodes) { | |
| 88 | 89 | StructureFormat type = new StructureFormat(); |
| 89 | type.setName(typeNode.selectSingleNode("@name") | |
| 90 | type.setName(structNode.selectSingleNode("@name") | |
| 90 | 91 | .getStringValue()); |
| 91 | 92 | if (tagCodes.containsKey(type.getName())) { |
| 92 | 93 | type.setTag(true); |
| ... | ...@@ -95,25 +96,26 @@ | |
| 95 | 96 | } else { |
| 96 | 97 | type.setTag(false); |
| 97 | 98 | } |
| 98 | if (typeNode.selectSingleNode("@aligned") != null) { | |
| 99 | type.setAligned(typeNode.selectSingleNode("@aligned") | |
| 99 | if (structNode.selectSingleNode("@aligned") != null) { | |
| 100 | type.setAligned(structNode.selectSingleNode("@aligned") | |
| 100 | 101 | .getStringValue().trim().equalsIgnoreCase( |
| 101 | 102 | "true")); |
| 102 | 103 | } |
| 103 | if (typeNode.selectSingleNode("@customStruct") != null) { | |
| 104 | if (structNode.selectSingleNode("@implementation") != null) { | |
| 104 | 105 | try { |
| 105 | String className = typeNode.selectSingleNode( | |
| 106 | "@customStruct").getStringValue(); | |
| 107 | CustomStructureFormat customStruct = (CustomStructureFormat) Class | |
| 106 | String className = structNode.selectSingleNode( | |
| 107 | "@implementation").getStringValue(); | |
| 108 | ICustomStructureFormat customStruct = (ICustomStructureFormat) Class | |
| 108 | 109 | .forName(className).newInstance(); |
| 109 | 110 | type.setCustomStructureFormat(customStruct); |
| 111 | types.put(type.getName(), type); | |
| 110 | 112 | continue; |
| 111 | 113 | } catch (Exception e) { |
| 112 | 114 | throw new RuntimeException(e); |
| 113 | 115 | } |
| 114 | 116 | } |
| 115 | 117 | type.setFieldsSeq(new ArrayList<StructureFormatEntry>()); |
| 116 | List<Node> fieldNodes = typeNode.selectNodes("field"); | |
| 118 | List<Node> fieldNodes = structNode.selectNodes("entry"); | |
| 117 | 119 | for (Node fieldNode : fieldNodes) { |
| 118 | 120 | StructureFormatEntry field = new StructureFormatEntry(); |
| 119 | 121 | field.setType(fieldNode.selectSingleNode("@type") |
| ... | ...@@ -184,8 +186,8 @@ | |
| 184 | 186 | } |
| 185 | 187 | type.getFieldsSeq().add(field); |
| 186 | 188 | } |
| 187 | if (typeNode.selectSingleNode("@calcseq") != null) { | |
| 188 | String calcseqStr = typeNode.selectSingleNode( | |
| 189 | if (structNode.selectSingleNode("@calcseq") != null) { | |
| 190 | String calcseqStr = structNode.selectSingleNode( | |
| 189 | 191 | "@calcseq").getStringValue(); |
| 190 | 192 | if (calcseqStr != null && !calcseqStr.equals("")) { |
| 191 | 193 | type.setCalcSeq(new ArrayList<StructureFormatEntry>()); |
| ... | ...@@ -471,7 +471,6 @@ | |
| 471 | 471 | 4), |
| 472 | 472 | 32).indexOf('1') + 0; |
| 473 | 473 | } |
| 474 | ||
| 475 | 474 | } |
| 476 | 475 | |
| 477 | 476 | public static int calculateMaxBitCountSI(long[] data) { |
| ... | ...@@ -648,4 +647,18 @@ | |
| 648 | 647 | } |
| 649 | 648 | return sb.toString(); |
| 650 | 649 | } |
| 650 | ||
| 651 | public static byte[] hex(String data){ | |
| 652 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |
| 653 | String[] strBytes = data.split(" "); | |
| 654 | for (int i = 0; i < strBytes.length; i++) { | |
| 655 | String strByte = strBytes[i]; | |
| 656 | if(strByte.length()!=2){ | |
| 657 | continue; | |
| 658 | } | |
| 659 | byte oneByte = (byte) Long.parseLong(strByte, 16); | |
| 660 | baos.write(oneByte); | |
| 661 | } | |
| 662 | return baos.toByteArray(); | |
| 663 | } | |
| 651 | 664 | } |
| 652 | 665 | \ No newline at end of file |
| ... | ...@@ -1,6 +1,5 @@ | |
| 1 | 1 | package com.flanderra.commons.swfio.impl; |
| 2 | 2 | |
| 3 | import java.io.IOException; | |
| 4 | 3 | import java.io.InputStream; |
| 5 | 4 | import java.io.OutputStream; |
| 6 | 5 | import java.util.Map; |
| ... | ...@@ -13,7 +12,6 @@ | |
| 13 | 12 | import com.flanderra.commons.swfio.SWFIOException; |
| 14 | 13 | import com.flanderra.commons.xmlstub.IStubUtil; |
| 15 | 14 | import com.flanderra.commons.xmlstub.PropertiesStubUtil; |
| 16 | import com.flanderra.commons.xmlstub.XMLStubUtil; | |
| 17 | 15 | |
| 18 | 16 | /** |
| 19 | 17 | * {@inheritDoc} |
| ... | ...@@ -1,13 +1,17 @@ | |
| 1 | 1 | package com.flanderra.commons.test.swfinfo; |
| 2 | 2 | |
| 3 | 3 | import java.io.ByteArrayInputStream; |
| 4 | import java.io.ByteArrayOutputStream; | |
| 4 | 5 | import java.io.File; |
| 5 | 6 | import java.io.FileInputStream; |
| 7 | import java.io.FileOutputStream; | |
| 6 | 8 | import java.io.InputStream; |
| 9 | import java.io.OutputStream; | |
| 7 | 10 | |
| 8 | 11 | import junit.framework.TestCase; |
| 9 | 12 | |
| 10 | 13 | import com.flanderra.commons.swfio.impl.SWFIOImpl; |
| 14 | import com.flanderra.commons.utils.BitUtils; | |
| 11 | 15 | |
| 12 | 16 | /** |
| 13 | 17 | * @author <a href="mailto:cherkashin.pavel@otr.ru">Pavel Cherkashin</a> |
| ... | ...@@ -23,10 +27,23 @@ | |
| 23 | 27 | |
| 24 | 28 | public void testRetrieveTags() { |
| 25 | 29 | try { |
| 26 | // File srcFile = new File("com/flanderra/commons/test/test1.swf"); | |
| 27 | // InputStream is = new FileInputStream(srcFile); | |
| 28 | InputStream is = new ByteArrayInputStream(bytes); | |
| 29 | new SWFIOImpl().parseSWF(is, System.out); | |
| 30 | String inputSwfFile = "com/flanderra/commons/test/test1.swf"; | |
| 31 | InputStream is = new FileInputStream(inputSwfFile); | |
| 32 | String tmpFile = "C:\\tmp\\1.properties"; | |
| 33 | String tmpSwfFile = "C:\\tmp\\1.swf"; | |
| 34 | // InputStream is = new ByteArrayInputStream(bytes); | |
| 35 | OutputStream os = new FileOutputStream(tmpFile); | |
| 36 | new SWFIOImpl().parseSWF(is, os); | |
| 37 | ||