From 983ea0442716191a3fbdda56dc24164ca59167eb Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 15 Feb 2016 23:21:53 +0600 Subject: [PATCH] first variant shape export --- .../FlashTools/Examples/Animations/anim00.fla | Bin 809081 -> 808665 bytes .../Examples/Animations/sssssss.fla | Bin 0 -> 6495 bytes .../FlashTools/Examples/Animations/test00.fla | Bin 354018 -> 354058 bytes Tools/FlashExport2.jsfl | 669 +++++++++++------- 4 files changed, 403 insertions(+), 266 deletions(-) create mode 100644 Assets/FlashTools/Examples/Animations/sssssss.fla diff --git a/Assets/FlashTools/Examples/Animations/anim00.fla b/Assets/FlashTools/Examples/Animations/anim00.fla index bd84a654e4d865b714f716ad3fc05f9679ca2ce4..8c50df33fe4fd214001a9a661a3b3d86e2c2c49b 100644 GIT binary patch delta 8458 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±4G^{#Vjzjl~``+$JWByan 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�-0`29ZLPc7wIUWh7rr1eiJo0tt*l9m0%6T#X1ju0$k(iD^P` zV0OqzIFNsGy+MJ+sl#2x4qy{-iqy}50ekltgZM9FQ4I(glHNWBjC1clD#de*fBT1A zz}{#;o?<>a!Tj^YsZjI5I5Z(p7=|X?b>NgdK^9@{dFdv(thXy-Njw1w-K%`augqNcqps2mp}(Q#_n2p#Eb=0lU(I z;86avNd0d+XWGBwA@IOLbsz*VbZrP3VhcTtUK=8T3)s6{P@>^RW z41sY7!nNT#@P5P9fjfAJ!q{{m5{UHTFt^`yMgmr?19?pO&obxtQ~B>BQ3?XX6^92w z*M;Cv{P%yh diff --git a/Assets/FlashTools/Examples/Animations/sssssss.fla b/Assets/FlashTools/Examples/Animations/sssssss.fla new file mode 100644 index 0000000000000000000000000000000000000000..9abd766183b5d177a6855ba54d862c2aef7052e6 GIT binary patch literal 6495 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 literal 0 HcmV?d00001 diff --git a/Assets/FlashTools/Examples/Animations/test00.fla b/Assets/FlashTools/Examples/Animations/test00.fla index 3595930c6275fc48f4bd371e59acb177090aeec5..7f74d334ff71b7aaeb4487bb3cd213a1f7c0a8ee 100644 GIT binary patch delta 7441 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/g , '>'); + .replace(//g, '>'); }; - ft.combine_path = function(lhs, rhs) { + ft.combine_path = function (lhs, rhs) { ft.type_assert(lhs, 'string'); ft.type_assert(rhs, 'string'); return ft.escape_path(lhs) + ft.escape_path(rhs); }; - ft.array_foreach = function(arr, func, filter) { + ft.array_foreach = function (arr, func, filter) { ft.type_assert(arr, Array); ft.type_assert(func, Function); ft.type_assert_if_defined(filter, Function); - for ( var index = 0; index < arr.length; ++index ) { + for (var index = 0; index < arr.length; ++index) { var value = arr[index]; - if ( filter === undefined || filter(value, index) ) { + if (filter === undefined || filter(value, index)) { func(value, index); } } }; - ft.object_foreach = function(obj, func, filter) { + ft.object_foreach = function (obj, func, filter) { ft.type_assert(obj, 'object'); ft.type_assert(func, Function); ft.type_assert_if_defined(filter, Function); - for ( var key in obj ) { - if ( obj.hasOwnProperty(key) ) { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { var value = obj[key]; - if ( filter === undefined || filter(key, value) ) { + if (filter === undefined || filter(key, value)) { func(key, value); } } @@ -183,18 +183,18 @@ if ( typeof Object.create != 'function' ) { // // ---------------------------------------------------------------------------- - var UniqueIds = function() { + var UniqueIds = function () { this.clear(); }; - UniqueIds.prototype.clear = function() { - this.stringIds = Object.create(null); + UniqueIds.prototype.clear = function () { + this.stringIds = Object.create(null); this.lastStringId = 0; }; - UniqueIds.prototype.get_string_id = function(str) { + UniqueIds.prototype.get_string_id = function (str) { ft.type_assert(str, 'string'); - if ( this.stringIds.hasOwnProperty(str) ) { + if (this.stringIds.hasOwnProperty(str)) { return this.stringIds[str]; } else { this.stringIds[str] = ++this.lastStringId; @@ -202,12 +202,12 @@ if ( typeof Object.create != 'function' ) { } }; - UniqueIds.prototype.save = function(xml_path) { + UniqueIds.prototype.save = function (xml_path) { ft.type_assert(xml_path, 'string'); var xml_node = new XmlNode("strings"); - ft.object_foreach(this.stringIds, function(key, value) { + ft.object_foreach(this.stringIds, function (key, value) { xml_node.child("string") - .attr("id" , value) + .attr("id", value) .attr("str", ft.escape_string(key)); }); xml_node.save(xml_path); @@ -219,51 +219,54 @@ if ( typeof Object.create != 'function' ) { // // ---------------------------------------------------------------------------- - var XmlNode = function(node_name, node_parent) { + var XmlNode = function (node_name, node_parent) { ft.type_assert(node_name, 'string'); ft.type_assert_if_defined(node_parent, XmlNode); - this.name = node_name; - this.parent = node_parent; - this.attrs = []; + this.name = node_name; + this.parent = node_parent; + this.attrs = []; this.children = []; }; - XmlNode.prototype.attr = function(attr_name, attr_value) { + XmlNode.prototype.attr = function (attr_name, attr_value) { ft.type_assert(attr_name, 'string'); attr_value = ft.escape_string(attr_value.toString()); - var attr = this.attrs.find(function(attr) { + var attr = this.attrs.find(function (attr) { return attr.name == attr_name; }); - if ( attr ) { + if (attr) { attr.value = attr_value; } else { - this.attrs.push({name:attr_name, value:attr_value}); + this.attrs.push({ + name: attr_name, + value: attr_value + }); } return this; }; - XmlNode.prototype.child = function(child_name) { + XmlNode.prototype.child = function (child_name) { ft.type_assert(child_name, 'string'); var child = new XmlNode(child_name, this); this.children.push(child); return child; }; - - XmlNode.prototype.parent = function() { + + XmlNode.prototype.parent = function () { ft.assert(this.parent !== undefined, "xml node parent is undefined"); return this.parent; }; - XmlNode.prototype.content = function(indent) { + XmlNode.prototype.content = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); var str = '{0}<{1}'.format(indent, this.name); - ft.array_foreach(this.attrs, function(attr) { + ft.array_foreach(this.attrs, function (attr) { str += ' {0}="{1}"'.format(attr.name, attr.value); }); - if ( this.children.length > 0 ) { + if (this.children.length > 0) { str += ">\n"; - ft.array_foreach(this.children, function(child) { + ft.array_foreach(this.children, function (child) { str += child.content(indent + "\t") + "\n"; }); return str + "{0}<{1}/>".format(indent, this.name); @@ -272,8 +275,8 @@ if ( typeof Object.create != 'function' ) { } }; - XmlNode.prototype.save = function(xml_path) { - if ( !FLfile.write(xml_path, this.content()) ) { + XmlNode.prototype.save = function (xml_path) { + if (!FLfile.write(xml_path, this.content())) { throw "Can't save xml to {0}!".format(xml_path); } }; @@ -283,123 +286,135 @@ if ( typeof Object.create != 'function' ) { // BitmapAsset // // ---------------------------------------------------------------------------- - - var BitmapAsset = function(item, unique_ids) { + + var BitmapAsset = function (item, unique_ids) { ft.type_assert(item, BitmapItem); ft.type_assert(unique_ids, UniqueIds); this.item = item; this.uniqueIds = unique_ids; }; - - BitmapAsset.prototype.trace = function(indent) { + + BitmapAsset.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); - ft.trace_fmt("{0}-= BitmapAsset =-" , indent); + ft.trace_fmt("{0}-= BitmapAsset =-", indent); ft.trace_fmt("{0}-Id : {1}", indent, this.get_id()); ft.trace_fmt("{0}-Name : {1}", indent, this.get_name()); ft.trace_fmt("{0}-ExportFilename : {1}", indent, this.get_export_filename()); }; - - BitmapAsset.prototype.get_id = function() { + + BitmapAsset.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - BitmapAsset.prototype.get_name = function() { + + BitmapAsset.prototype.get_name = function () { return this.item.name; }; - - BitmapAsset.prototype.get_type = function() { + + BitmapAsset.prototype.get_type = function () { return "bitmap"; }; - - BitmapAsset.prototype.get_export_filename = function() { + + BitmapAsset.prototype.get_export_filename = function () { return "bitmaps/{0}.png".format(this.get_id()); }; - - BitmapAsset.prototype.get_export_fullfilename = function(export_folder) { + + BitmapAsset.prototype.get_export_fullfilename = function (export_folder) { ft.type_assert(export_folder, 'string'); return ft.combine_path( export_folder, this.get_export_filename()); }; - - BitmapAsset.prototype.export = function(export_folder, xml_node) { + + BitmapAsset.prototype.export = function (export_folder, xml_node) { ft.type_assert(export_folder, 'string'); ft.type_assert(xml_node, XmlNode); this.export_content(export_folder); this.export_description(xml_node); }; - - BitmapAsset.prototype.export_content = function(export_folder) { + + BitmapAsset.prototype.export_content = function (export_folder) { ft.type_assert(export_folder, 'string'); var fullfilename = this.get_export_fullfilename(export_folder); - if ( !this.item.exportToFile(fullfilename) ) { + if (!this.item.exportToFile(fullfilename)) { throw "Can't export bitmap ({0})!" .format(fullfilename); } }; - - BitmapAsset.prototype.export_description = function(xml_node) { + + BitmapAsset.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); xml_node.child("bitmap") .attr("id" , this.get_id()) .attr("type" , this.get_type()) .attr("filename", this.get_export_filename()); }; - + // ---------------------------------------------------------------------------- // // SymbolAsset // // ---------------------------------------------------------------------------- - - var SymbolAsset = function(item, unique_ids) { + + var SymbolAsset = function (item, unique_ids) { ft.type_assert(item, SymbolItem); ft.type_assert(unique_ids, UniqueIds); this.item = item; this.uniqueIds = unique_ids; }; - - SymbolAsset.prototype.trace = function(indent) { + + SymbolAsset.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); - ft.trace_fmt("{0}-= SymbolAsset =-" , indent); + ft.trace_fmt("{0}-= SymbolAsset =-", indent); ft.trace_fmt("{0}-Id : {1}", indent, this.get_id()); ft.trace_fmt("{0}-Name : {1}", indent, this.get_name()); ft.trace_fmt("{0}-ExportFilename : {1}", indent, this.get_export_filename()); }; - - SymbolAsset.prototype.get_id = function() { + + SymbolAsset.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - SymbolAsset.prototype.get_name = function() { + + SymbolAsset.prototype.get_name = function () { return this.item.name; }; - - SymbolAsset.prototype.get_type = function() { + + SymbolAsset.prototype.get_type = function () { return "symbol"; }; - - SymbolAsset.prototype.get_export_filename = function() { + + SymbolAsset.prototype.get_export_filename = function () { return "symbols/{0}.xml".format(this.get_id()); }; - - SymbolAsset.prototype.get_export_fullfilename = function(export_folder) { + + SymbolAsset.prototype.get_export_fullfilename = function (export_folder) { ft.type_assert(export_folder, 'string'); return ft.combine_path( export_folder, this.get_export_filename()); }; - SymbolAsset.prototype.export = function(export_folder, xml_node) { + SymbolAsset.prototype.convert = function (document) { + ft.type_assert(document, Document); + new TimelineInst(this.item.timeline, this.uniqueIds) + .convert(document); + }; + + SymbolAsset.prototype.prepare = function (document) { + ft.type_assert(document, Document); + new TimelineInst(this.item.timeline, this.uniqueIds) + .prepare(document); + }; + + SymbolAsset.prototype.export = function (export_folder, xml_node) { ft.type_assert(export_folder, 'string'); ft.type_assert(xml_node, XmlNode); this.export_content(export_folder); this.export_description(xml_node); }; - - SymbolAsset.prototype.export_content = function(export_folder) { + + SymbolAsset.prototype.export_content = function (export_folder) { ft.type_assert(export_folder, 'string'); var xml_node = new XmlNode("symbol") .attr("id", this.get_id()); @@ -407,100 +422,146 @@ if ( typeof Object.create != 'function' ) { .export_description(xml_node); xml_node.save(this.get_export_fullfilename(export_folder)); }; - - SymbolAsset.prototype.export_description = function(xml_node) { + + SymbolAsset.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); xml_node.child("symbol") .attr("id" , this.get_id()) .attr("type" , this.get_type()) .attr("filename", this.get_export_filename()); }; - + // ---------------------------------------------------------------------------- // // LibraryInst // // ---------------------------------------------------------------------------- - - var LibraryInst = function(library, unique_ids) { + + var LibraryInst = function (library, unique_ids) { ft.type_assert(library, Library); ft.type_assert(unique_ids, UniqueIds); this.library = library; this.uniqueIds = unique_ids; }; - - LibraryInst.prototype.is_folder_item = function(item) { + + LibraryInst.prototype.is_folder_item = function (item) { ft.type_assert(item, LibraryItem); return item.itemType == "folder"; }; - LibraryInst.prototype.is_bitmap_item = function(item) { + LibraryInst.prototype.is_bitmap_item = function (item) { ft.type_assert(item, LibraryItem); return item.itemType == "bitmap"; }; - LibraryInst.prototype.is_symbol_item = function(item) { + LibraryInst.prototype.is_symbol_item = function (item) { ft.type_assert(item, LibraryItem); return item.itemType == "graphic" || item.itemType == "movie clip"; }; - - LibraryInst.prototype.for_each_by_items = function(func, filter) { + + LibraryInst.prototype.for_each_by_items = function (func, filter) { ft.type_assert(func, Function); ft.type_assert_if_defined(filter, Function); ft.array_foreach(this.library.items, func, filter); }; - LibraryInst.prototype.export = function(export_folder, xml_node) { + LibraryInst.prototype.convert = function (document) { + ft.type_assert(document, Document); + this.for_each_by_items(function (item) { + if ( this.library.editItem(item.name) ) { + ft.trace_fmt("Convert: {0}", item.name); + new SymbolAsset(item, this.uniqueIds) + .convert(document); + document.exitEditMode(); + } + }.bind(this), this.is_symbol_item.bind(this)); + }; + + LibraryInst.prototype.prepare = function (document) { + ft.type_assert(document, Document); + this.for_each_by_items(function (item) { + if ( this.library.editItem(item.name) ) { + ft.trace_fmt("Prepare: {0}", item.name); + new SymbolAsset(item, this.uniqueIds) + .prepare(document); + document.exitEditMode(); + } + }.bind(this), this.is_symbol_item.bind(this)); + }; + + LibraryInst.prototype.export = function (export_folder, xml_node) { ft.type_assert(export_folder, 'string'); ft.type_assert(xml_node, XmlNode); - this.for_each_by_items(function(item) { - if ( this.is_bitmap_item(item) ) { + this.for_each_by_items(function (item) { + if (this.is_bitmap_item(item)) { new BitmapAsset(item, this.uniqueIds) .export(export_folder, xml_node); - } else if ( this.is_symbol_item(item) ) { + } else if (this.is_symbol_item(item)) { new SymbolAsset(item, this.uniqueIds) .export(export_folder, xml_node); } else { throw "Unsupported library item type ({0})!" .format(item.itemType); } - }.bind(this), function(item) { + }.bind(this), function (item) { return !this.is_folder_item(item); }.bind(this)); }; - + // ---------------------------------------------------------------------------- // // TimelineInst // // ---------------------------------------------------------------------------- - var TimelineInst = function(timeline, unique_ids) { + var TimelineInst = function (timeline, unique_ids) { ft.type_assert(timeline, Timeline); ft.type_assert(unique_ids, UniqueIds); this.timeline = timeline; this.uniqueIds = unique_ids; }; - - TimelineInst.prototype.trace = function(indent) { + + TimelineInst.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); ft.trace_fmt("{0}-= TimelineInst =-", indent); - ft.trace_fmt("{0}-Id : {1}" , indent, this.get_id()); - ft.trace_fmt("{0}-Name : {1}" , indent, this.get_name()); - ft.trace_fmt("{0}-Layers : {1}" , indent, this.timeline.layerCount); - ft.trace_fmt("{0}-Frames : {1}" , indent, this.timeline.frameCount); + ft.trace_fmt("{0}-Id : {1}", indent, this.get_id()); + ft.trace_fmt("{0}-Name : {1}", indent, this.get_name()); + ft.trace_fmt("{0}-Layers : {1}", indent, this.timeline.layerCount); + ft.trace_fmt("{0}-Frames : {1}", indent, this.timeline.frameCount); }; - - TimelineInst.prototype.get_id = function() { + + TimelineInst.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - TimelineInst.prototype.get_name = function() { + + TimelineInst.prototype.get_name = function () { return this.timeline.name; }; - TimelineInst.prototype.export_description = function(xml_node) { + TimelineInst.prototype.convert = function (document) { + ft.type_assert(document, Document); + if ( this.timeline.layers.length > 1 ) { + this.timeline.selectAllFrames(); + this.timeline.convertToKeyframes(); + } + ft.array_foreach(this.timeline.layers, function(layer, index) { + this.timeline.setSelectedLayers(index); + new LayerInst(layer, this.uniqueIds) + .convert(document, this.timeline); + }.bind(this)); + }; + + TimelineInst.prototype.prepare = function (document) { + ft.type_assert(document, Document); + ft.array_foreach(this.timeline.layers, function(layer, index) { + this.timeline.setSelectedLayers(index); + new LayerInst(layer, this.uniqueIds) + .prepare(document, this.timeline); + }.bind(this)); + }; + + TimelineInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); var timeline_node = xml_node.child("timeline") .attr("id", this.get_id()); @@ -509,21 +570,21 @@ if ( typeof Object.create != 'function' ) { .export_description(timeline_node); }.bind(this)); }; - + // ---------------------------------------------------------------------------- // // LayerInst // // ---------------------------------------------------------------------------- - - var LayerInst = function(layer, unique_ids) { + + var LayerInst = function (layer, unique_ids) { ft.type_assert(layer, Layer); ft.type_assert(unique_ids, UniqueIds); this.layer = layer; this.uniqueIds = unique_ids; }; - - LayerInst.prototype.trace = function(indent) { + + LayerInst.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); ft.trace_fmt("{0}-= LayerInst =-", indent); @@ -531,40 +592,82 @@ if ( typeof Object.create != 'function' ) { ft.trace_fmt("{0}-Name : {1}" , indent, this.get_name()); ft.trace_fmt("{0}-Frames : {1}" , indent, this.layer.frameCount); }; - - LayerInst.prototype.get_id = function() { + + LayerInst.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - LayerInst.prototype.get_name = function() { + + LayerInst.prototype.get_name = function () { return this.layer.name; }; + + LayerInst.prototype.do_in_unlocked = function (func) { + ft.type_assert(func, Function); + var prev_locked = this.layer.locked; + var prev_visible = this.layer.visible; + this.layer.locked = false; + this.layer.visible = true; + func(); + this.layer.locked = prev_locked; + this.layer.visible = prev_visible; + }; - LayerInst.prototype.export_description = function(xml_node) { + LayerInst.prototype.convert = function (document, timeline) { + ft.type_assert(document, Document); + ft.type_assert(timeline, Timeline); + this.do_in_unlocked(function() { + ft.array_foreach(this.layer.frames, function(frame) { + frame.convertToFrameByFrameAnimation(); + }.bind(this)); + ft.array_foreach(this.layer.frames, function(frame, index) { + timeline.setSelectedFrames(index, index + 1); + var inst = new FrameInst(frame, index, this.uniqueIds); + if (inst.get_start_frame() == index) { + inst.convert(document, timeline, this.layer); + } + }.bind(this)); + }.bind(this)); + }; + + LayerInst.prototype.prepare = function (document, timeline) { + ft.type_assert(document, Document); + ft.type_assert(timeline, Timeline); + this.do_in_unlocked(function() { + ft.array_foreach(this.layer.frames, function(frame, index) { + timeline.setSelectedFrames(index, index + 1); + var inst = new FrameInst(frame, index, this.uniqueIds); + if (inst.get_start_frame() == index) { + inst.prepare(document, timeline, this.layer); + } + }.bind(this)); + }.bind(this)); + }; + + LayerInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); var layer_node = xml_node.child("layer") - .attr("id" , this.get_id()) - .attr("visible" , this.layer.visible) - .attr("layer_type" , this.layer.layerType); - if ( this.layer.parentLayer ) { + .attr("id" , this.get_id()) + .attr("visible" , this.layer.visible) + .attr("layer_type", this.layer.layerType); + if (this.layer.parentLayer) { var parent_layer = new LayerInst(this.layer.parentLayer, this.uniqueIds); layer_node.attr("parent_layer", parent_layer.get_id()); } - ft.array_foreach(this.layer.frames, function(frame, index) { + ft.array_foreach(this.layer.frames, function (frame, index) { var inst = new FrameInst(frame, index, this.uniqueIds); - if ( inst.get_start_frame() == index ) { + if (inst.get_start_frame() == index) { inst.export_description(layer_node); } }.bind(this)); }; - + // ---------------------------------------------------------------------------- // // FrameInst // // ---------------------------------------------------------------------------- - var FrameInst = function(frame, index, unique_ids) { + var FrameInst = function (frame, index, unique_ids) { ft.type_assert(frame, Frame); ft.type_assert(index, 'number'); ft.type_assert(unique_ids, UniqueIds); @@ -572,8 +675,8 @@ if ( typeof Object.create != 'function' ) { this.index = index; this.uniqueIds = unique_ids; }; - - FrameInst.prototype.trace = function(indent) { + + FrameInst.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); ft.trace_fmt("{0}-= FrameInst =-", indent); @@ -581,51 +684,68 @@ if ( typeof Object.create != 'function' ) { ft.trace_fmt("{0}-Name : {1}", indent, this.get_name()); ft.trace_fmt("{0}-Elements : {1}", indent, this.frame.elements.length); }; - - FrameInst.prototype.get_id = function() { + + FrameInst.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - FrameInst.prototype.get_name = function() { + + FrameInst.prototype.get_name = function () { return this.frame.name; }; - - FrameInst.prototype.get_index = function() { + + FrameInst.prototype.get_index = function () { return this.index; }; - - FrameInst.prototype.get_start_frame = function() { + + FrameInst.prototype.get_start_frame = function () { return this.frame.startFrame; }; - - FrameInst.prototype.is_element_shape = function(element) { + + FrameInst.prototype.is_element_shape = function (element) { return element.elementType == "shape"; }; - - FrameInst.prototype.is_element_instance = function(element) { + + FrameInst.prototype.is_element_instance = function (element) { return element.elementType == "instance"; }; - - FrameInst.prototype.is_element_bitmap = function(element) { + + FrameInst.prototype.is_element_bitmap = function (element) { return this.is_element_instance(element) && element.instanceType == "bitmap"; }; - - FrameInst.prototype.is_element_symbol = function(element) { + + FrameInst.prototype.is_element_symbol = function (element) { return this.is_element_instance(element) && element.instanceType == "symbol"; }; - FrameInst.prototype.export_element = function(xml_node, element) { + FrameInst.prototype.convert = function (document, timeline, layer) { + ft.type_assert(document, Document); + ft.type_assert(timeline, Timeline); + ft.type_assert(layer, Layer); + }; + + FrameInst.prototype.prepare = function (document, timeline, layer) { + ft.type_assert(document, Document); + ft.type_assert(timeline, Timeline); + ft.type_assert(layer, Layer); + ft.array_foreach(this.frame.elements, function (element, index) { + if (this.is_element_shape(element)) { + timeline.currentFrame = this.frame.startFrame; + document.selection = [element]; + document.convertSelectionToBitmap(); + } + }.bind(this)); + }; + + FrameInst.prototype.export_element = function (xml_node, element) { ft.type_assert(xml_node, XmlNode); ft.type_assert(element, Element); - if ( this.is_element_shape(element) ) { - /// \TODO: shape to bitmap - } else if ( this.is_element_bitmap(element) ) { + if (this.is_element_bitmap(element)) { new BitmapInst(element, this.uniqueIds) .export_description(xml_node); - } else if ( this.is_element_symbol(element) ) { + } else if (this.is_element_symbol(element)) { new SymbolInst(element, this.uniqueIds) .export_description(xml_node); - } else if ( this.is_element_instance(element) ) { + } else if (this.is_element_instance(element)) { ft.assert(false, "Unsupported instance type ({0})!", element.instanceType); @@ -635,154 +755,152 @@ if ( typeof Object.create != 'function' ) { element.elementType); } }; - - FrameInst.prototype.export_description = function(xml_node) { + + FrameInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); var frame_node = xml_node.child("frame") - .attr("id" , this.get_id()) - .attr("index" , this.get_index()) - .attr("duration" , this.frame.duration) - .attr("tween_type" , this.frame.tweenType) - .attr("tween_easing", this.frame.tweenEasing); - ft.array_foreach(this.frame.elements, function(element) { + .attr("id" , this.get_id()) + .attr("index" , this.get_index()) + .attr("duration", this.frame.duration); + ft.array_foreach(this.frame.elements, function (element) { this.export_element(frame_node, element); }.bind(this)); }; - + // ---------------------------------------------------------------------------- // // ElementInst // // ---------------------------------------------------------------------------- - var ElementInst = function(inst, unique_ids) { + var ElementInst = function (inst, unique_ids) { ft.type_assert(inst, Instance); ft.type_assert(unique_ids, UniqueIds); - this.inst = inst; + this.inst = inst; this.uniqueIds = unique_ids; }; - - ElementInst.prototype.trace = function(indent) { + + ElementInst.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); ft.trace_fmt("{0}-= ElementInst =-", indent); - ft.trace_fmt("{0}-Id : {1}" , indent, this.get_id()); - ft.trace_fmt("{0}-Name : {1}" , indent, this.get_name()); + ft.trace_fmt("{0}-Id : {1}", indent, this.get_id()); + ft.trace_fmt("{0}-Name : {1}", indent, this.get_name()); }; - - ElementInst.prototype.get_id = function() { + + ElementInst.prototype.get_id = function () { return this.uniqueIds.get_string_id(this.get_name()); }; - - ElementInst.prototype.get_name = function() { + + ElementInst.prototype.get_name = function () { return this.inst.name; }; - - ElementInst.prototype.export_description = function(xml_node) { + + ElementInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); return xml_node.child("element") .attr("id" , this.get_id()) .attr("depth" , this.inst.depth) .attr("matrix", "{0};{1};{2};{3};{4};{5}".format( - this.inst.matrix.a, this.inst.matrix.b, - this.inst.matrix.c, this.inst.matrix.d, + this.inst.matrix.a, this.inst.matrix.b, + this.inst.matrix.c, this.inst.matrix.d, this.inst.matrix.tx, this.inst.matrix.ty)); }; - + // ---------------------------------------------------------------------------- // // BitmapInst // // ---------------------------------------------------------------------------- - - var BitmapInst = function(inst, unique_ids) { + + var BitmapInst = function (inst, unique_ids) { ElementInst.call(this, inst, unique_ids); }; - + BitmapInst.prototype = Object.create(ElementInst.prototype); - - BitmapInst.prototype.export_description = function(xml_node) { + + BitmapInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); ElementInst.prototype.export_description.call(this, xml_node) .child("instance") - .attr("type" , "bitmap") - .attr("asset" , this.uniqueIds.get_string_id(this.inst.libraryItem.name)); + .attr("type" , "bitmap") + .attr("asset", this.uniqueIds.get_string_id(this.inst.libraryItem.name)); }; - + // ---------------------------------------------------------------------------- // // SymbolInst // // ---------------------------------------------------------------------------- - - var SymbolInst = function(inst, unique_ids) { + + var SymbolInst = function (inst, unique_ids) { ElementInst.call(this, inst, unique_ids); }; - + SymbolInst.prototype = Object.create(ElementInst.prototype); - - SymbolInst.prototype.export_description = function(xml_node) { + + SymbolInst.prototype.export_description = function (xml_node) { ft.type_assert(xml_node, XmlNode); var instance_node = ElementInst.prototype.export_description.call(this, xml_node) .child("instance") - .attr("type" , "symbol") - .attr("symbol_type" , this.inst.symbolType) - .attr("asset" , this.uniqueIds.get_string_id(this.inst.libraryItem.name)) - .attr("visible" , this.inst.visible) - .attr("blend_mode" , this.inst.blendMode); - if ( this.inst.colorMode !== "none" ) { + .attr("type" , "symbol") + .attr("symbol_type", this.inst.symbolType) + .attr("asset" , this.uniqueIds.get_string_id(this.inst.libraryItem.name)) + .attr("visible" , this.inst.visible) + .attr("blend_mode" , this.inst.blendMode); + if (this.inst.colorMode !== "none") { var color_mode_node = instance_node.child("color_mode") .attr("color_mode", this.inst.colorMode); - if ( this.inst.colorMode == "brightness" ) { + if (this.inst.colorMode == "brightness") { color_mode_node .attr("brightness", this.inst.brightness); - } else if ( this.inst.colorMode == "tint" ) { + } else if (this.inst.colorMode == "tint") { color_mode_node .attr("tint" , this.inst.tintPercent) .attr("color", this.inst.tintColor); - } else if ( this.inst.colorMode == "alpha" ) { + } else if (this.inst.colorMode == "alpha") { color_mode_node .attr("alpha", this.inst.colorAlphaPercent); - } else if ( this.inst.colorMode == "advanced" ) { + } else if (this.inst.colorMode == "advanced") { color_mode_node .attr("a", "{0};{1}".format(this.inst.colorAlphaAmount, this.inst.colorAlphaPercent)) - .attr("r", "{0};{1}".format(this.inst.colorRedAmount , this.inst.colorRedPercent)) + .attr("r", "{0};{1}".format(this.inst.colorRedAmount, this.inst.colorRedPercent)) .attr("g", "{0};{1}".format(this.inst.colorGreenAmount, this.inst.colorGreenPercent)) - .attr("b", "{0};{1}".format(this.inst.colorBlueAmount , this.inst.colorBluePercent)); + .attr("b", "{0};{1}".format(this.inst.colorBlueAmount, this.inst.colorBluePercent)); } else { ft.assert(false, "Unsupported color mode ({0})!", this.inst.colorMode); } } - if ( this.inst.loop !== undefined && this.inst.firstFrame !== undefined ) { + if (this.inst.loop !== undefined && this.inst.firstFrame !== undefined) { instance_node.child("looping") .attr("loop" , this.inst.loop) .attr("first_frame", this.inst.firstFrame); } - if ( this.inst.filters && this.inst.filters.length > 0 ) { + if (this.inst.filters && this.inst.filters.length > 0) { var filters_node = instance_node.child("filters"); - ft.array_foreach(this.inst.filters, function(filter) { + ft.array_foreach(this.inst.filters, function (filter) { /// \TODO export filters filters_node.child("filter") .attr("name", filter.name); }); } }; - + // ---------------------------------------------------------------------------- // // Exporter // // ---------------------------------------------------------------------------- - - var Exporter = function(document) { + + var Exporter = function (document) { ft.type_assert(document, Document); this.document = document; this.uniqueIds = new UniqueIds(); }; - - Exporter.prototype.trace = function(indent) { + + Exporter.prototype.trace = function (indent) { indent = indent || ""; ft.type_assert(indent, 'string'); ft.trace_fmt("{0}-= Exporter =-", indent); @@ -790,93 +908,112 @@ if ( typeof Object.create != 'function' ) { ft.trace_fmt("{0}-Document path : {1}", indent, this.get_document_path()); ft.trace_fmt("{0}-Export folter : {1}", indent, this.get_export_folder()); }; - - Exporter.prototype.get_document_path = function() { + + Exporter.prototype.get_document_path = function () { return ft.escape_path(this.document.pathURI); }; - Exporter.prototype.get_export_folder = function() { + Exporter.prototype.get_export_folder = function () { return ft.combine_path( this.get_document_path(), "_export/"); }; - - Exporter.prototype.get_stage_export_path = function() { + + Exporter.prototype.get_stage_export_path = function () { return ft.combine_path( this.get_export_folder(), "stage.xml"); }; - Exporter.prototype.get_library_export_path = function() { + Exporter.prototype.get_library_export_path = function () { return ft.combine_path( this.get_export_folder(), "library.xml"); }; - Exporter.prototype.get_strings_export_path = function() { + Exporter.prototype.get_strings_export_path = function () { return ft.combine_path( this.get_export_folder(), "strings.xml"); }; - - Exporter.prototype.export = function() { + + Exporter.prototype.export = function () { this.trace(); ft.trace("- Start..."); try { - this.prepare_export_folder(); + this.prepare_folders(); + this.convert_document(); + this.prepare_document(); this.export_library(); this.export_stage(); this.export_strings(); ft.trace_fmt("- Finish : {0}", this.get_export_folder()); - } catch ( e ) { + } catch (e) { ft.trace_fmt("- Error : {0}", e); } }; - - Exporter.prototype.prepare_export_folder = function() { + + Exporter.prototype.prepare_folders = function () { var export_folder = this.get_export_folder(); - if ( FLfile.exists(export_folder) ) { - if ( !FLfile.remove(export_folder) ) { + if (FLfile.exists(export_folder)) { + if (!FLfile.remove(export_folder)) { throw "Can't remove document export folder ({0})!" .format(export_folder); } } - if ( !FLfile.createFolder(export_folder) ) { + if (!FLfile.createFolder(export_folder)) { throw "Can't create document export folder ({0})!" .format(export_folder); } - if ( !FLfile.createFolder(export_folder + "bitmaps/") ) { + if (!FLfile.createFolder(export_folder + "bitmaps/")) { throw "Can't create document bitmaps export folder ({0})!" .format(export_folder); } - if ( !FLfile.createFolder(export_folder + "symbols/") ) { + if (!FLfile.createFolder(export_folder + "symbols/")) { throw "Can't create document symbols export folder ({0})!" .format(export_folder); } }; - Exporter.prototype.export_library = function() { + Exporter.prototype.convert_document = function () { + this.exit_edit_mode(); + new TimelineInst(this.document.getTimeline(), this.uniqueIds) + .convert(this.document); + new LibraryInst(this.document.library, this.uniqueIds) + .convert(this.document); + }; + + Exporter.prototype.prepare_document = function () { + this.exit_edit_mode(); + new TimelineInst(this.document.getTimeline(), this.uniqueIds) + .prepare(this.document); + new LibraryInst(this.document.library, this.uniqueIds) + .prepare(this.document); + }; + + Exporter.prototype.export_library = function () { + this.exit_edit_mode(); var xml_node = new XmlNode("library") .attr("frame_rate", this.document.frameRate); new LibraryInst(this.document.library, this.uniqueIds) .export(this.get_export_folder(), xml_node); xml_node.save(this.get_library_export_path()); }; - - Exporter.prototype.export_stage = function() { + + Exporter.prototype.export_stage = function () { this.exit_edit_mode(); var xml_node = new XmlNode("stage"); new TimelineInst(this.document.getTimeline(), this.uniqueIds) .export_description(xml_node); xml_node.save(this.get_stage_export_path(document)); }; - - Exporter.prototype.export_strings = function() { + + Exporter.prototype.export_strings = function () { this.uniqueIds.save(this.get_strings_export_path()); }; - - Exporter.prototype.exit_edit_mode = function() { - for ( var i = 0; i < 100; ++i ) { + + Exporter.prototype.exit_edit_mode = function () { + for (var i = 0; i < 100; ++i) { this.document.exitEditMode(); } }; @@ -885,10 +1022,10 @@ if ( typeof Object.create != 'function' ) { // Main // ------------------------------------ - (function() { + (function () { ft.clear_output(); - ft.array_foreach(fl.documents, function(document) { + ft.array_foreach(fl.documents, function (document) { new Exporter(document).export(); }); })(); -})(); +})(); \ No newline at end of file