(function(global) {
- var FlappLoader = function() {
+ var FlappLoader = function(flapp) {
+ this.flapp = flapp;
}
FlappLoader.prototype = {
- fromURL: function(url, flapp, dict, movieClip) {
- this.flapp = flapp;
+ fromURL: function(url, dict, movieClip) {
+ console.debug("FlappLoader.prototype.fromURL("+url+",flapp,dict,movieClip");
var xhr = new XMLHttpRequest();
var ibit = new FlappIBit();
var loader = this;
xhr.send(null);
},
parse: function(ibit, dict, movieClip) {
+ // console.debug("FlappLoader.prototype.parse");
if (ibit.len() < 20) { // 20 is minumum size for swf header, maybe.
return ;
}
if (this.header === null) {
- console.log(FlappSWFHeader);
this.header = FlappSWFHeader.load(ibit);
- this.flapp.header = this.header;
+ console.debug(this.header);
+ flapp.setHeader(this.header);
}
- headPos = ibit.getBytePos();
- if (ibit.hasNext(2) === false) {
- return ;
- }
- tal = ibit.ui16(); // tag and length
- code = tal >>> 6;
- length = tal & 0x3f;
- if (length === 0x3f) {
- if (ibit.hasNext(4) === false) {
- ibit.setPos(headPos);
- return ;
+ var jpegTables = null;
+ while (ibit.a(), ibit.hasNext(2)) {
+ var headPos = ibit.getBytePos();
+ var tag_and_length = ibit.ui16(); // tag and length
+ var code = tag_and_length >>> 6;
+ var length = tag_and_length & 0x3f;
+ if (length === 0x3f) {
+ if (ibit.hasNext(4) === false) {
+ ibit.setPos(headPos, 0);
+ break;
+ }
+ length = ibit.ui32();
}
- length = ibit.ui32();
- }
- if (ibit.hasNext(length) === false) {
- ibit.setPos(headPos);
- return ;
+ if (ibit.hasNext(length) === false) {
+ ibit.setPos(headPos, 0);
+ break;
+ }
+ var startOfContent = ibit.getBytePos();
+ var tag = new FlappSWFTag.load(code, length, ibit);
+// console.debug(tag);
+ switch (code) {
+ case 1: // ShowFrame
+ movieClip.appendControlTag(tag);
+ break;
+ case 2: // DefineShape
+ case 22: // DefineShape2
+ case 32: // DefineShape3
+ dict.set(tag.id, tag);
+ break;
+ case 6: // DefineBits(JPEG)
+ var jpeg = FlappBitmap.toJpeg(tag.jpegData, jpegTables);
+ var image = new Image();
+ image.src = "data:image/jpeg;base64,"+btoa(jpeg);
+ tag.image = image;
+ dict.set(tag.id, tag);
+ break;
+ case 8: // JPEGTables
+ jpegTables = tag;
+ break;
+ case 9: // SetBackgroundColor
+ // set canvas background
+ break;
+ case 12: // DoAction
+ movieClip.appendControlTag(tag);
+ break;
+ case 26: // PlaceObject2
+ movieClip.appendControlTag(tag);
+ break;
+ default:
+ console.warn("Unknown swf tag code:"+code);
+ break;
+ }
+ ibit.setPos(startOfContent + length, 0);
}
- console.log(code);
}
};
global.FlappLoader = FlappLoader;