OSDN Git Service

defineshape parser (still in progress)
authorYoshihiro Yamazaki <yoya@awm.jp>
Sun, 2 Dec 2012 18:54:42 +0000 (03:54 +0900)
committerYoshihiro Yamazaki <yoya@awm.jp>
Sun, 2 Dec 2012 18:54:42 +0000 (03:54 +0900)
swf/fillstyles.js [new file with mode: 0644]
swf/linestyles.js [new file with mode: 0644]
swf/rgba.js [new file with mode: 0644]
swf/shaperecords.js [new file with mode: 0644]
swf/tag/defineshape.js [new file with mode: 0644]

diff --git a/swf/fillstyles.js b/swf/fillstyles.js
new file mode 100644 (file)
index 0000000..38587ed
--- /dev/null
@@ -0,0 +1,47 @@
+(function(global) {
+    var FlappSWFFillStyles = function(ibit) {
+       ;
+    };
+    FlappSWFFillStyles.load = function(code, ibit) {
+       ibit.a();
+       var count = ibit.ui8();
+        if ((code > 2) && (count === 0xff)) {
+            count = ibit.ui16();
+        }
+       var fillStyles = new Array(count + 1);
+       fillStyles[0] = null;
+       var hasAlpha = (code < 32)?false:true;
+       for (var i = 1 ; i < count ;  i++) {
+           fillStyles[i] = FlappSWFFillStyles.loadStyle(ibit, hasAlpha);
+       }
+       return fillStyles;
+    };
+    FlappSWFFillStyles.loadStyle = function(ibit, hasAlpha) {
+       ibit.a();
+       var style = {type: ibit.ui8()};
+        switch (type) {
+        case 0x00: // solid fill
+            style.color = FlappSWFRGBA.load(ibit, hasAlpha);
+           break;
+        case 0x10: // linear gradient fill
+        case 0x12: // radial gradient fill
+           style.matrix = FlappSWFMatrix.load(ibit);
+           style.gradient = new FlappSWFGradient(ibit, hasAlpha);
+           break;
+        case 0x13: // focal radial gradient fill
+           style.matrix = FlappSWFMatrix.load(ibit);
+           style.gradient = new FlappSWFGradient(ibit, hasAlpha);
+           break;
+        case 0x40: // repeating bitmap fill
+        case 0x41: // clipped bitmap fill
+        case 0x42: // non-smoothed repeating bitmap
+        case 0x43: // non-smoothed clipped bitmap
+           style.bitmapId = ibit.ui16();
+           style.matrix = FlappSWFMatrix.load(ibit);
+           break;
+       }
+       return style;
+    }
+
+    global.FlappSWFFillStyles = FlappSWFFillStyles;
+})(this);
diff --git a/swf/linestyles.js b/swf/linestyles.js
new file mode 100644 (file)
index 0000000..9b2080c
--- /dev/null
@@ -0,0 +1,15 @@
+(function(global) {
+    var FlappSWFLineStyles = function(ibit) {
+       ;
+    };
+    FlappSWFLineStyles.load = function(code, ibit) {
+       ibit.a();
+       var nbit = ibit.ub(5);
+       return { xmin: ibit.sb(nbit) / 20,
+                xmax: ibit.sb(nbit) / 20,
+                ymin: ibit.sb(nbit) / 20,
+                ymax: ibit.sb(nbit) / 20 };
+    };
+
+    global.FlappSWFLineStyles = FlappSWFLineStyles;
+})(this);
diff --git a/swf/rgba.js b/swf/rgba.js
new file mode 100644 (file)
index 0000000..e637d69
--- /dev/null
@@ -0,0 +1,21 @@
+(function(global) {
+    var FlappSWFRGBA = function(ibit) {
+       ;
+    };
+    FlappSWFRGBA.load = function(ibit, hasAlpha) {
+       ibit.a();
+       if (hasAlpha) {
+           return { red: ibit.ui8(),
+                    green: ibit.ui8(),
+                    blue: ibit.ui8(),
+                    alpha: ibit.ui8()
+                  };
+       }
+       return { red: ibit.ui8(),
+                green: ibit.ui8(),
+                blue: ibit.ui8(),
+                alpha: 255
+              };
+    }
+    global.FlappSWFRGBA = FlappSWFRGBA;
+})(this);
diff --git a/swf/shaperecords.js b/swf/shaperecords.js
new file mode 100644 (file)
index 0000000..2ee0b82
--- /dev/null
@@ -0,0 +1,15 @@
+(function(global) {
+    var FlappSWFShapeRecords = function(ibit) {
+       ;
+    };
+    FlappSWFShapeRecords.load = function(code, ibit, fillStyles, lineStyles, numFillBits, numLineBits) {
+       ibit.a();
+       var nbit = ibit.ub(5);
+       return { xmin: ibit.sb(nbit) / 20,
+                xmax: ibit.sb(nbit) / 20,
+                ymin: ibit.sb(nbit) / 20,
+                ymax: ibit.sb(nbit) / 20 };
+    };
+
+    global.FlappSWFShapeRecords = FlappSWFShapeRecords;
+})(this);
diff --git a/swf/tag/defineshape.js b/swf/tag/defineshape.js
new file mode 100644 (file)
index 0000000..166e4be
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+  DefineShape parser
+*/
+
+(function(global) {
+    var FlappSWFTagDefineShape = function(code, length, ibit) {
+//     console.log("FlappSWFTagDefineShape(code:"+code+", length:"+length+", ibit)");
+       this.code = code;
+       this.length = length;
+       this.id = ibit.ui16();
+        this.bounds = FlappSWFRect.load(ibit);
+       var fillStyles = FlappSWFFillStyles.load(code, ibit);
+       var lineStyles = FlappSWFLineStyles.load(code, ibit);
+       ibit.a();
+        var numBits = bs.getUI8();
+        var numFillBits = numBits >> 4;
+        var numLineBits = numBits & 0x0f;
+       
+        this.Shapes = FlappSWFTagShapeRecords.load(code, ibit, fillStyles, lineStyles, numFillBits, numLineBits);
+    }
+    global.FlappSWFTagDefineShape = FlappSWFTagDefineShape;
+})(this);