# # 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 # #------------------------------------------------------------------------- # # python modules # #------------------------------------------------------------------------- import string #------------------------------------------------------------------------- # # Gramps modules # #------------------------------------------------------------------------- import Plugins from intl import gettext as _ import TextDoc import DrawDoc #------------------------------------------------------------------------- # # SvgDrawDoc # #------------------------------------------------------------------------- class SvgDrawDoc(DrawDoc.DrawDoc): def __init__(self,styles,type,orientation): DrawDoc.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') if self.orientation != TextDoc.PAPER_PORTRAIT: self.f.write('\n' % self.height) def end_page(self): if self.orientation != TextDoc.PAPER_PORTRAIT: self.f.write('\n') self.f.write('\n') self.f.close() def draw_line(self,style,x1,y1,x2,y2): x1 = x1 + self.lmargin x2 = x2 + self.lmargin y1 = y1 + self.tmargin y2 = y2 + self.tmargin s = self.draw_styles[style] self.f.write('\n' % (color[0],color[1],color[2],s.get_line_width())) def draw_path(self,style,path): stype = self.draw_styles[style] point = path[0] self.f.write('\n') def draw_bar(self,style,x1,y1,x2,y2): x1 = x1 + self.lmargin x2 = x2 + self.lmargin y1 = y1 + self.tmargin y2 = y2 + self.tmargin s = self.draw_styles[style] self.f.write('\n' % s.get_line_width()) def draw_box(self,style,text,x,y): x = x + self.lmargin y = y + self.tmargin 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_fill_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') def draw_text(self,style,text,x,y): x = x + self.lmargin y = y + self.tmargin box_style = self.draw_styles[style] para_name = box_style.get_paragraph_style() p = self.style_list[para_name] font = p.get_font() font_size = font.get_size() fs = (font_size/28.35) * 1.2 self.f.write('') self.f.write(text) self.f.write('\n') def units(val): return (val[0]*35.433, val[1]*35.433) #------------------------------------------------------------------------- # # Register document generator # #------------------------------------------------------------------------- Plugins.register_draw_doc(_("SVG (Scalable Vector Graphics)"),SvgDrawDoc,1,1,".svg");