diff options
Diffstat (limited to 'src/MTools/SVG')
-rw-r--r-- | src/MTools/SVG/SVGLoader.pm | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/MTools/SVG/SVGLoader.pm b/src/MTools/SVG/SVGLoader.pm new file mode 100644 index 0000000..1aeafc7 --- /dev/null +++ b/src/MTools/SVG/SVGLoader.pm @@ -0,0 +1,87 @@ +#!/usr/bin/perl +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU LGPL Libray General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, +# or refer to http://www.gnu.org/copyleft/lgpl.html +# +################################################################## + +package MTools::SVG::SVGLoader; + +use strict; +use Carp; + +use MTools; +use SVG::SVG2zinc; + +sub load { + my ($path, $topgroup) = @_; + $topgroup = ref($topgroup) eq ''?$topgroup:$topgroup -> {instance}; + my $svgfile = $path; + my $tag; + my $ftag; + if (index($svgfile, '#') == -1) + { + $tag = ''; + $ftag = ''; + } + else + { + $svgfile = substr ($path, 0, index ($path, '#')); + $tag = substr ($path, index ($path, '#') + 1, length ($path)); + $ftag = "::$tag"; + } + + if($svgfile =~ /(.*)\.svg/) + { + my $filename = $1; + my $svgfile = Tk::findINC ("$filename.svg"); + if (!defined $svgfile) + { + print STDERR "##### Error undefined file $filename.svg\n"; + } + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($svgfile); + my ($dev2,$ino2,$mode2,$nlink2,$uid2,$gid2,$rdev2,$size2,$atime2,$mtime2,$ctime2,$blksize2,$blocks2) = (0,0,0,0,0,0,0,0,0,0,0,0,0); + my $filepath = 'AUTOGEN::'.$filename; + $filepath = "$filepath$ftag.pm"; + $filepath =~ s/::/\//g; + $filename =~ s/\//::/g; + if(-e $filepath) + { + ($dev2,$ino2,$mode2,$nlink2,$uid2,$gid2,$rdev2,$size2,$atime2,$mtime2,$ctime2,$blksize2,$blocks2) = stat($filepath); + } + if( $mtime2 < $mtime ) + { + print "Regenarate SVG modified\n"; + my $pack = $filename; + SVG::SVG2zinc::parsefile( + $svgfile, + "PerlClass", + -out => "AUTOGEN::$filename$ftag.pm", + -verbose => 0, + -render => 1, + -namespace => 0, + -target => $tag + ); + } + require "$filepath"; + my $packagename = "AUTOGEN::$filename$ftag"; + return new $packagename ( + -zinc => $zinc, + -topgroup => $topgroup, + ); + } + +} + +1; |