Changeset 2275

Show
Ignore:
Timestamp:
03/17/08 09:53:06 (2 months ago)
Author:
wrobe..@pld-linux.org
Message:

- finished migration from diacanvas to gaphas based canvas (full cairo

support)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/bin/gaphorconvert

    r2268 r2275  
    44from gaphor.storage import storage 
    55import gaphor.UML as UML 
     6 
     7from gaphas.painter import ItemPainter 
     8from gaphas.view import View 
    69 
    710import cairo 
     
    1114import re 
    1215import sys 
    13 import tempfile 
    1416 
    1517def pkg2dir(package): 
     
    3537usage = 'usage: %prog [options] file1 file2...' 
    3638 
    37 parser = optparse.OptionParser(usage = usage) 
     39parser = optparse.OptionParser(usage=usage) 
    3840 
    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;' \ 
     41parser.add_option('-v', '--verbose', dest='verbose', action='store_true', 
     42    help='verbose output') 
     43parser.add_option('-u', '--use-underscores', dest='underscores', action='store_true', 
     44    help='use underscores instead of spaces for output filenames') 
     45parser.add_option('-d', '--dir', dest='dir', metavar='directory', 
     46    help='output to directory') 
     47parser.add_option('-f', '--format', dest='format', metavar='format', 
     48    help='output file format, default pdf', default='pdf', 
     49    choices=['pdf', 'svg', 'png']) 
     50parser.add_option('-r', '--regex', dest='regex', metavar='regex', 
     51    help='process diagrams which name matches given regular expresion;' \ 
    5052    ' name includes package name; regular expressions are case insensitive') 
    5153 
     
    7173 
    7274    for diagram in factory.select(lambda e: e.isKindOf(UML.Diagram)): 
    73         dir = pkg2dir(diagram.package) 
     75        odir = pkg2dir(diagram.package) 
    7476 
    75         pname = dir + '/' + diagram.name # plain name, no extension 
    76                                          # or additional directories 
     77        pname = odir + '/' + diagram.name 
     78 
    7779        if options.underscores: 
    78             dir = dir.replace(' ', '_') 
     80            odir = odir.replace(' ', '_') 
    7981            pname = pname.replace(' ', '_') 
    8082 
     
    8486 
    8587        if options.dir: 
    86             dir = '%s/%s' % (options.dir, dir) 
     88            odir = '%s/%s' % (options.dir, odir) 
    8789 
    88         pdf_name = '%s/%s.pdf' % (dir, diagram.name
     90        outfilename = '%s/%s.%s' % (odir, diagram.name, options.format
    8991 
    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) 
    9895 
    99         if not os.path.exists(dir): 
    100             message('creating dir %s' % dir) 
    101             os.makedirs(dir) 
     96        message('rendering: %s -> %s...' % (pname, outfilename)) 
    10297 
    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) 
    11199        view.painter = ItemPainter() 
    112100 
    113         # Update bounding boxes with a temporaly CairoContext 
    114         # (used for stuff like calculating font metrics) 
    115101        tmpsurface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 0, 0) 
    116102        tmpcr = cairo.Context(tmpsurface) 
     
    120106 
    121107        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 
    123116        cr = cairo.Context(surface) 
    124117        view.matrix.translate(-view.bounding_box.x, -view.bounding_box.y) 
    125118        view.paint(cr) 
    126119        cr.show_page() 
     120 
     121        if options.format == 'png': 
     122            surface.write_to_png(outfilename) 
     123 
    127124        surface.flush() 
    128125        surface.finish() 
    129  
    130         import sys 
    131         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 necessary 
    142             os.unlink(svg_name)