part 3 : split basedoc in files, remove Utils dependance, move fontscale in gen,

update build system


svn: r12603
This commit is contained in:
Benny Malengier 2009-05-31 14:59:56 +00:00
parent 206e9f1aba
commit fb3ec68c6a
63 changed files with 2191 additions and 2521 deletions

View File

@ -19,7 +19,6 @@ src/DisplayState.py
src/Errors.py
src/ExportAssistant.py
src/ExportOptions.py
src/FontScale.py
src/GrampsAboutDialog.py
src/GrampsCfg.py
src/GrampsDisplay.py
@ -417,7 +416,18 @@ src/gen/plug/menu/_string.py
src/gen/plug/menu/_style.py
src/gen/plug/menu/_surnamecolor.py
src/gen/plug/menu/_text.py
src/gen/plug/docgen/__init__.py
src/gen/plug/docgen/basedoc.py
src/gen/plug/docgen/drawdoc.py
src/gen/plug/docgen/fontscale.py
src/gen/plug/docgen/fontstyle.py
src/gen/plug/docgen/graphdoc.py
src/gen/plug/docgen/graphicstyle.py
src/gen/plug/docgen/paperstyle.py
src/gen/plug/docgen/paragraphstyle.py
src/gen/plug/docgen/stylesheet.py
src/gen/plug/docgen/tablestyle.py
src/gen/plug/docgen/textdoc.py
src/gen/plug/docbackend/__init__.py
src/gen/plug/docbackend/cairobackend.py
src/gen/plug/docbackend/docbackend.py

View File

@ -49,7 +49,6 @@ gdir_PYTHON = \
Errors.py\
ExportAssistant.py\
ExportOptions.py\
FontScale.py\
GrampsAboutDialog.py\
GrampsCfg.py\
GrampsDisplay.py\

View File

@ -42,8 +42,8 @@ log = logging.getLogger(".")
#-------------------------------------------------------------------------
import gen
import Utils
from gen.plug.docgen import StyleSheet, StyleSheetList, PaperStyle
from gen.plug.docgen.basedoc import (PAPER_PORTRAIT, PAPER_LANDSCAPE)
from gen.plug.docgen import (StyleSheet, StyleSheetList, PaperStyle,
PAPER_PORTRAIT, PAPER_LANDSCAPE)
from BasicUtils import name_displayer
from ReportBase import CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_BOOK, \
CATEGORY_GRAPHVIZ

View File

@ -22,8 +22,7 @@
"""
Provide utilities for printing endnotes in text reports.
"""
from gen.plug.docgen import FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF
from gen.plug.docgen import FontStyle, ParagraphStyle, FONT_SANS_SERIF
from gettext import gettext as _
def add_endnote_styles(style_sheet):

View File

@ -40,10 +40,10 @@ import gobject
# GRAMPS modules
#
#-------------------------------------------------------------------------
from gen.plug.docgen import PaperStyle, PaperSize
from gen.plug.docgen.basedoc import (PAPER_PORTRAIT, PAPER_LANDSCAPE)
from gen.plug.docgen import PaperStyle, PaperSize, PAPER_PORTRAIT, \
PAPER_LANDSCAPE
from gen.plug.utils import gfloat
import const
import Utils
from glade import Glade
#-------------------------------------------------------------------------
@ -342,8 +342,8 @@ class PageSizeParser(handler.ContentHandler):
def startElement(self,tag,attrs):
if tag == "page":
name = attrs['name']
height = Utils.gfloat(attrs['height'])
width = Utils.gfloat(attrs['width'])
height = gfloat(attrs['height'])
width = gfloat(attrs['width'])
self.paper_list.append(PaperSize(name, height,width))
#-------------------------------------------------------------------------

View File

@ -55,7 +55,7 @@ except:
#-------------------------------------------------------------------------
import const
import Config
from gen.plug.docgen.basedoc import PAPER_PORTRAIT
from gen.plug.docgen import PAPER_PORTRAIT
from PluginUtils import _Options, GuiMenuOptions
#-------------------------------------------------------------------------

View File

@ -50,8 +50,7 @@ from gen.lib.person import Person
from BasicUtils import name_displayer as _nd
from Utils import media_path_full
from QuestionDialog import WarningDialog
from gen.plug.docgen import IndexMark
from gen.plug.docgen.basedoc import INDEX_TYPE_ALP
from gen.plug.docgen import IndexMark, INDEX_TYPE_ALP
#------------------------------------------------------------------------
#

View File

@ -50,8 +50,7 @@ from gtk.gdk import Color
#------------------------------------------------------------------------
import Utils
import const
from gen.plug.docgen import StyleSheet
from gen.plug.docgen.basedoc import (FONT_SERIF, FONT_SANS_SERIF,
from gen.plug.docgen import (StyleSheet, FONT_SERIF, FONT_SANS_SERIF,
PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER, PARA_ALIGN_LEFT,
PARA_ALIGN_JUSTIFY)
import ListModel

View File

@ -21,9 +21,8 @@
"""
Provide a simplified database access interface to the GRAMPS database.
"""
from gen.plug.docgen import StyleSheet, ParagraphStyle,\
TableStyle, TableCellStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_LEFT
from gen.plug.docgen import StyleSheet, ParagraphStyle, TableStyle,\
TableCellStyle, FONT_SANS_SERIF, PARA_ALIGN_LEFT
class SimpleDoc(object):
"""

View File

@ -431,33 +431,6 @@ from warnings import warn
def set_titles(window, title, t, msg=None):
warn('The Utils.set_titles is deprecated. Use ManagedWindow methods')
def gfloat(val):
"""Convert to floating number, taking care of possible locale differences.
Useful for reading float values from text entry fields
while under non-English locale.
"""
try:
return float(val)
except:
try:
return float(val.replace('.', ', '))
except:
return float(val.replace(', ', '.'))
return 0.0
def gformat(val):
"""Performs ('%.3f' % val) formatting with the resulting string always
using dot ('.') as a decimal point.
Useful for writing float values into XML when under non-English locale.
"""
decimal_point = locale.localeconv()['decimal_point']
return_val = "%.3f" % val
return return_val.replace(decimal_point, '.')
def search_for(name):
if name.startswith( '"' ):
name = name.split('"')[1]

View File

@ -35,7 +35,7 @@ from gettext import gettext as _
# Gramps modules
#
#-------------------------------------------------------------------------
from gen.plug.docgen.basedoc import FONT_SERIF
from gen.plug.docgen import FONT_SERIF
from docgen import SpreadSheetDoc
import const

View File

@ -35,7 +35,7 @@ from gettext import gettext as _
# Gramps modules
#
#-------------------------------------------------------------------------
from gen.plug.docgen.basedoc import FONT_SERIF
from gen.plug.docgen import FONT_SERIF
from SpreadSheetDoc import SpreadSheetDoc
import const

View File

@ -19,8 +19,7 @@
#
from gen.plug.docgen import FontStyle, ParagraphStyle, TableStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import PAPER_PORTRAIT
TableCellStyle,PAPER_PORTRAIT
#------------------------------------------------------------------------
#

View File

@ -35,8 +35,7 @@ import pango
# Gramps modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import BaseDoc, TextDoc
from gen.plug.docgen.basedoc import (FONT_SERIF, PARA_ALIGN_RIGHT,
from gen.plug.docgen import (BaseDoc, TextDoc, FONT_SERIF, PARA_ALIGN_RIGHT,
FONT_SANS_SERIF, FONT_MONOSPACE, PARA_ALIGN_CENTER,
PARA_ALIGN_LEFT)
import ManagedWindow

View File

@ -26,6 +26,7 @@ from _manager import PluginManager
from _import import ImportPlugin
from _export import ExportPlugin
from _docgenplugin import DocGenPlugin
from utils import *
__all__ = [ "docgen", "menu", Plugin, PluginManager, ImportPlugin,
ExportPlugin, DocGenPlugin ]
__all__ = [ "docbackend", "docgen", "menu", Plugin, PluginManager,
ImportPlugin, ExportPlugin, DocGenPlugin ]

View File

@ -1,388 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# src/gen/plug/docbackend/Makefile. Generated from Makefile.in by configure.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# This is the src/gen/plug/menu level Makefile for Gramps
# We could use GNU make's ':=' syntax for nice wildcard use,
# but that is not necessarily portable.
# If not using GNU make, then list all .py files individually
pkglibdir = $(libdir)/gramps
pkgincludedir = $(includedir)/gramps
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = src/gen/plug/docbackend
DIST_COMMON = $(pkgdata_PYTHON) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
pkgdataPYTHON_INSTALL = $(INSTALL_DATA)
py_compile = $(top_srcdir)/py-compile
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(datadir)/gramps/gen/plug/docbackend
ACLOCAL = ${SHELL} /home/Frog/trunk/missing --run aclocal-1.10
ALL_LINGUAS = hu zh_CN cs da de es fr it nb nl nn pl pt_BR ro ru sv eo fi lt sk tr bg hr sl ca mk sq he
AMTAR = ${SHELL} /home/Frog/trunk/missing --run tar
AUTOCONF = ${SHELL} /home/Frog/trunk/missing --run autoconf
AUTOHEADER = ${SHELL} /home/Frog/trunk/missing --run autoheader
AUTOMAKE = ${SHELL} /home/Frog/trunk/missing --run automake-1.10
AWK = gawk
BINSH = /bin/sh
CATALOGS = hu.gmo zh_CN.gmo cs.gmo da.gmo de.gmo es.gmo fr.gmo it.gmo nb.gmo nl.gmo nn.gmo pl.gmo pt_BR.gmo ro.gmo ru.gmo sv.gmo eo.gmo fi.gmo lt.gmo sk.gmo tr.gmo bg.gmo hr.gmo sl.gmo ca.gmo mk.gmo sq.gmo he.gmo
CATOBJEXT = .gmo
CC = gcc
CCDEPMODE = depmode=none
CFLAGS = -g -O2
CPP = gcc -E
CPPFLAGS =
CYGPATH_W = echo
DATADIRNAME = share
DEFS = -DPACKAGE_NAME=\"gramps\" -DPACKAGE_TARNAME=\"gramps\" -DPACKAGE_VERSION=\"3.2.0\" -DPACKAGE_STRING=\"gramps\ 3.2.0\" -DPACKAGE_BUGREPORT=\"gramps-bugs@lists.sourceforge.net\" -DPACKAGE=\"gramps\" -DVERSION=\"3.2.0\" -DGETTEXT_PACKAGE=\"gramps\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LOCALE_H=1 -DHAVE_LC_MESSAGES=1 -DHAVE_BIND_TEXTDOMAIN_CODESET=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DENABLE_NLS=1
DEPDIR = .deps
ECHO_C =
ECHO_N = -n
ECHO_T =
EGREP = /bin/grep -E
EXEEXT =
GETTEXT_PACKAGE = gramps
GMOFILES = hu.gmo zh_CN.gmo cs.gmo da.gmo de.gmo es.gmo fr.gmo it.gmo nb.gmo nl.gmo nn.gmo pl.gmo pt_BR.gmo ro.gmo ru.gmo sv.gmo eo.gmo fi.gmo lt.gmo sk.gmo tr.gmo bg.gmo hr.gmo sl.gmo ca.gmo mk.gmo sq.gmo he.gmo
GMSGFMT = /usr/bin/msgfmt
GREP = /bin/grep
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
INSTOBJEXT = .mo
INTLLIBS =
INTLTOOL_EXTRACT = /usr/bin/intltool-extract
INTLTOOL_MERGE = /usr/bin/intltool-merge
INTLTOOL_PERL = /usr/bin/perl
INTLTOOL_UPDATE = /usr/bin/intltool-update
LDFLAGS =
LIBOBJS =
LIBS =
LTLIBOBJS =
MAKEINFO = ${SHELL} /home/Frog/trunk/missing --run makeinfo
MKDIR_P = /bin/mkdir -p
MKINSTALLDIRS = ./mkinstalldirs
MSGFMT = /usr/bin/msgfmt
MSGFMT_OPTS = -c
MSGMERGE = /usr/bin/msgmerge
OBJEXT = o
PACKAGE = gramps
PACKAGE_BUGREPORT = gramps-bugs@lists.sourceforge.net
PACKAGE_NAME = gramps
PACKAGE_STRING = gramps 3.2.0
PACKAGE_TARNAME = gramps
PACKAGE_VERSION = 3.2.0
PATH_SEPARATOR = :
POFILES = hu.po zh_CN.po cs.po da.po de.po es.po fr.po it.po nb.po nl.po nn.po pl.po pt_BR.po ro.po ru.po sv.po eo.po fi.po lt.po sk.po tr.po bg.po hr.po sl.po ca.po mk.po sq.po he.po
POSUB = po
PO_IN_DATADIR_FALSE =
PO_IN_DATADIR_TRUE =
PYTHON = /usr/bin/python
PYTHON_EXEC_PREFIX = ${exec_prefix}
PYTHON_PLATFORM = linux2
PYTHON_PREFIX = ${prefix}
PYTHON_VERSION = 2.6
RELEASE = 0.SVN12592
SET_MAKE =
SHARED_MIME_DIR = $(prefix)/share/mime
SHELL = /bin/sh
STRIP =
USE_NLS = yes
VERSION = 3.2.0
VERSIONSTRING = 3.2.0-0.SVN12592
XGETTEXT = /usr/bin/xgettext
abs_builddir = /home/Frog/trunk/src/gen/plug/docbackend
abs_srcdir = /home/Frog/trunk/src/gen/plug/docbackend
abs_top_builddir = /home/Frog/trunk
abs_top_srcdir = /home/Frog/trunk
ac_ct_CC = gcc
am__include = include
am__leading_dot = .
am__quote =
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build_alias =
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host_alias =
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = $(SHELL) /home/Frog/trunk/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
mandir = ${datarootdir}/man
mkdir_p = /bin/mkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
pkgpyexecdir = ${pyexecdir}/gramps/gen/plug/docbackend
pkgpythondir = ${pythondir}/gramps/gen/plug/docbackend
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
pyexecdir = ${exec_prefix}/lib/python2.6/site-packages
pythondir = ${prefix}/lib/python2.6/site-packages
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias =
top_build_prefix = ../../../../
top_builddir = ../../../..
top_srcdir = ../../../..
pkgdata_PYTHON = \
__init__.py \
cairobackend.py \
docbackend.py \
latexbackend.py
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gen/plug/docbackend/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign src/gen/plug/docbackend/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-pkgdataPYTHON: $(pkgdata_PYTHON)
@$(NORMAL_INSTALL)
test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
@list='$(pkgdata_PYTHON)'; dlist=''; for p in $$list; do\
if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
if test -f $$b$$p; then \
f=$(am__strip_dir) \
dlist="$$dlist $$f"; \
echo " $(pkgdataPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
$(pkgdataPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
else :; fi; \
done; \
if test -n "$$dlist"; then \
if test -z "$(DESTDIR)"; then \
PYTHON=$(PYTHON) $(py_compile) --basedir "$(pkgdatadir)" $$dlist; \
else \
PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pkgdatadir)" $$dlist; \
fi; \
else :; fi
uninstall-pkgdataPYTHON:
@$(NORMAL_UNINSTALL)
@list='$(pkgdata_PYTHON)'; dlist=''; for p in $$list; do\
f=$(am__strip_dir) \
rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
rm -f "$(DESTDIR)$(pkgdatadir)/$${f}c"; \
rm -f "$(DESTDIR)$(pkgdatadir)/$${f}o"; \
done
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-pkgdataPYTHON
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgdataPYTHON
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgdataPYTHON install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-pkgdataPYTHON
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1,388 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# This is the src/gen/plug/menu level Makefile for Gramps
# We could use GNU make's ':=' syntax for nice wildcard use,
# but that is not necessarily portable.
# If not using GNU make, then list all .py files individually
VPATH = @srcdir@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = src/gen/plug/docbackend
DIST_COMMON = $(pkgdata_PYTHON) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
pkgdataPYTHON_INSTALL = $(INSTALL_DATA)
py_compile = $(top_srcdir)/py-compile
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(datadir)/@PACKAGE@/gen/plug/docbackend
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BINSH = @BINSH@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLLIBS = @INTLLIBS@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGFMT_OPTS = @MSGFMT_OPTS@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POFILES = @POFILES@
POSUB = @POSUB@
PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
PYTHON = @PYTHON@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RELEASE = @RELEASE@
SET_MAKE = @SET_MAKE@
SHARED_MIME_DIR = @SHARED_MIME_DIR@
SHELL = @SHELL@
STRIP = @STRIP@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VERSIONSTRING = @VERSIONSTRING@
XGETTEXT = @XGETTEXT@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@/gen/plug/docbackend
pkgpythondir = @pkgpythondir@/gen/plug/docbackend
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkgdata_PYTHON = \
__init__.py \
cairobackend.py \
docbackend.py \
latexbackend.py
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
GRAMPS_PY_MODPATH = "../../../"
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/gen/plug/docbackend/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign src/gen/plug/docbackend/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-pkgdataPYTHON: $(pkgdata_PYTHON)
@$(NORMAL_INSTALL)
test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
@list='$(pkgdata_PYTHON)'; dlist=''; for p in $$list; do\
if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
if test -f $$b$$p; then \
f=$(am__strip_dir) \
dlist="$$dlist $$f"; \
echo " $(pkgdataPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
$(pkgdataPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
else :; fi; \
done; \
if test -n "$$dlist"; then \
if test -z "$(DESTDIR)"; then \
PYTHON=$(PYTHON) $(py_compile) --basedir "$(pkgdatadir)" $$dlist; \
else \
PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pkgdatadir)" $$dlist; \
fi; \
else :; fi
uninstall-pkgdataPYTHON:
@$(NORMAL_UNINSTALL)
@list='$(pkgdata_PYTHON)'; dlist=''; for p in $$list; do\
f=$(am__strip_dir) \
rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
rm -f "$(DESTDIR)$(pkgdatadir)/$${f}c"; \
rm -f "$(DESTDIR)$(pkgdatadir)/$${f}o"; \
done
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
for dir in "$(DESTDIR)$(pkgdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-pkgdataPYTHON
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgdataPYTHON
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgdataPYTHON install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-pkgdataPYTHON
pycheck:
(export PYTHONPATH=$(GRAMPS_PY_MODPATH); \
pychecker $(pkgdata_PYTHON));
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -7,7 +7,17 @@ pkgdatadir = $(datadir)/@PACKAGE@/gen/plug/docgen
pkgdata_PYTHON = \
__init__.py \
basedoc.py
basedoc.py \
drawdoc.py \
fontscale.py \
fontstyle.py \
graphdoc.py \
graphicstyle.py \
paperstyle.py \
paragraphstyle.py \
stylesheet.py \
tablestyle.py \
textdoc.py
pkgpyexecdir = @pkgpyexecdir@/gen/plug/docgen
pkgpythondir = @pkgpythondir@/gen/plug/docgen

View File

@ -25,6 +25,14 @@ The docgen package providing the API the document generating plugins can use.
A docgen plugin should fully implement this api for TextDoc or DrawDoc
"""
from basedoc import BaseDoc, PaperSize, PaperStyle, FontStyle, ParagraphStyle,\
TableStyle, TableCellStyle, StyleSheetList, StyleSheet,\
SheetParser, GraphicsStyle, TextDoc, IndexMark, DrawDoc, GVDoc
from basedoc import BaseDoc
from paperstyle import PaperSize, PaperStyle, PAPER_PORTRAIT, PAPER_LANDSCAPE
from fontstyle import FontStyle, FONT_SANS_SERIF, FONT_SERIF, FONT_MONOSPACE
from paragraphstyle import ParagraphStyle, PARA_ALIGN_CENTER, PARA_ALIGN_LEFT,\
PARA_ALIGN_RIGHT, PARA_ALIGN_JUSTIFY
from tablestyle import TableStyle, TableCellStyle
from stylesheet import StyleSheetList, StyleSheet, SheetParser
from graphicstyle import GraphicsStyle, SOLID, DASHED
from textdoc import TextDoc, IndexMark,INDEX_TYPE_ALP, INDEX_TYPE_TOC
from drawdoc import DrawDoc
from graphdoc import GVDoc

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,107 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import fontscale
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".drawdoc")
#------------------------------------------------------------------------
#
# DrawDoc
#
#------------------------------------------------------------------------
class DrawDoc(object):
"""
Abstract Interface for graphical document generators. Output formats
for graphical reports must implment this interface to be used by the
report system.
"""
def start_page(self):
raise NotImplementedError
def end_page(self):
raise NotImplementedError
def get_usable_width(self):
"""
Return the width of the text area in centimeters. The value is
the page width less the margins.
"""
width = self.paper.get_size().get_width()
right = self.paper.get_right_margin()
left = self.paper.get_left_margin()
return width - (right + left)
def get_usable_height(self):
"""
Return the height of the text area in centimeters. The value is
the page height less the margins.
"""
height = self.paper.get_size().get_height()
top = self.paper.get_top_margin()
bottom = self.paper.get_bottom_margin()
return height - (top + bottom)
def string_width(self, fontstyle, text):
"Determine the width need for text in given font"
return fontscale.string_width(fontstyle, text)
def draw_path(self, style, path):
raise NotImplementedError
def draw_box(self, style, text, x, y, w, h):
raise NotImplementedError
def draw_text(self, style, text, x1, y1):
raise NotImplementedError
def center_text(self, style, text, x1, y1):
raise NotImplementedError
def rotate_text(self, style, text, x, y, angle):
raise NotImplementedError
def draw_line(self, style, x1, y1, x2, y2):
raise NotImplementedError

View File

@ -258,6 +258,8 @@ def string_width(font, text):
"""
returns with width of a string in the specified font
"""
## TODO: Does it not make sense to use writing on a pango Layout to know
## text width?
i = font.get_type_face()
j = font.get_bold() + font.get_italic()*2
s = font.get_size()

View File

@ -0,0 +1,170 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".fontstyle")
#-------------------------------------------------------------------------
#
# constants
#
#-------------------------------------------------------------------------
FONT_SANS_SERIF = 0
FONT_SERIF = 1
FONT_MONOSPACE = 2
#------------------------------------------------------------------------
#
# FontStyle
#
#------------------------------------------------------------------------
class FontStyle(object):
"""
Defines a font style. Controls the font face, size, color, and
attributes. In order to remain generic, the only font faces available
are FONT_SERIF and FONT_SANS_SERIF. Document formatters should convert
these to the appropriate fonts for the target format.
The FontStyle represents the desired characteristics. There are no
guarentees that the document format generator will be able implement
all or any of the characteristics.
"""
def __init__(self, style=None):
"""
Create a new FontStyle object, accepting the default values.
@param style: if specified, initializes the FontStyle from the passed
FontStyle instead of using the defaults.
"""
if style:
self.face = style.face
self.size = style.size
self.italic = style.italic
self.bold = style.bold
self.color = style.color
self.under = style.under
else:
self.face = FONT_SERIF
self.size = 12
self.italic = 0
self.bold = 0
self.color = (0, 0, 0)
self.under = 0
def set(self, face=None, size=None, italic=None, bold=None,
underline=None, color=None):
"""
Set font characteristics.
@param face: font type face, either FONT_SERIF or FONT_SANS_SERIF
@param size: type face size in points
@param italic: True enables italics, False disables italics
@param bold: True enables bold face, False disables bold face
@param underline: True enables underline, False disables underline
@param color: an RGB color representation in the form of three integers
in the range of 0-255 represeting the red, green, and blue
components of a color.
"""
if face is not None:
self.set_type_face(face)
if size is not None:
self.set_size(size)
if italic is not None:
self.set_italic(italic)
if bold is not None:
self.set_bold(bold)
if underline is not None:
self.set_underline(underline)
if color is not None:
self.set_color(color)
def set_italic(self, val):
"0 disables italics, 1 enables italics"
self.italic = val
def get_italic(self):
"1 indicates use italics"
return self.italic
def set_bold(self, val):
"0 disables bold face, 1 enables bold face"
self.bold = val
def get_bold(self):
"1 indicates use bold face"
return self.bold
def set_color(self, val):
"sets the color using an RGB color tuple"
self.color = val
def get_color(self):
"Return an RGB color tuple"
return self.color
def set_size(self, val):
"sets font size in points"
self.size = val
def get_size(self):
"returns font size in points"
return self.size
def set_type_face(self, val):
"sets the font face type"
self.face = val
def get_type_face(self):
"returns the font face type"
return self.face
def set_underline(self, val):
"1 enables underlining"
self.under = val
def get_underline(self):
"1 indicates underlining"
return self.under

View File

@ -0,0 +1,130 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".graphdoc")
#-------------------------------------------------------------------------------
#
# GVDoc
#
#-------------------------------------------------------------------------------
class GVDoc(object):
"""
Abstract Interface for Graphviz document generators. Output formats
for Graphviz reports must implment this interface to be used by the
report system.
"""
def add_node(self, node_id, label, shape="", color="",
style="", fillcolor="", url="", htmloutput=False):
"""
Add a node to this graph. Nodes can be different shapes like boxes and
circles.
@param node_id: A unique identification value for this node.
Example: "p55"
@type node_id: string
@param label: The text to be displayed in the node.
Example: "John Smith"
@type label: string
@param shape: The shape for the node.
Examples: "box", "ellipse", "circle"
@type shape: string
@param color: The color of the node line.
Examples: "blue", "lightyellow"
@type color: string
@param style: The style of the node.
@type style: string
@param fillcolor: The fill color for the node.
Examples: "blue", "lightyellow"
@type fillcolor: string
@param url: A URL for the node.
@type url: string
@param htmloutput: Whether the label contains HTML.
@type htmloutput: boolean
@return: nothing
"""
raise NotImplementedError
def add_link(self, id1, id2, style="", head="", tail="", comment=""):
"""
Add a link between two nodes.
@param id1: The unique identifier of the starting node.
Example: "p55"
@type id1: string
@param id2: The unique identifier of the ending node.
Example: "p55"
@type id2: string
@param comment: A text string displayed at the end of the link line.
Example: "person C is the son of person A and person B"
@type comment: string
@return: nothing
"""
raise NotImplementedError
def add_comment(self, comment):
"""
Add a comment to the source file.
@param comment: A text string to add as a comment.
Example: "Next comes the individuals."
@type comment: string
@return: nothing
"""
raise NotImplementedError
def start_subgraph(self, graph_id):
"""
Start a subgraph in this graph.
@param id: The unique identifier of the subgraph.
Example: "p55"
@type id1: string
@return: nothing
"""
raise NotImplementedError
def end_subgraph(self):
"""
End a subgraph that was previously started in this graph.
@return: nothing
"""
raise NotImplementedError

View File

@ -0,0 +1,135 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".graphicstyle")
#-------------------------------------------------------------------------
#
# Line style
#
#-------------------------------------------------------------------------
SOLID = 0
DASHED = 1
#------------------------------------------------------------------------
#
# GraphicsStyle
#
#------------------------------------------------------------------------
class GraphicsStyle(object):
"""
Defines the properties of graphics objects, such as line width,
color, fill, ect.
"""
def __init__(self, obj=None):
"""
Initialize the object with default values, unless a source
object is specified. In that case, make a copy of the source
object.
"""
if obj:
self.para_name = obj.para_name
self.shadow = obj.shadow
self.shadow_space = obj.shadow_space
self.color = obj.color
self.fill_color = obj.fill_color
self.lwidth = obj.lwidth
self.lstyle = obj.lstyle
else:
self.para_name = ""
self.shadow = 0
self.shadow_space = 0.2
self.lwidth = 0.5
self.color = (0, 0, 0)
self.fill_color = (255, 255, 255)
self.lstyle = SOLID
def set_line_width(self, val):
"""
sets the line width
"""
self.lwidth = val
def get_line_width(self):
"""
Return the name of the StyleSheet
"""
return self.lwidth
def get_line_style(self):
return self.lstyle
def set_line_style(self, val):
self.lstyle = val
def set_paragraph_style(self, val):
self.para_name = val
def set_shadow(self, val, space=0.2):
self.shadow = val
self.shadow_space = space
def get_shadow_space(self):
return self.shadow_space
def set_color(self, val):
self.color = val
def set_fill_color(self, val):
self.fill_color = val
def get_paragraph_style(self):
return self.para_name
def get_shadow(self):
return self.shadow
def get_color(self):
return self.color
def get_fill_color(self):
return self.fill_color

View File

@ -0,0 +1,217 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".paperstyle")
#-------------------------------------------------------------------------
#
# Page orientation
#
#-------------------------------------------------------------------------
PAPER_PORTRAIT = 0
PAPER_LANDSCAPE = 1
#------------------------------------------------------------------------
#
# PaperSize
#
#------------------------------------------------------------------------
class PaperSize(object):
"""
Defines the dimensions of a sheet of paper. All dimensions are in
centimeters.
"""
def __init__(self, name, height, width):
"""
Create a new paper style with.
@param name: name of the new style
@param height: page height in centimeters
@param width: page width in centimeters
"""
self.name = name
self.height = height
self.width = width
def get_name(self):
"Return the name of the paper style"
return self.name
def get_height(self):
"Return the page height in cm"
return self.height
def set_height(self, height):
"Set the page height in cm"
self.height = height
def get_width(self):
"Return the page width in cm"
return self.width
def set_width(self, width):
"Set the page width in cm"
self.width = width
def get_height_inches(self):
"Return the page height in inches"
return self.height / 2.54
def get_width_inches(self):
"Return the page width in inches"
return self.width / 2.54
#------------------------------------------------------------------------
#
# PaperStyle
#
#------------------------------------------------------------------------
class PaperStyle(object):
"""
Define the various options for a sheet of paper.
"""
def __init__(self, size, orientation,
lmargin=2.54, rmargin=2.54, tmargin=2.54, bmargin=2.54):
"""
Create a new paper style.
@param size: size of the new style
@type size: PaperSize
@param orientation: page orientation
@type orientation: PAPER_PORTRAIT or PAPER_LANDSCAPE
"""
self.__orientation = orientation
if orientation == PAPER_PORTRAIT:
self.__size = PaperSize(size.get_name(),
size.get_height(),
size.get_width())
else:
self.__size = PaperSize(size.get_name(),
size.get_width(),
size.get_height())
self.__lmargin = lmargin
self.__rmargin = rmargin
self.__tmargin = tmargin
self.__bmargin = bmargin
def get_size(self):
"""
Return the size of the paper.
@returns: object indicating the paper size
@rtype: PaperSize
"""
return self.__size
def get_orientation(self):
"""
Return the orientation of the page.
@returns: PAPER_PORTRIAT or PAPER_LANDSCAPE
@rtype: int
"""
return self.__orientation
def get_usable_width(self):
"""
Return the width of the page area in centimeters.
The value is the page width less the margins.
"""
return self.__size.get_width() - (self.__rmargin + self.__lmargin)
def get_usable_height(self):
"""
Return the height of the page area in centimeters.
The value is the page height less the margins.
"""
return self.__size.get_height() - (self.__tmargin + self.__bmargin)
def get_right_margin(self):
"""
Return the right margin.
@returns: Right margin in centimeters
@rtype: float
"""
return self.__rmargin
def get_left_margin(self):
"""
Return the left margin.
@returns: Left margin in centimeters
@rtype: float
"""
return self.__lmargin
def get_top_margin(self):
"""
Return the top margin.
@returns: Top margin in centimeters
@rtype: float
"""
return self.__tmargin
def get_bottom_margin(self):
"""
Return the bottom margin.
@returns: Bottom margin in centimeters
@rtype: float
"""
return self.__bmargin

View File

@ -0,0 +1,349 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from fontstyle import FontStyle
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".paragraphstyle")
#-------------------------------------------------------------------------
#
# Paragraph alignment
#
#-------------------------------------------------------------------------
PARA_ALIGN_CENTER = 0
PARA_ALIGN_LEFT = 1
PARA_ALIGN_RIGHT = 2
PARA_ALIGN_JUSTIFY = 3
#------------------------------------------------------------------------
#
# ParagraphStyle
#
#------------------------------------------------------------------------
class ParagraphStyle(object):
"""
Defines the characteristics of a paragraph. The characteristics are:
font (a FontStyle instance), right margin, left margin, first indent,
top margin, bottom margin, alignment, level, top border, bottom border,
right border, left border, padding, and background color.
"""
def __init__(self, source=None):
"""
@param source: if not None, then the ParagraphStyle is created
using the values of the source instead of the default values.
"""
if source:
self.font = FontStyle(source.font)
self.rmargin = source.rmargin
self.lmargin = source.lmargin
self.first_indent = source.first_indent
self.tmargin = source.tmargin
self.bmargin = source.bmargin
self.align = source.align
self.level = source.level
self.top_border = source.top_border
self.bottom_border = source.bottom_border
self.right_border = source.right_border
self.left_border = source.left_border
self.pad = source.pad
self.bgcolor = source.bgcolor
self.description = source.description
self.tabs = source.tabs
else:
self.font = FontStyle()
self.rmargin = 0
self.lmargin = 0
self.tmargin = 0
self.bmargin = 0
self.first_indent = 0
self.align = PARA_ALIGN_LEFT
self.level = 0
self.top_border = 0
self.bottom_border = 0
self.right_border = 0
self.left_border = 0
self.pad = 0
self.bgcolor = (255, 255, 255)
self.description = ""
self.tabs = []
def set_description(self, text):
"""
Set the desciption of the paragraph
"""
self.description = text
def get_description(self):
"""
Return the desciption of the paragraph
"""
return self.description
def set(self, rmargin=None, lmargin=None, first_indent=None,
tmargin=None, bmargin=None, align=None,
tborder=None, bborder=None, rborder=None, lborder=None,
pad=None, bgcolor=None, font=None):
"""
Allows the values of the object to be set.
@param rmargin: right indent in centimeters
@param lmargin: left indent in centimeters
@param first_indent: first line indent in centimeters
@param tmargin: space above paragraph in centimeters
@param bmargin: space below paragraph in centimeters
@param align: alignment type (PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER, or PARA_ALIGN_JUSTIFY)
@param tborder: non zero indicates that a top border should be used
@param bborder: non zero indicates that a bottom border should be used
@param rborder: non zero indicates that a right border should be used
@param lborder: non zero indicates that a left border should be used
@param pad: padding in centimeters
@param bgcolor: background color of the paragraph as an RGB tuple.
@param font: FontStyle instance that defines the font
"""
if font is not None:
self.font = FontStyle(font)
if pad is not None:
self.set_padding(pad)
if tborder is not None:
self.set_top_border(tborder)
if bborder is not None:
self.set_bottom_border(bborder)
if rborder is not None:
self.set_right_border(rborder)
if lborder is not None:
self.set_left_border(lborder)
if bgcolor is not None:
self.set_background_color(bgcolor)
if align is not None:
self.set_alignment(align)
if rmargin is not None:
self.set_right_margin(rmargin)
if lmargin is not None:
self.set_left_margin(lmargin)
if first_indent is not None:
self.set_first_indent(first_indent)
if tmargin is not None:
self.set_top_margin(tmargin)
if bmargin is not None:
self.set_bottom_margin(bmargin)
def set_header_level(self, level):
"""
Set the header level for the paragraph. This is useful for
numbered paragraphs. A value of 1 indicates a header level
format of X, a value of two implies X.X, etc. A value of zero
means no header level.
"""
self.level = level
def get_header_level(self):
"Return the header level of the paragraph"
return self.level
def set_font(self, font):
"""
Set the font style of the paragraph.
@param font: FontStyle object containing the font definition to use.
"""
self.font = FontStyle(font)
def get_font(self):
"Return the FontStyle of the paragraph"
return self.font
def set_padding(self, val):
"""
Set the paragraph padding in centimeters
@param val: floating point value indicating the padding in centimeters
"""
self.pad = val
def get_padding(self):
"""Return a the padding of the paragraph"""
return self.pad
def set_top_border(self, val):
"""
Set the presence or absence of top border.
@param val: True indicates a border should be used, False indicates
no border.
"""
self.top_border = val
def get_top_border(self):
"Return 1 if a top border is specified"
return self.top_border
def set_bottom_border(self, val):
"""
Set the presence or absence of bottom border.
@param val: True indicates a border should be used, False
indicates no border.
"""
self.bottom_border = val
def get_bottom_border(self):
"Return 1 if a bottom border is specified"
return self.bottom_border
def set_left_border(self, val):
"""
Set the presence or absence of left border.
@param val: True indicates a border should be used, False
indicates no border.
"""
self.left_border = val
def get_left_border(self):
"Return 1 if a left border is specified"
return self.left_border
def set_right_border(self, val):
"""
Set the presence or absence of rigth border.
@param val: True indicates a border should be used, False
indicates no border.
"""
self.right_border = val
def get_right_border(self):
"Return 1 if a right border is specified"
return self.right_border
def get_background_color(self):
"""
Return a tuple indicating the RGB components of the background
color
"""
return self.bgcolor
def set_background_color(self, color):
"""
Set the background color of the paragraph.
@param color: tuple representing the RGB components of a color
(0,0,0) to (255,255,255)
"""
self.bgcolor = color
def set_alignment(self, align):
"""
Set the paragraph alignment.
@param align: PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER,
or PARA_ALIGN_JUSTIFY
"""
self.align = align
def get_alignment(self):
"Return the alignment of the paragraph"
return self.align
def get_alignment_text(self):
"""
Return a text string representing the alginment, either 'left',
'right', 'center', or 'justify'
"""
if self.align == PARA_ALIGN_LEFT:
return "left"
elif self.align == PARA_ALIGN_CENTER:
return "center"
elif self.align == PARA_ALIGN_RIGHT:
return "right"
elif self.align == PARA_ALIGN_JUSTIFY:
return "justify"
return "unknown"
def set_left_margin(self, value):
"sets the left indent in centimeters"
self.lmargin = value
def set_right_margin(self, value):
"sets the right indent in centimeters"
self.rmargin = value
def set_first_indent(self, value):
"sets the first line indent in centimeters"
self.first_indent = value
def set_top_margin(self, value):
"sets the space above paragraph in centimeters"
self.tmargin = value
def set_bottom_margin(self, value):
"sets the space below paragraph in centimeters"
self.bmargin = value
def get_left_margin(self):
"returns the left indent in centimeters"
return self.lmargin
def get_right_margin(self):
"returns the right indent in centimeters"
return self.rmargin
def get_first_indent(self):
"returns the first line indent in centimeters"
return self.first_indent
def get_top_margin(self):
"returns the space above paragraph in centimeters"
return self.tmargin
def get_bottom_margin(self):
"returns the space below paragraph in centimeters"
return self.bmargin
def set_tabs(self, tab_stops):
assert isinstance(tab_stops, list)
self.tabs = tab_stops
def get_tabs(self):
return self.tabs

View File

@ -0,0 +1,432 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
import os
from xml.sax.saxutils import escape
def escxml(string):
"""
Escapes XML special characters.
"""
return escape(string, { '"' : '"' } )
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import const
from gen.plug.utils import gformat, gfloat
from paragraphstyle import ParagraphStyle
from fontstyle import FontStyle
from tablestyle import TableStyle, TableCellStyle
from graphicstyle import GraphicsStyle
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".stylesheet")
#-------------------------------------------------------------------------
#
# SAX interface
#
#-------------------------------------------------------------------------
try:
from xml.sax import make_parser, handler, SAXParseException
except ImportError:
from _xmlplus.sax import make_parser, handler, SAXParseException
#------------------------------------------------------------------------
#
# cnv2color
#
#------------------------------------------------------------------------
def cnv2color(text):
"""
converts a hex value in the form of #XXXXXX into a tuple of integers
representing the RGB values
"""
return (int(text[1:3], 16), int(text[3:5], 16), int(text[5:7], 16))
#------------------------------------------------------------------------
#
# StyleSheetList
#
#------------------------------------------------------------------------
class StyleSheetList(object):
"""
Interface into the user's defined style sheets. Each StyleSheetList
has a predefined default style specified by the report. Additional
styles are loaded from a specified XML file if it exists.
"""
def __init__(self, filename, defstyle):
"""
Create a new StyleSheetList from the specified default style and
any other styles that may be defined in the specified file.
file - XML file that contains style definitions
defstyle - default style
"""
defstyle.set_name('default')
self.map = { "default" : defstyle }
self.file = os.path.join(const.HOME_DIR, filename)
self.parse()
def delete_style_sheet(self, name):
"""
Remove a style from the list. Since each style must have a
unique name, the name is used to delete the stylesheet.
name - Name of the style to delete
"""
del self.map[name]
def get_style_sheet_map(self):
"""
Return the map of names to styles.
"""
return self.map
def get_style_sheet(self, name):
"""
Return the StyleSheet associated with the name
name - name associated with the desired StyleSheet.
"""
return self.map[name]
def get_style_names(self):
"Return a list of all the style names in the StyleSheetList"
return self.map.keys()
def set_style_sheet(self, name, style):
"""
Add or replaces a StyleSheet in the StyleSheetList. The
default style may not be replaced.
name - name assocated with the StyleSheet to add or replace.
style - definition of the StyleSheet
"""
style.set_name(name)
if name != "default":
self.map[name] = style
def save(self):
"""
Saves the current StyleSheet definitions to the associated file.
"""
xml_file = open(self.file,"w")
xml_file.write("<?xml version=\"1.0\"?>\n")
xml_file.write('<stylelist>\n')
for name, sheet in self.map.iteritems():
if name == "default":
continue
xml_file.write('<sheet name="%s">\n' % escxml(name))
for p_name in sheet.get_paragraph_style_names():
para = sheet.get_paragraph_style(p_name)
xml_file.write('<style name="%s">\n' % escxml(p_name))
font = para.get_font()
xml_file.write('<font face="%d" ' % font.get_type_face())
xml_file.write('size="%d" ' % font.get_size())
xml_file.write('italic="%d" ' % font.get_italic())
xml_file.write('bold="%d" ' % font.get_bold())
xml_file.write('underline="%d" ' % font.get_underline())
xml_file.write('color="#%02x%02x%02x"/>\n' % font.get_color())
xml_file.write('<para ')
rmargin = float(para.get_right_margin())
lmargin = float(para.get_left_margin())
findent = float(para.get_first_indent())
tmargin = float(para.get_top_margin())
bmargin = float(para.get_bottom_margin())
padding = float(para.get_padding())
xml_file.write('description="%s" ' %
escxml(para.get_description()))
xml_file.write('rmargin="%s" ' % gformat(rmargin))
xml_file.write('lmargin="%s" ' % gformat(lmargin))
xml_file.write('first="%s" ' % gformat(findent))
xml_file.write('tmargin="%s" ' % gformat(tmargin))
xml_file.write('bmargin="%s" ' % gformat(bmargin))
xml_file.write('pad="%s" ' % gformat(padding))
bg_color = para.get_background_color()
xml_file.write('bgcolor="#%02x%02x%02x" ' % bg_color)
xml_file.write('level="%d" ' % para.get_header_level())
xml_file.write('align="%d" ' % para.get_alignment())
xml_file.write('tborder="%d" ' % para.get_top_border())
xml_file.write('lborder="%d" ' % para.get_left_border())
xml_file.write('rborder="%d" ' % para.get_right_border())
xml_file.write('bborder="%d"/>\n' % para.get_bottom_border())
xml_file.write('</style>\n')
xml_file.write('</sheet>\n')
xml_file.write('</stylelist>\n')
xml_file.close()
def parse(self):
"""
Loads the StyleSheets from the associated file, if it exists.
"""
try:
if os.path.isfile(self.file):
parser = make_parser()
parser.setContentHandler(SheetParser(self))
the_file = open(self.file)
parser.parse(the_file)
the_file.close()
except (IOError,OSError,SAXParseException):
pass
#------------------------------------------------------------------------
#
# StyleSheet
#
#------------------------------------------------------------------------
class StyleSheet(object):
"""
A collection of named paragraph styles.
"""
def __init__(self, obj=None):
"""
Create a new empty StyleSheet.
@param obj: if not None, creates the StyleSheet from the values in
obj, instead of creating an empty StyleSheet
"""
self.para_styles = {}
self.draw_styles = {}
self.table_styles = {}
self.cell_styles = {}
self.name = ""
if obj is not None:
for style_name, style in obj.para_styles.iteritems():
self.para_styles[style_name] = ParagraphStyle(style)
for style_name, style in obj.draw_styles.iteritems():
self.draw_styles[style_name] = GraphicsStyle(style)
for style_name, style in obj.table_styles.iteritems():
self.table_styles[style_name] = TableStyle(style)
for style_name, style in obj.cell_styles.iteritems():
self.cell_styles[style_name] = TableCellStyle(style)
def set_name(self, name):
"""
Set the name of the StyleSheet
@param name: The name to be given to the StyleSheet
"""
self.name = name
def get_name(self):
"""
Return the name of the StyleSheet
"""
return self.name
def clear(self):
"Remove all styles from the StyleSheet"
self.para_styles = {}
self.draw_styles = {}
self.table_styles = {}
self.cell_styles = {}
def is_empty(self):
"Checks if any styles are defined"
style_count = len(self.para_styles) + \
len(self.draw_styles) + \
len(self.table_styles) + \
len(self.cell_styles)
if style_count > 0:
return False
else:
return True
def add_paragraph_style(self, name, style):
"""
Add a paragraph style to the style sheet.
@param name: The name of the ParagraphStyle
@param style: ParagraphStyle instance to be added.
"""
self.para_styles[name] = ParagraphStyle(style)
def get_paragraph_style(self, name):
"""
Return the ParagraphStyle associated with the name
@param name: name of the ParagraphStyle that is wanted
"""
return ParagraphStyle(self.para_styles[name])
def get_paragraph_style_names(self):
"Return the the list of paragraph names in the StyleSheet"
return self.para_styles.keys()
def add_draw_style(self, name, style):
"""
Add a draw style to the style sheet.
@param name: The name of the GraphicsStyle
@param style: GraphicsStyle instance to be added.
"""
self.draw_styles[name] = GraphicsStyle(style)
def get_draw_style(self, name):
"""
Return the GraphicsStyle associated with the name
@param name: name of the GraphicsStyle that is wanted
"""
return GraphicsStyle(self.draw_styles[name])
def get_draw_style_names(self):
"Return the the list of draw style names in the StyleSheet"
return self.draw_styles.keys()
def add_table_style(self, name, style):
"""
Add a table style to the style sheet.
@param name: The name of the TableStyle
@param style: TableStyle instance to be added.
"""
self.table_styles[name] = TableStyle(style)
def get_table_style(self, name):
"""
Return the TableStyle associated with the name
@param name: name of the TableStyle that is wanted
"""
return TableStyle(self.table_styles[name])
def get_table_style_names(self):
"Return the the list of table style names in the StyleSheet"
return self.table_styles.keys()
def add_cell_style(self, name, style):
"""
Add a cell style to the style sheet.
@param name: The name of the TableCellStyle
@param style: TableCellStyle instance to be added.
"""
self.cell_styles[name] = TableCellStyle(style)
def get_cell_style(self, name):
"""
Return the TableCellStyle associated with the name
@param name: name of the TableCellStyle that is wanted
"""
return TableCellStyle(self.cell_styles[name])
def get_cell_style_names(self):
"Return the the list of cell style names in the StyleSheet"
return self.cell_styles.keys()
#-------------------------------------------------------------------------
#
# SheetParser
#
#-------------------------------------------------------------------------
class SheetParser(handler.ContentHandler):
"""
SAX parsing class for the StyleSheetList XML file.
"""
def __init__(self, sheetlist):
"""
Create a SheetParser class that populates the passed StyleSheetList
class.
sheetlist - StyleSheetList instance to be loaded from the file.
"""
handler.ContentHandler.__init__(self)
self.sheetlist = sheetlist
self.f = None
self.p = None
self.s = None
self.sname = None
self.pname = None
def startElement(self, tag, attrs):
"""
Overridden class that handles the start of a XML element
"""
if tag == "sheet":
self.s = StyleSheet(self.sheetlist.map["default"])
self.sname = attrs['name']
elif tag == "font":
self.f = FontStyle()
self.f.set_type_face(int(attrs['face']))
self.f.set_size(int(attrs['size']))
self.f.set_italic(int(attrs['italic']))
self.f.set_bold(int(attrs['bold']))
self.f.set_underline(int(attrs['underline']))
self.f.set_color(cnv2color(attrs['color']))
elif tag == "para":
if attrs.has_key('description'):
self.p.set_description(attrs['description'])
self.p.set_right_margin(gfloat(attrs['rmargin']))
self.p.set_right_margin(gfloat(attrs['rmargin']))
self.p.set_left_margin(gfloat(attrs['lmargin']))
self.p.set_first_indent(gfloat(attrs['first']))
try:
# This is needed to read older style files
# lacking tmargin and bmargin
self.p.set_top_margin(gfloat(attrs['tmargin']))
self.p.set_bottom_margin(gfloat(attrs['bmargin']))
except KeyError:
pass
self.p.set_padding(gfloat(attrs['pad']))
self.p.set_alignment(int(attrs['align']))
self.p.set_right_border(int(attrs['rborder']))
self.p.set_header_level(int(attrs['level']))
self.p.set_left_border(int(attrs['lborder']))
self.p.set_top_border(int(attrs['tborder']))
self.p.set_bottom_border(int(attrs['bborder']))
self.p.set_background_color(cnv2color(attrs['bgcolor']))
elif tag == "style":
self.p = ParagraphStyle()
self.pname = attrs['name']
def endElement(self, tag):
"Overridden class that handles the start of a XML element"
if tag == "style":
self.p.set_font(self.f)
self.s.add_paragraph_style(self.pname, self.p)
elif tag == "sheet":
self.sheetlist.set_style_sheet(self.sname, self.s)

View File

@ -0,0 +1,222 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".tablestyle")
#------------------------------------------------------------------------
#
# TableStyle
#
#------------------------------------------------------------------------
class TableStyle(object):
"""
Specifies the style or format of a table. The TableStyle contains the
characteristics of table width (in percentage of the full width), the
number of columns, and the width of each column as a percentage of the
width of the table.
"""
def __init__(self, obj=None):
"""
Create a new TableStyle object, with the values initialized to
empty, with allocating space for up to 100 columns.
@param obj: if not None, then the object created gets is attributes
from the passed object instead of being initialized to empty.
"""
if obj:
self.width = obj.width
self.columns = obj.columns
self.colwid = obj.colwid[:]
else:
self.width = 0
self.columns = 0
self.colwid = [ 0 ] * 100
def set_width(self, width):
"""
Set the width of the table in terms of percent of the available
width
"""
self.width = width
def get_width(self):
"""
Return the specified width as a percentage of the available space
"""
return self.width
def set_columns(self, columns):
"""
Set the number of columns.
@param columns: number of columns that should be used.
"""
self.columns = columns
def get_columns(self):
"""
Return the number of columns
"""
return self.columns
def set_column_widths(self, clist):
"""
Set the width of all the columns at once, taking the percentages
from the passed list.
"""
self.columns = len(clist)
for i in range(self.columns):
self.colwid[i] = clist[i]
def set_column_width(self, index, width):
"""
Set the width of a specified column to the specified width.
@param index: column being set (index starts at 0)
@param width: percentage of the table width assigned to the column
"""
self.colwid[index] = width
def get_column_width(self, index):
"""
Return the column width of the specified column as a percentage of
the entire table width.
@param index: column to return (index starts at 0)
"""
return self.colwid[index]
#------------------------------------------------------------------------
#
# TableCellStyle
#
#------------------------------------------------------------------------
class TableCellStyle(object):
"""
Defines the style of a particular table cell. Characteristics are:
right border, left border, top border, bottom border, and padding.
"""
def __init__(self, obj=None):
"""
Create a new TableCellStyle instance.
@param obj: if not None, specifies that the values should be
copied from the passed object instead of being initialized to empty.
"""
if obj:
self.rborder = obj.rborder
self.lborder = obj.lborder
self.tborder = obj.tborder
self.bborder = obj.bborder
self.padding = obj.padding
self.longlist = obj.longlist
else:
self.rborder = 0
self.lborder = 0
self.tborder = 0
self.bborder = 0
self.padding = 0
self.longlist = 0
def set_padding(self, val):
"Return the cell padding in centimeters"
self.padding = val
def set_right_border(self, val):
"""
Defines if a right border in used
@param val: if True, a right border is used, if False, it is not
"""
self.rborder = val
def set_left_border(self, val):
"""
Defines if a left border in used
@param val: if True, a left border is used, if False, it is not
"""
self.lborder = val
def set_top_border(self, val):
"""
Defines if a top border in used
@param val: if True, a top border is used, if False, it is not
"""
self.tborder = val
def set_bottom_border(self, val):
"""
Defines if a bottom border in used
@param val: if 1, a bottom border is used, if 0, it is not
"""
self.bborder = val
def set_longlist(self, val):
self.longlist = val
def get_padding(self):
"Return the cell padding in centimeters"
return self.padding
def get_right_border(self):
"Return 1 if a right border is requested"
return self.rborder
def get_left_border(self):
"Return 1 if a left border is requested"
return self.lborder
def get_top_border(self):
"Return 1 if a top border is requested"
return self.tborder
def get_bottom_border(self):
"Return 1 if a bottom border is requested"
return self.bborder
def get_longlist(self):
return self.longlist

View File

@ -0,0 +1,238 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2002 Gary Shao
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2009 Benny Malengier
# Copyright (C) 2009 Gary Burton
#
# 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
#
# $Id: basedoc.py 12591 2009-05-29 22:25:44Z bmcage $
#-------------------------------------------------------------------------
#
# standard python modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
log = logging.getLogger(".textdoc")
#-------------------------------------------------------------------------
#
# IndexMark types
#
#-------------------------------------------------------------------------
INDEX_TYPE_ALP = 0
INDEX_TYPE_TOC = 1
#------------------------------------------------------------------------
#
# IndexMark
#
#------------------------------------------------------------------------
class IndexMark(object):
"""
Defines a mark to be associated with text for indexing.
"""
def __init__(self, key="", itype=INDEX_TYPE_ALP, level=1):
"""
Initialize the object with default values, unless values are specified.
"""
self.key = key
self.type = itype
self.level = level
#------------------------------------------------------------------------
#
# TextDoc
#
#------------------------------------------------------------------------
class TextDoc(object):
"""
Abstract Interface for text document generators. Output formats for
text reports must implment this interface to be used by the report
system.
"""
def page_break(self):
"Forces a page break, creating a new page"
raise NotImplementedError
def start_bold(self):
raise NotImplementedError
def end_bold(self):
raise NotImplementedError
def start_superscript(self):
raise NotImplementedError
def end_superscript(self):
raise NotImplementedError
def start_paragraph(self, style_name, leader=None):
"""
Starts a new paragraph, using the specified style name.
@param style_name: name of the ParagraphStyle to use for the
paragraph.
@param leader: Leading text for a paragraph. Typically used
for numbering.
"""
raise NotImplementedError
def end_paragraph(self):
"Ends the current parsgraph"
raise NotImplementedError
def start_table(self, name, style_name):
"""
Starts a new table.
@param name: Unique name of the table.
@param style_name: TableStyle to use for the new table
"""
raise NotImplementedError
def end_table(self):
"Ends the current table"
raise NotImplementedError
def start_row(self):
"Starts a new row on the current table"
raise NotImplementedError
def end_row(self):
"Ends the current row on the current table"
raise NotImplementedError
def start_cell(self, style_name, span=1):
"""
Starts a new table cell, using the paragraph style specified.
@param style_name: TableCellStyle to use for the cell
@param span: number of columns to span
"""
raise NotImplementedError
def end_cell(self):
"Ends the current table cell"
raise NotImplementedError
def write_text(self, text, mark=None):
"""
Writes the text in the current paragraph. Should only be used after a
start_paragraph and before an end_paragraph.
@param text: text to write.
@param mark: IndexMark to use for indexing (if supported)
"""
raise NotImplementedError
def write_markup(self, text, s_tags):
"""
Writes the text in the current paragraph. Should only be used after a
start_paragraph and before an end_paragraph. Not all backends support
s_tags, then the same happens as with write_text. Backends supporting
write_markup will overwrite this method
@param text: text to write. The text is assumed to be _not_ escaped
@param s_tags: assumed to be list of styledtexttags to apply to the
text
"""
self.write_text(text)
def write_note(self, text, format, style_name):
"""
Writes the note's text and take care of paragraphs,
depending on the format.
@param text: text to write.
@param format: format to use for writing. True for flowed text,
1 for preformatted text.
"""
raise NotImplementedError
def write_styled_note(self, styledtext, format, style_name):
"""
Convenience function to write a styledtext to the cairo doc.
styledtext : assumed a StyledText object to write
format : = 0 : Flowed, = 1 : Preformatted
style_name : name of the style to use for default presentation
overwrite this method if the backend supports styled notes
"""
text = str(styledtext)
self.write_note(text, format, style_name)
def write_text_citation(self, text, mark=None):
"""Method to write text with GRAMPS <super> citation marks"""
if not text:
return
parts = text.split("<super>")
markset = False
for piece in parts:
if not piece:
# a text '<super>text ...' splits as '', 'text..'
continue
piecesplit = piece.split("</super>")
if len(piecesplit) == 2:
self.start_superscript()
self.write_text(piecesplit[0])
self.end_superscript()
if not piecesplit[1]:
#text ended with ' ... </super>'
continue
if not markset:
self.write_text(piecesplit[1], mark)
markset = True
else:
self.write_text(piecesplit[1])
else:
if not markset:
self.write_text(piece, mark)
markset = True
else:
self.write_text(piece)
def add_media_object(self, name, align, w_cm, h_cm):
"""
Add a photo of the specified width (in centimeters)
@param name: filename of the image to add
@param align: alignment of the image. Valid values are 'left',
'right', 'center', and 'single'
@param w_cm: width in centimeters
@param h_cm: height in centimeters
"""
raise NotImplementedError

52
src/gen/plug/utils.py Normal file
View File

@ -0,0 +1,52 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2009 B. Malengier
#
# 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
#
# $Id: __init__.py 10055 2008-02-18 20:07:09Z acraphae $
"""
General utility functions usefull for the generic plugin system
"""
def gfloat(val):
"""Convert to floating number, taking care of possible locale differences.
Useful for reading float values from text entry fields
while under non-English locale.
"""
try:
return float(val)
except:
try:
return float(val.replace('.', ', '))
except:
return float(val.replace(', ', '.'))
return 0.0
def gformat(val):
"""Performs ('%.3f' % val) formatting with the resulting string always
using dot ('.') as a decimal point.
Useful for writing float values into XML when under non-English locale.
"""
decimal_point = locale.localeconv()['decimal_point']
return_val = "%.3f" % val
return return_val.replace(decimal_point, '.')

View File

@ -18,8 +18,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Generic utilities usefull for users of the gen package
"""
from dbutils import *
from progressmon import ProgressMonitor
from longop import LongOpStatus
from callback import Callback

View File

@ -35,8 +35,7 @@ from TransUtils import sgettext as _
#
#------------------------------------------------------------------------
from gen.lib import ChildRefType, Date, EventType, Name
from gen.plug.docgen import FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF
from gen.plug.docgen import FontStyle, ParagraphStyle, FONT_SANS_SERIF
from BasicUtils import name_displayer
from DataViews import register, Gramplet
from gen.plug.menu import (BooleanOption, EnumeratedListOption,

View File

@ -34,8 +34,8 @@ from gettext import gettext as _
# Gramps modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import BaseDoc, TextDoc
from gen.plug.docgen.basedoc import (PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER)
from gen.plug.docgen import BaseDoc, TextDoc,\
PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER
from gen.plug import PluginManager, DocGenPlugin
import Errors
import Utils

View File

@ -42,7 +42,7 @@ from math import radians
# Gramps modules
#
#------------------------------------------------------------------------
from gen.plug.docgen.basedoc import PAPER_PORTRAIT
from gen.plug.docgen import PAPER_PORTRAIT
import libcairodoc
from gen.plug import PluginManager, DocGenPlugin
import Errors

View File

@ -42,8 +42,7 @@ import ImgManip
import tarfile
import const
import Errors
from gen.plug.docgen import BaseDoc, TextDoc
from gen.plug.docgen.basedoc import FONT_SANS_SERIF
from gen.plug.docgen import BaseDoc, TextDoc, FONT_SANS_SERIF
from QuestionDialog import ErrorDialog, WarningDialog
import Utils

View File

@ -41,8 +41,7 @@ from gettext import gettext as _
#------------------------------------------------------------------------
from gen.plug import PluginManager, DocGenPlugin
from gen.plug.docgen import BaseDoc, TextDoc
from gen.plug.docgen.basedoc import PAPER_LANDSCAPE, FONT_SANS_SERIF
from gen.plug.docgen import BaseDoc, TextDoc, PAPER_LANDSCAPE, FONT_SANS_SERIF
from gen.plug.docbackend import LateXBackend, latexescape
import ImgManip
import Errors

View File

@ -44,15 +44,15 @@ from xml.sax.saxutils import escape
# Gramps modules
#
#-------------------------------------------------------------------------
from gen.plug.docgen import BaseDoc, TextDoc, DrawDoc
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, DASHED, PAPER_PORTRAIT,
from gen.plug import PluginManager, DocGenPlugin
from gen.plug.docgen import (BaseDoc, TextDoc, DrawDoc,
FONT_SANS_SERIF, DASHED, PAPER_PORTRAIT,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER, PARA_ALIGN_LEFT,
INDEX_TYPE_ALP, PARA_ALIGN_RIGHT)
from gen.plug.docgen.fontscale import string_width
import const
from gen.plug import PluginManager, DocGenPlugin
from ReportBase import ReportUtils
import ImgManip
import FontScale
import Utils
import Errors
@ -988,7 +988,7 @@ class ODFDoc(BaseDoc, TextDoc, DrawDoc):
height = size*(len(text))
width = 0
for line in text:
width = max(width, FontScale.string_width(font, line))
width = max(width, string_width(font, line))
wcm = ReportUtils.pt2cm(width)
hcm = ReportUtils.pt2cm(height)
@ -1061,7 +1061,7 @@ class ODFDoc(BaseDoc, TextDoc, DrawDoc):
para_name = box_style.get_paragraph_style()
pstyle = style_sheet.get_paragraph_style(para_name)
font = pstyle.get_font()
sw = ReportUtils.pt2cm(FontScale.string_width(font, text))*1.3
sw = ReportUtils.pt2cm(string_width(font, text))*1.3
self.cntnt.write('<draw:frame text:anchor-type="paragraph" ')
self.cntnt.write('draw:z-index="2" ')
@ -1121,7 +1121,7 @@ class ODFDoc(BaseDoc, TextDoc, DrawDoc):
pstyle = style_sheet.get_paragraph_style(para_name)
font = pstyle.get_font()
size = (FontScale.string_width(font, text)/72.0) * 2.54
size = (string_width(font, text)/72.0) * 2.54
self.cntnt.write('<draw:frame text:anchor-type="paragraph" ')
self.cntnt.write('draw:style-name="%s" ' % style)

View File

@ -33,11 +33,9 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
from ReportBase import ReportUtils
from gen.plug import PluginManager, DocGenPlugin
from gen.plug.docgen import BaseDoc, DrawDoc
from gen.plug.docgen.basedoc import FONT_SERIF, PAPER_PORTRAIT, SOLID
from gen.plug.docgen import BaseDoc, DrawDoc, FONT_SERIF, PAPER_PORTRAIT, SOLID
from gen.plug.utils import gformat
import Errors
from Utils import gformat
import Utils
def lrgb(grp):

View File

@ -34,9 +34,8 @@ from gettext import gettext as _
# Load the base BaseDoc class
#
#------------------------------------------------------------------------
from gen.plug.docgen import BaseDoc, TextDoc
from gen.plug.docgen.basedoc import (FONT_SERIF, PARA_ALIGN_RIGHT
, PARA_ALIGN_CENTER, PARA_ALIGN_JUSTIFY)
from gen.plug.docgen import (BaseDoc, TextDoc, FONT_SERIF, PARA_ALIGN_RIGHT,
PARA_ALIGN_CENTER, PARA_ALIGN_JUSTIFY)
from gen.plug import PluginManager, DocGenPlugin
import ImgManip
import Errors

View File

@ -35,8 +35,7 @@ import StringIO
#
#-------------------------------------------------------------------------
from gen.plug import PluginManager, DocGenPlugin
from gen.plug.docgen import BaseDoc, DrawDoc
from gen.plug.docgen.basedoc import FONT_SANS_SERIF
from gen.plug.docgen import BaseDoc, DrawDoc,FONT_SANS_SERIF
import Errors
#-------------------------------------------------------------------------

View File

@ -35,8 +35,8 @@ from TransUtils import sgettext as _
# GRAMPS modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle,\
FONT_SANS_SERIF, PARA_ALIGN_CENTER
from SubstKeywords import SubstKeywords
from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, NumberOption, TextOption, PersonOption

View File

@ -34,9 +34,10 @@ import time
# GRAMPS modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import (FONT_SERIF, PARA_ALIGN_CENTER
, PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT)
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
FONT_SERIF, PARA_ALIGN_CENTER,
PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT)
from gen.plug.docgen.fontscale import string_trim
from BasicUtils import name_displayer
from gen.plug import PluginManager
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW
@ -45,7 +46,7 @@ from gen.plug.menu import BooleanOption, StringOption, NumberOption, \
import GrampsLocale
import gen.lib
from Utils import probably_alive, ProgressMeter
from FontScale import string_trim
import libholiday
from libholiday import g2iso

View File

@ -35,8 +35,8 @@ from gen.plug.menu import TextOption, NumberOption, BooleanOption, PersonOption
from ReportBase import Report, MenuReportOptions, ReportUtils, CATEGORY_DRAW
from SubstKeywords import SubstKeywords
from TransUtils import sgettext as _
from gen.plug.docgen import GraphicsStyle, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
from gen.plug.docgen import GraphicsStyle, FontStyle, ParagraphStyle,\
FONT_SANS_SERIF, PARA_ALIGN_CENTER
#------------------------------------------------------------------------
#

View File

@ -33,8 +33,8 @@ from gettext import gettext as _
# gramps modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import FONT_SANS_SERIF, PARA_ALIGN_CENTER
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
FONT_SANS_SERIF, PARA_ALIGN_CENTER)
from gen.plug import PluginManager
from gen.plug.menu import EnumeratedListOption, NumberOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW

View File

@ -43,9 +43,9 @@ from TransUtils import sgettext as _
# Person and relation types
from gen.lib import Person, FamilyRelType, EventType
# gender and report type names
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
PARA_ALIGN_CENTER, PARA_ALIGN_LEFT)
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
FONT_SANS_SERIF, FONT_SERIF,
PARA_ALIGN_CENTER, PARA_ALIGN_LEFT)
from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, NumberOption, EnumeratedListOption, \
FilterOption, PersonOption

View File

@ -41,9 +41,8 @@ from gen.plug import PluginManager
from gen.plug.menu import PersonOption, FilterOption, EnumeratedListOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_DRAW
pt2cm = ReportUtils.pt2cm
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
DASHED, PARA_ALIGN_CENTER)
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
FONT_SANS_SERIF, DASHED, PARA_ALIGN_CENTER)
import Sort
from QuestionDialog import ErrorDialog
from BasicUtils import name_displayer

View File

@ -38,10 +38,9 @@ from math import radians
# Gramps modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import BaseDoc, TextDoc, DrawDoc, ParagraphStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
FONT_MONOSPACE, PARA_ALIGN_CENTER, PARA_ALIGN_LEFT)
from gen.plug.docgen import (BaseDoc, TextDoc, DrawDoc, ParagraphStyle,
TableCellStyle, FONT_SANS_SERIF, FONT_SERIF,
FONT_MONOSPACE, PARA_ALIGN_CENTER, PARA_ALIGN_LEFT)
from ReportBase import ReportUtils
from Errors import PluginError
from gen.plug import PluginManager, Plugin

View File

@ -39,9 +39,9 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, NumberOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from BasicUtils import name_displayer
from gen.lib import ChildRefType

View File

@ -35,9 +35,9 @@ import datetime, time
# GRAMPS modules
#
#------------------------------------------------------------------------
from gen.plug.docgen import FontStyle, ParagraphStyle, GraphicsStyle
from gen.plug.docgen.basedoc import (FONT_SERIF, PARA_ALIGN_RIGHT,
PARA_ALIGN_LEFT, PARA_ALIGN_CENTER)
from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
FONT_SERIF, PARA_ALIGN_RIGHT,
PARA_ALIGN_LEFT, PARA_ALIGN_CENTER)
from BasicUtils import name_displayer as _nd
from gen.plug import PluginManager
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT

View File

@ -44,8 +44,8 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import TextOption
from ReportBase import Report, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, PARA_ALIGN_CENTER)
from gen.plug.docgen import (FontStyle, ParagraphStyle, FONT_SANS_SERIF,
PARA_ALIGN_CENTER)
#------------------------------------------------------------------------
#

View File

@ -39,9 +39,9 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import NumberOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import Sort
from BasicUtils import name_displayer
import DateHandler

View File

@ -43,9 +43,9 @@ from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, NumberOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from ReportBase import Bibliography, Endnotes
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import DateHandler
from BasicUtils import name_displayer as _nd
import Utils

View File

@ -44,9 +44,9 @@ from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, NumberOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from ReportBase import Bibliography, Endnotes
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import DateHandler
from BasicUtils import name_displayer as _nd
import Utils

View File

@ -37,10 +37,9 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle, TableStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
TableCellStyle, FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER)
from BasicUtils import name_displayer
import DateHandler

View File

@ -32,10 +32,9 @@ import gen.lib
from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, FamilyOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle, TableStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
TableCellStyle, FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import DateHandler
from TransUtils import sgettext as _
from BasicUtils import name_displayer as _nd

View File

@ -35,10 +35,9 @@ from gettext import gettext as _
#
#------------------------------------------------------------------------
import gen.lib
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle, TableStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
TableCellStyle, FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER)
import DateHandler
from gen.plug import PluginManager
from gen.plug.menu import BooleanOption, FilterOption, PersonOption

View File

@ -39,9 +39,8 @@ from string import capitalize
from gen.plug import PluginManager
from gen.plug.menu import NumberOption, BooleanOption, PersonOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from BasicUtils import name_displayer
import DateHandler

View File

@ -38,10 +38,9 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import EnumeratedListOption
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle,\
TableStyle, TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
TableStyle, TableCellStyle, FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.lib import MarkerType
from Filters import GenericFilterFactory, Rules
from BasicUtils import name_displayer

View File

@ -44,9 +44,9 @@ from gen.plug import PluginManager
from gen.plug.menu import PersonOption
from ReportBase import Report, MenuReportOptions, ReportUtils, CATEGORY_TEXT
from BasicUtils import name_displayer
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, PARA_ALIGN_CENTER,
INDEX_TYPE_TOC)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, PARA_ALIGN_CENTER,
INDEX_TYPE_TOC)
#------------------------------------------------------------------------
#

View File

@ -37,10 +37,9 @@ from gettext import gettext as _
from gen.plug import PluginManager
from gen.plug.menu import FilterOption, PlaceListOption
from ReportBase import Report, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle, TableStyle,\
TableCellStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, TableStyle,
TableCellStyle, FONT_SANS_SERIF, FONT_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
import DateHandler
import Sort
from BasicUtils import name_displayer as _nd

View File

@ -37,8 +37,8 @@ from gen.plug import PluginManager
from gen.plug.menu import StringOption, MediaOption, NumberOption
from Utils import media_path_full
from ReportBase import Report, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF, PARA_ALIGN_CENTER)
from gen.plug.docgen import (FontStyle, ParagraphStyle,
FONT_SANS_SERIF, PARA_ALIGN_CENTER)
#------------------------------------------------------------------------
#

View File

@ -39,9 +39,8 @@ from gettext import gettext as _
import gen.lib
from gen.plug import PluginManager
from ReportBase import Report, ReportUtils, MenuReportOptions, CATEGORY_TEXT
from gen.plug.docgen import IndexMark, FontStyle, ParagraphStyle
from gen.plug.docgen.basedoc import (FONT_SANS_SERIF,
INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER)
from Utils import media_path_full
import DateHandler