From d4ba101049c1871524c7abf659cb905f5aec4bae Mon Sep 17 00:00:00 2001 From: Tuomas Salo Date: Sun, 17 Jan 2016 23:39:58 +0200 Subject: [PATCH] Added mixin for exporting object names as classes --- bin/swf2svg.py | 8 +++++++- swf/export.py | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/bin/swf2svg.py b/bin/swf2svg.py index 9d35f7e..39e8b84 100644 --- a/bin/swf2svg.py +++ b/bin/swf2svg.py @@ -1,6 +1,6 @@ import argparse from swf.movie import SWF -from swf.export import SVGExporter, SingleShapeSVGExporterMixin, FrameSVGExporterMixin +from swf.export import SVGExporter, SingleShapeSVGExporterMixin, FrameSVGExporterMixin, NamesSVGExporterMixin parser = argparse.ArgumentParser(description="Convert an SWF file into an SVG") parser.add_argument("--swf", type=argparse.FileType('rb'), @@ -11,6 +11,8 @@ help="Only export shape SHAPE (integer)", required=False) parser.add_argument("--frame", type=int, help="Export frame FRAME (0-based index) instead of frame 0", required=False) +parser.add_argument("--names", action='store_true', + help='For each element, extract SWF instanceName to class="n-"', required=False) options = parser.parse_args() argparse.swf_file = options.swf @@ -32,6 +34,10 @@ export_mixins.append(FrameSVGExporterMixin) export_opts['frame'] = options.frame +if options.names: + export_mixins.append(NamesSVGExporterMixin) + + # create the SVG exporter svg_exporter = SVGExporter() diff --git a/swf/export.py b/swf/export.py index e421d2e..bd06c87 100644 --- a/swf/export.py +++ b/swf/export.py @@ -899,12 +899,25 @@ def get_display_tags(self, tags, z_sorted=True): if not tag.hasCharacter: tag.characterId = orig_tag.characterId + # this is for NamesSVGExporterMixin + if not tag.hasName: + tag.instanceName = orig_tag.instanceName frame_tags[tag.depth] = tag elif isinstance(tag, TagRemoveObject): del frame_tags[tag.depth] return super(FrameSVGExporterMixin, self).get_display_tags(frame_tags.values(), z_sorted) +class NamesSVGExporterMixin(object): + ''' + Add class="n-" to SVG elements for tags that have an instanceName. + ''' + def export_display_list_item(self, tag, parent=None): + use = super(NamesSVGExporterMixin, self).export_display_list_item(tag, parent) + if hasattr(tag, 'instanceName') and tag.instanceName is not None: + use.set('class', 'n-%s' % tag.instanceName) + return use + class SVGFilterFactory(object): # http://commons.oreilly.com/wiki/index.php/SVG_Essentials/Filters