summaryrefslogtreecommitdiff
path: root/bin/pychart/theme.py
diff options
context:
space:
mode:
authorpinky <>2006-12-07 13:41:40 +0000
committerpinky <>2006-12-07 13:41:40 +0000
commit004a0b996ff8f269451e07346f71a129a1f3fbaf (patch)
tree48f43c1fc2ca4c1f4d5648e7e73553d3f4ccae06 /bin/pychart/theme.py
New trunk
bzr revid: pinky-3f10ee12cea3c4c75cef44ab04ad33ef47432907
Diffstat (limited to 'bin/pychart/theme.py')
-rw-r--r--bin/pychart/theme.py234
1 files changed, 234 insertions, 0 deletions
diff --git a/bin/pychart/theme.py b/bin/pychart/theme.py
new file mode 100644
index 00000000000..20ccc709136
--- /dev/null
+++ b/bin/pychart/theme.py
@@ -0,0 +1,234 @@
+#
+# 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 sys
+import os
+import re
+import getopt
+import pychart_util
+
+__doc__ = """This module is defines variables for changing the looks
+of charts. All the variables can be changed either via environment
+variable PYCHART_OPTIONS or via the command-line options.
+
+The value of PYCHART_OPTIONS should be a sequence of var=val separated
+by space. Below is an example, which tells Pychart to write to file
+foo.pdf and use Times-Roman as the default font.
+
+PYCHART_OPTIONS="output=foo.pdf font-family=Times"
+
+The summary of attributes that can be set via PYCHART_OPTIONS follows:
+
+output=FILENAME (default: stdout)
+
+ Set the output file name.
+
+format=[ps|pdf|pdf-uncompressed|png|x11|svg] (default: ps)
+
+ Set the output file format.
+
+font-family=NAME (default: Helvetica)
+
+ Set the default font to be used by texts.
+
+font-size=N (default: 9)
+
+ Set the default font to be used by texts.
+line-width=X (default: 0.4)
+
+ Set the default line width, in points. See also
+ pychart.line_style.
+
+scale=X (default: 1.0)
+
+ Set the scaling factor. The default is 1.0.
+
+color=[yes|no] (default: no)
+
+ If yes, Pychart colorizes default object attributes.
+
+You can also set these variables by calling theme.get_options.
+"""
+
+use_color = 0
+scale_factor = 1
+output_format = None # "ps", "pdf", "png", "x11", or "svg"
+compress_output = 1
+output_file = ""
+
+default_font_family = "Helvetica"
+default_font_size = 9
+default_line_height = None
+default_font_halign = "L"
+default_font_valign = "B"
+default_font_angle = 0
+default_line_width = 0.4
+
+debug_level = 1
+delta_bounding_box = [-3, -3, 3, 3]
+bounding_box = {}
+
+def parse_yesno(str):
+ if str in ("yes", "true", "1"):
+ return 1
+ else:
+ return 0
+
+def parse_bounding_box(arg):
+ global delta_bounding_box, bounding_box
+
+ l = arg.split(",")
+ if len(l) != 4:
+ raise ValueError, "Need to specify margin=LEFT,BOTTOM,RIGHT,TOP"
+ for i in range(0, 4):
+ val = l[i].strip()
+ if val[0] == '+':
+ delta_bounding_box[i] = int(val[1:])
+ elif val[0] == '-':
+ delta_bounding_box[i] = int(val[1:])
+ else:
+ bounding_box[i] = int(val)
+
+def adjust_bounding_box(bbox):
+ """Adjust the bounding box as specified by user.
+ Returns the adjusted bounding box.
+
+ - bbox: Bounding box computed from the canvas drawings.
+ It must be a four-tuple of numbers.
+ """
+ for i in range(0, 4):
+ if bounding_box.has_key(i):
+ bbox[i] = bounding_box[i]
+ else:
+ bbox[i] += delta_bounding_box[i]
+ return bbox
+
+def parse_option(opt, arg):
+ global use_color, scale_factor, margin
+ global output_format, output_file, compress_output
+ global default_font_family, default_font_size
+ global default_line_height
+ global default_line_width, debug_level
+ if opt == "format":
+ if arg in ("ps", "eps"):
+ output_format = "ps"
+ elif arg == "png":
+ output_format = "png"
+ elif arg == "svg":
+ output_format = "svg"
+ elif arg == "x11":
+ output_format = "x11"
+ elif arg == "pdf-uncompressed":
+ output_format = "pdf"
+ compress_output = 0
+ elif arg in ("pdf-compressed", "pdf"):
+ output_format = "pdf"
+ compress_output = 1
+ else:
+ raise ValueError, "Unknown output option: " + str(arg)
+ elif opt == "output":
+ output_file = arg
+ elif opt == "color":
+ use_color = 1
+ elif opt == "scale":
+ scale_factor = float(arg)
+ elif opt == "bbox":
+ parse_bounding_box(arg)
+ elif opt == "font-family":
+ default_font_family = arg
+ elif opt == "font-size":
+ default_font_size = float(arg)
+ default_line_height = float(arg)
+ elif opt == "line-width":
+ default_line_width = float(arg)
+ elif opt == "debug-level":
+ debug_level = int(arg)
+ else:
+ raise getopt.GetoptError, "Unknown option: " + opt + " " + arg
+
+if os.environ.has_key("PYCHART_OPTIONS"):
+ for opt in os.environ["PYCHART_OPTIONS"].split():
+ opt, arg = opt.split("=")
+ parse_option(opt, arg)
+
+hooks = []
+def add_reinitialization_hook(proc):
+ global hooks
+ hooks.append(proc)
+ proc()
+
+def usage():
+ print "Usage: %s [options..]" % sys.argv[0]
+ print """
+ --scale=X: Set the scaling factor to X (default: 1.0).
+ --format=[ps|png|pdf|x11|svg]: Set the output format (default: ps).
+ --font-family=NAME: Set the default font family (default: Helvetica).
+ --font-size=NAME: Set the default font size (default: 9pts).
+ --line-width=NAME: Set the default line width (default: 0.4).
+ --debug-level=N: Set the messaging verbosity (default: 0).
+ --bbox=LEFT,BOTTOM,RIGHT,TOP: Specifies the amount of space (in PS points) to be left in the edges of the picture (default: -1,-1,+1,+1).
+ """
+
+def reinitialize():
+ """This procedure must be called after setting variables in
+ the |theme| module. This procedure propagates the new values of
+ the theme variables to other modules that depend on their values."""
+ for proc in hooks:
+ proc()
+
+def get_options(argv = None):
+ """This procedure takes a list of command line arguments in <argv>
+ and parses
+ options. It returns the non-parsed portion of <argv>. Parameter
+ <argv> can be
+ omitted, in which case its value defaults to |sys.argv[1:]|.
+ The options supported are: "|--format=[ps,png,pdf,x11,svg]|",
+ "|--output=|<file>", "|--color=[yes,no]|"
+ "|--scale=|<X>", "|--font-family=|<name>", "|--font-size=|<X>",
+ "|--line-width=|<X>",
+ "|--debug-level=|<N>", "|bbox=|<left,bottom,right,top>".
+ The below code shows an example.
+
+#!/usr/bin/python
+from pychart import *
+args = theme.get_options()
+ar = area.T(...)
+...
+ """
+ if argv == None:
+ argv = sys.argv[1:]
+ try:
+ opts, args = getopt.getopt(argv, "d:co:f:",
+ ["format=", "output=", "color=",
+ "scale=", "font-family=", "font-size=",
+ "line-width=", "debug-level=",
+ "bbox="])
+ except getopt.GetoptError, foo:
+ print foo
+ usage()
+ raise getopt.GetoptError
+ for opt, arg in opts:
+ if opt == "-d":
+ parse_option("debug-level", arg)
+ elif opt == "-c":
+ parse_option("color", None)
+ elif opt == "-o":
+ parse_option("output", arg)
+ elif opt == "-f":
+ parse_option("format", arg)
+ else:
+ parse_option(opt[2:], arg)
+ reinitialize()
+ return args
+
+