# # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2000 Donald N. Allingham # # This program 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 of the License, or # (at your option) any later version. # # This program 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # import os import string import Plugins from intl import gettext as _ from TextDoc import * from DrawDoc import * class SvgDrawDoc(DrawDoc): def __init__(self,styles,type,orientation): DrawDoc.__init__(self,styles,type,orientation) self.f = None self.filename = None self.level = 0 self.time = "0000-00-00T00:00:00" self.page = 0 def open(self,filename): if filename[-4:] != ".svg": self.root = filename else: self.root = filename[:-4] def close(self): pass def start_paragraph(self,style_name): pass def end_paragraph(self): pass def write_text(self,text): pass def start_page(self,orientation=None): self.page = self.page + 1 if self.page != 1: name = "%s-%d.svg" % (self.root,self.page) else: name = "%s.svg" % self.root self.f = open(name,"w") self.f.write('\n') self.f.write('\n') self.f.write('\n') def end_page(self): self.f.write('\n') self.f.close() def draw_line(self,style,x1,y1,x2,y2): self.f.write('\n') def draw_box(self,style,text,x,y): box_style = self.draw_styles[style] para_name = box_style.get_paragraph_style() p = self.style_list[para_name] bh = box_style.get_height() bw = box_style.get_width() self.f.write('\n') self.f.write('\n' % box_style.get_color()) if text != "": font = p.get_font() font_size = font.get_size() lines = string.split(text,'\n') nlines = len(lines) mar = 10/28.35 fs = (font_size/28.35) * 1.2 center = y + (bh + fs)/2.0 + (fs*0.2) ystart = center - (fs/2.0) * nlines for i in range(nlines): ypos = ystart + (i * fs) self.f.write('') self.f.write(lines[i]) self.f.write('\n') Plugins.register_draw_doc(_("SVG (Scalable Vector Graphics)"),SvgDrawDoc);