summaryrefslogtreecommitdiff
path: root/support/autolatex/translators/asml2pdf.transdef
diff options
context:
space:
mode:
Diffstat (limited to 'support/autolatex/translators/asml2pdf.transdef')
-rw-r--r--support/autolatex/translators/asml2pdf.transdef155
1 files changed, 155 insertions, 0 deletions
diff --git a/support/autolatex/translators/asml2pdf.transdef b/support/autolatex/translators/asml2pdf.transdef
new file mode 100644
index 0000000000..c8b1f68b5e
--- /dev/null
+++ b/support/autolatex/translators/asml2pdf.transdef
@@ -0,0 +1,155 @@
+# autolatex - asml2pdf.transdef
+# Copyright (C) 2017 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 = .asml
+
+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-sys.jar',
+ );
+
+ # Detect the Astah installation
+ if ( ! $ENV{"ASTAH_SYSML_HOME"} ) {
+ my @tmp = ('astah-sysml');
+ 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_sysml',
+ );
+ 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 SysML. Please define the ASTAH_SYSML_HOME environment variable.");
+ }
+ }
+ $ENV{"ASTAH_SYSML_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_SYSML_HOME}", "$library" ) ) {
+ $jarfile = $library;
+ }
+ }
+ if ( ! $jarfile ) {
+ printErr("Unable to find the java library of Astah SysML. Please define the ASTAH_SYSML_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_SYSML_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
+