diff --git a/Tools/FlashExport2.jsfl b/Tools/FlashExport2.jsfl index e90b5fe..c834a20 100644 --- a/Tools/FlashExport2.jsfl +++ b/Tools/FlashExport2.jsfl @@ -66,6 +66,12 @@ FlashTools.prototype.TypeAssert = function(item, type) { "Type error: {0} != {1}".format(typeof item, type.name)); }; +FlashTools.prototype.TypeAssertIfDefined = function(item, type) { + if ( item != undefined ) { + this.TypeAssert(item, type); + } +}; + FlashTools.prototype.ClearOutput = function() { fl.outputPanel.clear(); }; @@ -120,6 +126,76 @@ FlashTools.prototype.ExportStringIdsXmlContent = function() { return xml_content + ""; }; +// ------------------------------------ +// Xml functions +// ------------------------------------ + +FlashTools.prototype.XmlNode = function(node_name) { + var Assert = this.Assert.bind(this); + var TypeAssert = this.TypeAssert.bind(this); + var TypeAssertIfDefined = this.TypeAssertIfDefined.bind(this); + var EscapeString = this.EscapeString.bind(this); + var DefaultIndent = this.defaultIndent; + + var Ctor = function(node_name, node_parent) { + TypeAssert(node_name, 'string'); + TypeAssertIfDefined(node_parent, Ctor); + this.name = node_name; + this.parent = node_parent; + this.attrs = []; + this.children = []; + }; + + Ctor.prototype.Attr = function(attr_name, attr_value) { + TypeAssert(attr_name, 'string'); + attr_value = EscapeString(attr_value.toString()); + for ( var i = 0; i < this.attrs.length; ++i ) { + var attr = this.attrs[i]; + if ( attr.name == attr_name ) { + attr.value = attr_value; + return this; + } + } + this.attrs.push({name:attr_name, value:attr_value}); + return this; + }; + + Ctor.prototype.Child = function(child_name) { + TypeAssert(child_name, 'string'); + var child = new Ctor(child_name, this); + this.children.push(child); + return child; + }; + + Ctor.prototype.Parent = function() { + Assert(this.parent != undefined, "node parent is undefined"); + return this.parent; + }; + + Ctor.prototype.Content = function(indent) { + indent = indent == undefined ? "" : indent; + var str = '{0}<{1}'.format(indent, this.name); + if ( this.attrs.length > 0 ) { + for ( var i = 0; i < this.attrs.length; ++i ) { + var attr = this.attrs[i]; + str += ' {0}="{1}"'.format(attr.name, attr.value); + } + } + if ( this.children.length > 0 ) { + str += ">\n"; + for ( var i = 0; i < this.children.length; ++i ) { + var child = this.children[i]; + str += child.Content(indent + DefaultIndent) + "\n"; + } + return str + "{0}<{1}/>".format(indent, this.name); + } else { + return str + "/>"; + } + }; + + return new Ctor(node_name); +}; + // ------------------------------------ // Library item functions // ------------------------------------ @@ -240,6 +316,83 @@ FlashTools.prototype.SymbolItem_GetLibraryXmlDescription = function(item, indent this.SymbolItem_GetExportFilename(item)); }; +// ------------------------------------ +// Element functions +// ------------------------------------ + +FlashTools.prototype.Element_ExportXmlContent = function(element, indent) { + indent = indent == undefined ? "" : indent; + this.TypeAssert(element, Element); + this.TypeAssert(indent, 'string'); + + if ( element.elementType == "shape" ) { + /// \TODO: shape to bitmap + } else if ( element.elementType == "instance" ) { + if ( element.instanceType == "bitmap" ) { + } else if ( element.instanceType == "symbol" ) { + } else { + throw "Unsupported element type ({0})!" + .format(element.elementType); + } + //this.Trace("Instance type : " + element.instanceType); + //this.Trace("Library item : " + element.libraryItem.name); + } else { + throw "Unsupported element type ({0})!" + .format(element.elementType); + } + + return ('{0}' + + '\n{3}{0}\n').format( + indent, + this.GetStringId(element.name), + element.depth, + this.ElementTransform_ExportXmlContent(element, indent + this.defaultIndent)); +}; + +FlashTools.prototype.ElementTransform_ExportXmlContent = function(element, indent) { + indent = indent == undefined ? "" : indent; + this.TypeAssert(element, Element); + this.TypeAssert(indent, 'string'); + return this.XmlNode("transform") + .Attr("a" , element.matrix.a) + .Attr("b" , element.matrix.b) + .Attr("c" , element.matrix.c) + .Attr("d" , element.matrix.d) + .Attr("tx", element.matrix.tx) + .Attr("ty", element.matrix.ty) + .Content(indent) + "\n"; +}; + +// ------------------------------------ +// Frame functions +// ------------------------------------ + +FlashTools.prototype.Frame_ExportXmlContent = function(frame, indent) { + indent = indent == undefined ? "" : indent; + this.TypeAssert(frame, Frame); + this.TypeAssert(indent, 'string'); + return ('{0}' + + '\n{5}{0}\n').format( + indent, + this.GetStringId(frame.name), + frame.startFrame, + frame.duration, + frame.elements.length, + this.FrameElements_ExportXmlContent(frame, indent + this.defaultIndent)); +}; + +FlashTools.prototype.FrameElements_ExportXmlContent = function(frame, indent) { + indent = indent == undefined ? "" : indent; + this.TypeAssert(frame, Frame); + this.TypeAssert(indent, 'string'); + var xml_content = ""; + for ( var i = 0; i < frame.elements.length; ++i ) { + var element = frame.elements[i]; + xml_content += this.Element_ExportXmlContent(element, indent); + } + return xml_content; +}; + // ------------------------------------ // Layer functions // ------------------------------------ @@ -248,15 +401,30 @@ FlashTools.prototype.Layer_ExportXmlContent = function(layer, indent) { indent = indent == undefined ? "" : indent; this.TypeAssert(layer, Layer); this.TypeAssert(indent, 'string'); - return '{0}\n'.format( - indent, - this.GetStringId(layer.name), - layer.layerType, - layer.frameCount, - layer.locked, - layer.visible, - layer.animationType, - layer.parentLayer ? this.GetStringId(layer.parentLayer.name) : ""); + return ('{0}' + + '\n{8}{0}\n').format( + indent, + this.GetStringId(layer.name), + layer.layerType, + layer.frameCount, + layer.locked, + layer.visible, + layer.animationType, + layer.parentLayer ? this.GetStringId(layer.parentLayer.name) : "", + this.LayerFrames_ExportXmlContent(layer, indent + this.defaultIndent)); +}; + +FlashTools.prototype.LayerFrames_ExportXmlContent = function(layer, indent) { + indent = indent == undefined ? "" : indent; + this.TypeAssert(layer, Layer); + this.TypeAssert(indent, 'string'); + var xml_content = ""; + for ( var i = 0; i < layer.frames.length; ++i ) { + var frame = layer.frames[i]; + xml_content += this.Frame_ExportXmlContent(frame, indent); + } + return xml_content; }; // ------------------------------------ @@ -288,7 +456,7 @@ FlashTools.prototype.TimelineLayers_ExportXmlContent = function(timeline, indent var xml_content = ""; for ( var i = 0; i < timeline.layers.length; ++i ) { var layer = timeline.layers[i]; - xml_content += this.Layer_ExportXmlContent(layer, indent + this.defaultIndent); + xml_content += this.Layer_ExportXmlContent(layer, indent); } return xml_content; }; @@ -337,10 +505,9 @@ FlashTools.prototype.Document_ExitEditMode = function(document) { }; FlashTools.prototype.Document_ForEachByLibraryItems = function(document, func, filter_func) { - filter_func = filter_func == undefined ? function(item) { return true; } : filter_func; this.TypeAssert(document, Document); this.TypeAssert(func, 'function'); - this.TypeAssert(filter_func, 'function'); + this.TypeAssertIfDefined(filter_func, 'function'); for ( var i = 0; i < document.library.items.length; ++i ) { var item = document.library.items[i]; if ( filter_func == undefined || filter_func(item) ) { @@ -366,7 +533,9 @@ FlashTools.prototype.Document_PrepareExportFolder = function(document) { FlashTools.prototype.Document_ExportLibrary = function(document) { this.TypeAssert(document, Document); - var xml_content = "\n"; + var xml_content = + '\n'.format( + document.frameRate); this.Document_ForEachByLibraryItems(document, function(item) { if ( this.IsFolderLibraryItem(item) ) { // nothing @@ -404,8 +573,9 @@ FlashTools.prototype.Document_ExportSymbols = function(document) { FlashTools.prototype.Document_ExportStage = function(document) { this.TypeAssert(document, Document); this.Document_ExitEditMode(document); - var xml_content = "\n{0}".format( - this.Timeline_ExportXmlContent(document.getTimeline(), this.defaultIndent)); + var xml_content = + '\n{0}'.format( + this.Timeline_ExportXmlContent(document.getTimeline(), this.defaultIndent)); var stage_path = this.Document_GetStageExportPath(document); if ( !FLfile.write(stage_path, xml_content) ) { throw "Can't create stage xml ({0})!" @@ -436,9 +606,9 @@ FlashTools.prototype.ConvertAll = function() { FlashTools.prototype.ConvertOne = function(document) { this.TypeAssert(document, Document); + this.ClearStringIds(); this.Trace("-= Convert document start =-"); try { - this.ClearStringIds(); this.Document_TraceInfo(document); this.Document_PrepareExportFolder(document); this.Document_ExportLibrary(document); @@ -484,6 +654,3 @@ ft.ClearOutput(); if ( ft.RunTests() ) { ft.ConvertAll(); } - - -