[cig-commits] r15679 - doc/geodynamics.org/benchmarks/trunk/utils

luis at geodynamics.org luis at geodynamics.org
Fri Sep 18 13:16:03 PDT 2009


Author: luis
Date: 2009-09-18 13:16:02 -0700 (Fri, 18 Sep 2009)
New Revision: 15679

Added:
   doc/geodynamics.org/benchmarks/trunk/utils/tex_to_images.pl
Log:
Added perl script for generating equation images from inline LaTeX

Added: doc/geodynamics.org/benchmarks/trunk/utils/tex_to_images.pl
===================================================================
--- doc/geodynamics.org/benchmarks/trunk/utils/tex_to_images.pl	                        (rev 0)
+++ doc/geodynamics.org/benchmarks/trunk/utils/tex_to_images.pl	2009-09-18 20:16:02 UTC (rev 15679)
@@ -0,0 +1,301 @@
+#!/usr/bin/perl -w
+# Adapted from http://pracgsi.ulpgc.es/~a2923/cgi-bin/C:/tex_to_images
+
+sub usage
+{
+    print <<END;
+
+Usage: 
+    tex_to_images [-s SCALE] [-u UPSCALE] [-o OUT_PATTERN] [-d DIR] [-f FORMAT] [FILE...]
+
+    -o OUT_PATTERN      Describes the filenames. Should
+                contain NNN which is replaced by
+                the number of the formula. May contain FFF
+                which is replaced by the output format.
+                Default 'image_NNN.FFF'.
+
+    -d DIR          Directory to put images in.
+
+    -f FORMAT       Selects output format.
+                    ppm   Portable Pixmap
+                    gif   Compuserv GIF
+                    jpg   JPEG
+                    Default 'gif'.
+
+    -s SCALE        Scale factor for output. Default 3.
+
+    -u UPSCALE      Create the image UPSCALE times larger
+                than required, then scale it down. This
+                improves image quality at the expense of
+                time and space. Default 2.
+
+
+END
+    exit($_[0]);
+}
+
+$out_pattern="image_NNN.FFF";
+$scale=3;
+$over=2;
+$format='gif';
+$dir='';
+
+while ($#ARGV>=0)
+{
+    if ($ARGV[0] =~ /-+[h?](elp)?/)
+    {
+        usage(0);
+    }
+    elsif ($ARGV[0] =~ /-+o(utput)?/)
+    {
+        shift @ARGV;
+        $out_pattern = $ARGV[0];
+        shift @ARGV;
+    }
+    elsif ($ARGV[0] =~ /-+d(ir)?/)
+    {
+        shift @ARGV;
+        $dir = $ARGV[0];
+        shift @ARGV;
+    }
+    elsif ($ARGV[0] =~ /-+s(cale)?/)
+    {
+        shift @ARGV;
+        $scale = $ARGV[0];
+        shift @ARGV;
+    }
+    elsif ($ARGV[0] =~ /-+u(pscale)?/)
+    {
+        shift @ARGV;
+        $over = $ARGV[0];
+        shift @ARGV;
+    }
+    elsif ($ARGV[0] =~ /-+f(ormat)?/)
+    {
+        shift @ARGV;
+        $format= $ARGV[0];
+        shift @ARGV;
+    }
+    else
+    {
+        last;
+    }
+}
+
+$scale *= $over;
+
+$post_scale = 1.0 / $over;
+
+if ($format eq 'gif')
+{
+    $conv = 'ppmtogif -i -t 1,1,1';
+}
+elsif ($format eq 'ppm')
+{
+    $conv = 'cat';
+}
+elsif ($format eq 'jpg')
+{
+    $conv = 'cjpeg';
+}
+elsif ($format eq 'eps')
+{
+    $conv = '';
+}
+else
+{
+    usage(1);
+}
+
+$tmp = "mti$$";
+$tex = "$tmp.tex"
+$dvi = "$tmp.dvi"
+$dvipage = "${tmp}_page.dvi";
+$ps = "$tmp.ps";
+$ppm = "$tmp.ppm";
+$psres = int(72 * $scale + 0.5);
+
+open(TEX, ">$tex")
+    || die "Can't create $tex - $!";
+
+print TEX <<END;
+\\documentclass{article}
+\\pagestyle{empty}
+\\begin{document}
+END
+
+$n = 0;
+ at out = ();
+ at formula = ();
+$out = $out_pattern;
+
+while (<>)
+{
+    chomp;
+
+    if (/^\@Name\s+([A-Za-z0-9_.\/]+)\s*$/)
+    {
+        $out = $1;
+    }
+    elsif (/^\@Start\s*$/)
+    {
+        $form = '';
+    }
+    elsif (/^\@End\s*$/)
+    {
+        got_formula($dir, $out, $form);
+        $form = undef;
+        $out = $out_pattern;
+    }
+    elsif (defined($form))
+    {
+        $form .= "\n";
+        $form .= $_;
+    }
+    else
+    {
+        got_formula($dir, $out, $_);
+        $out = $out_pattern;
+    }
+}
+
+print TEX <<END;
+\\end{document}
+END
+
+close(TEX);
+
+execute("latex $tex");
+
+for ($i = 0; $i < $n; $i++)
+{
+    $in = $i + 1;
+    print "Process Image $in -> $out[$i]\n";
+    execute("dviselect -i $dvi -o $dvipage $in", 1);
+    execute("dvips -E -o$ps $dvipage");
+    ($x, $y, $w, $h) = get_bb($ps);
+    $w = int($w * $scale + 0.5);
+    $h = int($h * $scale + 0.5);
+    if ($conv)
+    {
+        execute("echo '$x neg $y neg translate' "
+                . "| gs -sDEVICE=ppmraw -sOutputFile=$ppm "
+                . ($w > 0 ? "-g${w}x${h}" : "")
+                . " -r$psres -dNOPAUSE -dBATCH - $ps");
+        execute("cat $ppm | pnmscale $post_scale "
+                . "| ppmnorm | ppmquant 255 | $conv > $out[$i]");
+    }
+    else
+    {
+        rename($ps, $out[$i]);
+    }
+}
+
+while (defined($f=<$tmp*>))
+{
+    unlink($f);
+}
+
+exit(0);
+
+# -----------------------------------------------------------------------------
+
+sub execute
+{
+    my ($command, $ignore) = @_;
+
+    print "DOING $command\n";
+    (system($command) >> 8) == 0
+        || defined($ignore)
+        || die "FAILED - $!";
+}
+
+sub get_bb
+{
+    my ($ps) = @_;
+    local (*PS);
+
+    open(PS, $ps)
+        || die " can't read $ps - $!";
+
+    while (<PS>)
+    {
+        if (/%%BoundingBox:\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/)
+        {
+            close(PS);
+            return ($1, $2, $3-$1, $4-$2);
+        }
+    }
+    close(PS);
+
+    return (0, 0, 0, 0);
+}
+
+sub got_formula
+{
+    my ($dir, $out, $form) = @_;
+
+    $n++;
+
+    $out =~ s/NNN/$n/;
+    $out =~ s/FFF/$format/;
+
+    $out = "$dir/$out" if ($dir);
+
+    $form =~ s/&#([0-9]+);/chr(hex($1))/ge;
+
+    push(@out, $out);
+    push(@formula, $form);
+
+    if ($out =~ m_^(.*)/([^/]*)$_)
+    {
+        system "mkdir", "-p", $1;
+    }
+
+    print TEX "\\[ $form \\] \\pagebreak \n\n";
+}
+
+# -----------------------------------------------------------------------------
+# Copyright info
+
+ ###########################################################################
+ ##                                                                       ##
+ ##                Centre for Speech Technology Research                  ##
+ ##                     University of Edinburgh, UK                       ##
+ ##                         Copyright (c) 1996                            ##
+ ##                        All Rights Reserved.                           ##
+ ##                                                                       ##
+ ##  Permission is hereby granted, free of charge, to use and distribute  ##
+ ##  this software and its documentation without restriction, including   ##
+ ##  without limitation the rights to use, copy, modify, merge, publish,  ##
+ ##  distribute, sublicense, and/or sell copies of this work, and to      ##
+ ##  permit persons to whom this work is furnished to do so, subject to   ##
+ ##  the following conditions:                                            ##
+ ##   1. The code must retain the above copyright notice, this list of    ##
+ ##      conditions and the following disclaimer.                         ##
+ ##   2. Any modifications must be clearly marked as such.                ##
+ ##   3. Original authors' names are not deleted.                         ##
+ ##   4. The authors' names are not used to endorse or promote products   ##
+ ##      derived from this software without specific prior written        ##
+ ##      permission.                                                      ##
+ ##                                                                       ##
+ ##  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK        ##
+ ##  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ##
+ ##  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ##
+ ##  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE     ##
+ ##  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ##
+ ##  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ##
+ ##  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ##
+ ##  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ##
+ ##  THIS SOFTWARE.                                                       ##
+ ##                                                                       ##
+ ########################################################################### 
+
+# /*@name tex_to_images
+#  *
+#  * Converts maths (one formula per line) into gifs.
+#  *
+#  * @author Richard Caley <rjc at cstr.ed.ac.uk>
+#  * @version $Id: tex_to_images.prl,v 1.2 2001/04/04 13:11:27 awb Exp $
+#  */
+


Property changes on: doc/geodynamics.org/benchmarks/trunk/utils/tex_to_images.pl
___________________________________________________________________
Name: svn:executable
   + *



More information about the CIG-COMMITS mailing list