Changeset 2275
- Timestamp:
- 03/17/08 09:53:06 (2 months ago)
- Files:
-
- gaphor/trunk/bin/gaphorconvert (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/bin/gaphorconvert
r2268 r2275 4 4 from gaphor.storage import storage 5 5 import gaphor.UML as UML 6 7 from gaphas.painter import ItemPainter 8 from gaphas.view import View 6 9 7 10 import cairo … … 11 14 import re 12 15 import sys 13 import tempfile14 16 15 17 def pkg2dir(package): … … 35 37 usage = 'usage: %prog [options] file1 file2...' 36 38 37 parser = optparse.OptionParser(usage =usage)39 parser = optparse.OptionParser(usage=usage) 38 40 39 parser.add_option('-v', '--verbose', dest = 'verbose', action ='store_true',40 help ='verbose output')41 parser.add_option('-u', '--use-underscores', dest = 'underscores', action ='store_true',42 help ='use underscores instead of spaces for output filenames')43 parser.add_option('-d', '--dir', dest = 'dir', metavar ='directory',44 help ='output to directory')45 parser.add_option('-f', '--format', dest = 'format', metavar ='format',46 help = 'output file format, default pdf', default ='pdf',47 choices = ['pdf', 'svg'])48 parser.add_option('-r', '--regex', dest = 'regex', metavar ='regex',49 help ='process diagrams which name matches given regular expresion;' \41 parser.add_option('-v', '--verbose', dest='verbose', action='store_true', 42 help='verbose output') 43 parser.add_option('-u', '--use-underscores', dest='underscores', action='store_true', 44 help='use underscores instead of spaces for output filenames') 45 parser.add_option('-d', '--dir', dest='dir', metavar='directory', 46 help='output to directory') 47 parser.add_option('-f', '--format', dest='format', metavar='format', 48 help='output file format, default pdf', default='pdf', 49 choices=['pdf', 'svg', 'png']) 50 parser.add_option('-r', '--regex', dest='regex', metavar='regex', 51 help='process diagrams which name matches given regular expresion;' \ 50 52 ' name includes package name; regular expressions are case insensitive') 51 53 … … 71 73 72 74 for diagram in factory.select(lambda e: e.isKindOf(UML.Diagram)): 73 dir = pkg2dir(diagram.package)75 odir = pkg2dir(diagram.package) 74 76 75 pname = dir + '/' + diagram.name # plain name, no extension76 # or additional directories 77 pname = odir + '/' + diagram.name 78 77 79 if options.underscores: 78 dir =dir.replace(' ', '_')80 odir = odir.replace(' ', '_') 79 81 pname = pname.replace(' ', '_') 80 82 … … 84 86 85 87 if options.dir: 86 dir = '%s/%s' % (options.dir,dir)88 odir = '%s/%s' % (options.dir, odir) 87 89 88 pdf_name = '%s/%s.pdf' % (dir, diagram.name)90 outfilename = '%s/%s.%s' % (odir, diagram.name, options.format) 89 91 90 # in case of pdf format we create temporary svg file; see comment below 91 if options.format == 'svg': 92 svg_name = '%s/%s.svg' % (dir, diagram.name) 93 out_name = svg_name 94 else: 95 fd, svg_name = tempfile.mkstemp() 96 del fd # we do not use it anymore 97 out_name = pdf_name 92 if not os.path.exists(odir): 93 message('creating dir %s' % odir) 94 os.makedirs(odir) 98 95 99 if not os.path.exists(dir): 100 message('creating dir %s' % dir) 101 os.makedirs(dir) 96 message('rendering: %s -> %s...' % (pname, outfilename)) 102 97 103 message('rendering: %s -> %s...' % (pname, out_name)) 104 105 # we use always svg as midstep for conversion between gaphor file 106 # and pdf; it should be changed in the future, when diacanvas 107 # uses canvas which supports pdf as output format... 108 print dir(diagram) 109 log.debug('Exporting SVG image to: %s' % filename) 110 view = View(canvas) 98 view = View(diagram.canvas) 111 99 view.painter = ItemPainter() 112 100 113 # Update bounding boxes with a temporaly CairoContext114 # (used for stuff like calculating font metrics)115 101 tmpsurface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 0, 0) 116 102 tmpcr = cairo.Context(tmpsurface) … … 120 106 121 107 w, h = view.bounding_box.width, view.bounding_box.height 122 surface = cairo.SVGSurface(filename, w, h) 108 if options.format == 'pdf': 109 surface = cairo.PDFSurface(outfilename, w, h) 110 elif options.format == 'svg': 111 surface = cairo.SVGSurface(outfilename, w, h) 112 elif options.format == 'png': 113 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(w+1), int(h+1)) 114 else: 115 assert False, 'unknown format %s' % options.format 123 116 cr = cairo.Context(surface) 124 117 view.matrix.translate(-view.bounding_box.x, -view.bounding_box.y) 125 118 view.paint(cr) 126 119 cr.show_page() 120 121 if options.format == 'png': 122 surface.write_to_png(outfilename) 123 127 124 surface.flush() 128 125 surface.finish() 129 130 import sys131 sys.exit(1)132 if options.format == 'pdf':133 svg = cairo.svg.Context()134 svg.parse(svg_name)135 width, height = svg.get_size()136 137 ctx = cairo.Context(cairo.PDFSurface(pdf_name, width, height))138 svg.render(ctx)139 ctx.show_page()140 141 # svg file is no longer necessary142 os.unlink(svg_name)
