X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=site_scons%2Fsite_tools%2FDia2Png.py;fp=site_scons%2Fsite_tools%2FDia2Png.py;h=a8000be3f67791b1691fc1e22e20e118488e819f;hb=d33cd468d4ece7c0c98270b4d1a9858e5a94510d;hp=0000000000000000000000000000000000000000;hpb=8a3a987daec0028a9e41abd09c187948c8cb393c;p=senf.git diff --git a/site_scons/site_tools/Dia2Png.py b/site_scons/site_tools/Dia2Png.py new file mode 100644 index 0000000..a8000be --- /dev/null +++ b/site_scons/site_tools/Dia2Png.py @@ -0,0 +1,56 @@ +## \file +# \brief Dia2Png builder + +## \package senfscons.Dia2Png +# \brief Build a PNG file from a DIA file +# +# This builder will convert a given DIA file into a PNG image. The +# size of the target file is specified by giving a preferred DPI value +# and a maximum width. The Builder will automatically fetch the +# correct aspect ratio from the dia file. +# +# \par Construction Envrionment Variables: +# +# +# +# +#
\c DIACOMdia command, defaults to \c dia
\c DIA2PNGDPIresolution of converted image, defaults to 115
\c DIA2PNGMAXWIDTHmaximum image width, defaults to 800
+# +# \ingroup builder + +import os +import SCons.Builder, SCons.Action + +def dia_getSize(env,source): + size = None + for line in os.popen(env['DIACOM']+" -e /proc/self/fd/1 -t eps "+str(source[0]),"r"): + if line.startswith("%%BoundingBox:"): + size=map(int,line.split()[3:]) + break + return size + +def dia2png_generator(source, target, env, for_signature): + if for_signature: + return "$DIACOM -t png -s $DIA2PNGDPI,$DIA2PNGMAXWIDTH $TARGET $SOURCE" + size = dia_getSize(env,source) + if not size: return None; + size[0] = size[0]*int(env['DIA2PNGDPI'])/72 + size[1] = size[1]*int(env['DIA2PNGDPI'])/72 + if size[0] > env['DIA2PNGMAXWIDTH']: + size[1] = size[1]*env['DIA2PNGMAXWIDTH']/size[0] + size[0] = env['DIA2PNGMAXWIDTH'] + return SCons.Action.Action("$DIACOM -t png -s %dx%d -e $TARGET $SOURCE" % tuple(size)) + +Dia2Png = SCons.Builder.Builder(suffix = ".png", + src_suffix = ".dia", + generator = dia2png_generator, + single_source = 1) + +def generate(env): + env['BUILDERS']['Dia2Png'] = Dia2Png + env['DIACOM'] = "dia" + env['DIA2PNGDPI'] = 115 + env['DIA2PNGMAXWIDTH'] = 800 + +def exists(env): + return env.Detect("dia")