summaryrefslogtreecommitdiff
path: root/bin/pychart/gs_frontend.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/pychart/gs_frontend.py')
-rw-r--r--bin/pychart/gs_frontend.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/bin/pychart/gs_frontend.py b/bin/pychart/gs_frontend.py
new file mode 100644
index 00000000000..144f19de109
--- /dev/null
+++ b/bin/pychart/gs_frontend.py
@@ -0,0 +1,87 @@
+#
+# Copyright (C) 2000-2005 by Yasushi Saito (yasushi.saito@gmail.com)
+#
+# Jockey 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, or (at your option) any
+# later version.
+#
+# Jockey 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.
+#
+import pychart_util
+import theme
+import sys
+import os
+import os.path
+import pscanvas
+import tempfile
+import string
+import basecanvas
+from scaling import *
+
+def get_gs_path():
+ """Guess where the Ghostscript executable is
+ and return its absolute path name."""
+ path = os.defpath
+ if os.environ.has_key("PATH"):
+ path = os.environ["PATH"]
+ for dir in path.split(os.pathsep):
+ for name in ("gs", "gs.exe", "gswin32c.exe"):
+ g = os.path.join(dir, name)
+ if os.path.exists(g):
+ return g
+ raise Exception, "Ghostscript not found."
+
+class T(pscanvas.T):
+ def __write_contents(self, fp):
+ fp.write(pscanvas.preamble_text)
+ for name, id in self.__font_ids.items():
+ fp.write("/%s {/%s findfont SF} def\n" % (id, name))
+ fp.write("%d %d translate\n" % (-self.bbox[0], -self.bbox[1]))
+ fp.writelines(self.__output_lines)
+ fp.write("showpage end\n")
+ fp.flush()
+
+ def close(self):
+ # Don't call pscanvas.T.close, as it creates a
+ # ps file.
+ basecanvas.T.close(self)
+
+ def start_gs(self, arg):
+ self.bbox = theme.adjust_bounding_box([xscale(self.__xmin),
+ yscale(self.__ymin),
+ xscale(self.__xmax),
+ yscale(self.__ymax)])
+
+ gs_path = get_gs_path()
+ self.pipe_fp = None
+ if self.__output_lines == []:
+ return
+
+ if sys.platform != "win32" and hasattr(os, "popen"):
+ # UNIX-like systems
+ cmdline = "\"%s\" -q %s -g%dx%d -q >/dev/null 2>&1" % \
+ (gs_path, arg,
+ self.bbox[2] - self.bbox[0],
+ self.bbox[3] - self.bbox[1])
+ self.pipe_fp = os.popen(cmdline, "w")
+ self.__write_contents(self.pipe_fp)
+ else:
+ # XXX should use mktemp, but need to support python<=2.2 as well.
+ fname = tempfile.mktemp("xxx")
+ fp = open(fname, "wb")
+ self.__write_contents(fp)
+ fp.close()
+ cmdline = "\"%s\" -q %s -g%dx%d -q <%s >NUL" % \
+ (gs_path, arg,
+ self.bbox[2] - self.bbox[0],
+ self.bbox[3] - self.bbox[1], fname)
+ os.system(cmdline)
+ os.unlink(fname)
+ def close_gs(self):
+ if self.pipe_fp:
+ self.pipe_fp.close()
+ self.pipe_fp = None