summaryrefslogtreecommitdiff
path: root/support/autolatex/translators/astah2png.transdef
diff options
context:
space:
mode:
Diffstat (limited to 'support/autolatex/translators/astah2png.transdef')
-rw-r--r--support/autolatex/translators/astah2png.transdef149
1 files changed, 149 insertions, 0 deletions
diff --git a/support/autolatex/translators/astah2png.transdef b/support/autolatex/translators/astah2png.transdef
new file mode 100644
index 0000000000..57633e653e
--- /dev/null
+++ b/support/autolatex/translators/astah2png.transdef
@@ -0,0 +1,149 @@
+# autolatex - astah2png.transdef
+# Copyright (C) 2012-13 Stephane Galland <galland@arakhne.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+#--------------------------------------------
+# See template.txt for details on the fields
+#--------------------------------------------
+
+INPUT_EXTENSIONS = .asta .jude .juth
+
+OUTPUT_EXTENSIONS = .png
+
+TRANSLATOR_FUNCTION =<<EOL {
+
+ my $INITIAL_HEAP_SIZE = "64m";
+ my $MAXIMUM_HEAP_SIZE = "1024m";
+ my @JAVA_OPTS = ("-Xms$INITIAL_HEAP_SIZE", "-Xmx$MAXIMUM_HEAP_SIZE");
+
+ my @libraries = (
+ 'astah-pro.jar',
+ 'astah-professional.jar',
+ 'astah-uml.jar',
+ 'astah-com.jar',
+ 'astah-community.jar',
+ );
+
+ # Detect the Astah installation
+ if ( ! $ENV{"ASTAH_HOME"} ) {
+ my @tmp = ('astah-pro','astah-uml','astah-com');
+ my $tmp = undef;
+ for(my $i=0; $i<@tmp && !$tmp; $i++) {
+ my $bin = $tmp[$i];
+ $bin = which("$bin");
+ if ( $bin && -x "$bin" ) {
+ $bin = readlink_osindep("$bin");
+ $tmp = dirname("$bin");
+ }
+ }
+ if ( ! $tmp ) {
+ @tmp = ('/usr/lib/astah_pro',
+ '/usr/lib/astah_professional',
+ '/usr/lib/astah_uml',
+ '/usr/lib/astah_com',
+ '/usr/lib/astah_community');
+ for(my $i=0; $i<@tmp && !$tmp; $i++) {
+ my $dir = $tmp[$i];
+ if ( -d "$dir" ) {
+ $tmp = $dir;
+ }
+ }
+ if ( ! $tmp ) {
+ printErr("Unable to find the installation directory of Astah. Please define the ASTAH_HOME environment variable.");
+ }
+ }
+ $ENV{"ASTAH_HOME"} = $tmp;
+ }
+
+ # Detect the Java library of astah
+ my $jarfile;
+ for(my $i=0; $i<@libraries && !$jarfile; $i++) {
+ my $library = $libraries[$i];
+ if ( -f File::Spec->catfile("$ENV{ASTAH_HOME}", "$library" ) ) {
+ $jarfile = $library;
+ }
+ }
+ if ( ! $jarfile ) {
+ printErr("Unable to find the java library of Astah. Please define the ASTAH_HOME environment variable.");
+ }
+
+ # Prepare the generation from Astah
+ my $outputDir = File::Spec->rel2abs(dirname("$in"));
+ my $shortBasename = basename("$in",@inexts);
+ my $astahOutputDir = File::Spec->catfile("$outputDir","$shortBasename");
+
+ if ( -d "$astahOutputDir" ) {
+ remove_tree("$astahOutputDir") or printErr("$astahOutputDir: $!");
+ }
+
+ # Generation of the SVG from Astah
+ runCommandOrFail(
+ 'java',
+ @JAVA_OPTS,
+ '-cp',
+ File::Spec->catfile("$ENV{ASTAH_HOME}","$jarfile"),
+ 'com.change_vision.jude.cmdline.JudeCommandRunner',
+ '-image', 'all',
+ '-f', "$in",
+ '-t', 'png',
+ '-o', "$outputDir");
+
+ # Move the files
+ my @generatedFiles = ();
+ local *OUTDIR;
+ opendir(*OUTDIR, "$astahOutputDir") or printErr("$astahOutputDir: $!");
+ while (my $fn = readdir(*OUTDIR)) {
+ if ($fn ne File::Spec->updir() && $fn ne File::Spec->curdir()
+ && $fn =~ /$outext$/s) {
+ my $sourceFile = File::Spec->catfile("$astahOutputDir", "$fn");
+ push @generatedFiles, "$sourceFile";
+ }
+ }
+ closedir(*OUTDIR);
+
+ # Move the generated files
+ if (@generatedFiles>1) {
+ my $template = File::Spec->catfile(
+ dirname($out),
+ basename($out,$outext)).'_';
+ foreach my $file (@generatedFiles) {
+ my $bn = basename($file,$outext);
+ $bn =~ s/\s+/_/sg;
+ move("$file", "$template$bn$outext") or printErr("$file -> $template$bn$outext: $!");
+ }
+ if (@generatedFiles) {
+ touch("$out");
+ }
+ }
+ elsif (@generatedFiles) {
+ my $file = shift @generatedFiles;
+ move("$file", "$out");
+ }
+ else {
+ printErr("No file generated.");
+ }
+
+ if ( -d "$astahOutputDir" ) {
+ remove_tree("$astahOutputDir") or printErr("$astahOutputDir: $!");
+ }
+
+ 1;
+}
+EOL
+
+FILES_TO_CLEAN = $out_*.png $out
+