# autolatex - astah2pdf.transdef
# Copyright (C) 2013 Stephane Galland <
[email protected]>
#
# 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 for pdf = .pdf
OUTPUT_EXTENSIONS for eps = .eps
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',
);
# 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 Professional or Astah UML. 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', 'svg',
'-o', "$outputDir");
# Generation of the PDF/PS from the SVG
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 =~ /\.svg$/s) {
my $svgFile = File::Spec->catfile("$astahOutputDir", "$fn");
push @generatedFiles, "$svgFile";
# Remove the background
my $svgcontent = readFileLines("$svgFile");
$svgcontent =~ s/\Q<rect\E\s+.*?\/?>//s;
writeFileLines("$svgFile", "$svgcontent");
}
}
closedir(*OUTDIR);
my $transresult = 0;
# Move the generated files
if (@generatedFiles>1) {
my $template = File::Spec->catfile(
dirname($out),
basename($out,$outext)).'_';
my $transresult = 0;
foreach my $file (@generatedFiles) {
my $bn = basename($file,'.svg');
$bn =~ s/\s+/_/sg;
$bn = "$template$bn$outext";
my $result = runTranslator( 'svg2pdf', "$file", "$bn", 0);
if ($result) {
$transresult = 1;
}
}
if (!$transresult) {
printErr("No file generated.");
} else {
touch("$out");
}
}
elsif (@generatedFiles) {
my $file = shift @generatedFiles;
runTranslator('svg2pdf', "$file", "$out");
}
else {
printErr("No file generated.");
}
if ( -d "$astahOutputDir" ) {
remove_tree("$astahOutputDir") or printErr("$astahOutputDir: $!");
}
1;
}
EOL
FILES_TO_CLEAN = $out_*.pdf $out_*.eps $out