Initial revision
svn: r1140
10
gramps2/doc/extending-gramps/C/Makefile.am
Normal file
@@ -0,0 +1,10 @@
|
||||
SGML_FILES =
|
||||
|
||||
figs =
|
||||
|
||||
docname = extending-gramps
|
||||
lang = C
|
||||
omffile = extending-gramps-C.omf
|
||||
sgml_ents =
|
||||
include ${top_srcdir}/doc/sgmldocs.make
|
||||
dist-hook: app-dist-hook
|
240
gramps2/doc/extending-gramps/C/Makefile.in
Normal file
@@ -0,0 +1,240 @@
|
||||
# Makefile.in generated by automake 1.6.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
# 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@
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../../..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
|
||||
EXEEXT = @EXEEXT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
AMTAR = @AMTAR@
|
||||
AWK = @AWK@
|
||||
BINSH = @BINSH@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
|
||||
GNOMEHELP = @GNOMEHELP@
|
||||
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
|
||||
HAVE_JW = @HAVE_JW@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
JW = @JW@
|
||||
LANGUAGES = @LANGUAGES@
|
||||
LIBS = @LIBS@
|
||||
MOFILES = @MOFILES@
|
||||
MSGFMT = @MSGFMT@
|
||||
P15_INCLUDES = @P15_INCLUDES@
|
||||
P20_INCLUDES = @P20_INCLUDES@
|
||||
P21_INCLUDES = @P21_INCLUDES@
|
||||
P22_INCLUDES = @P22_INCLUDES@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON22 = @PYTHON22@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RELEASE = @RELEASE@
|
||||
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
|
||||
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
VERSIONSTRING = @VERSIONSTRING@
|
||||
ZIP = @ZIP@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
SGML_FILES =
|
||||
|
||||
figs =
|
||||
|
||||
docname = extending-gramps
|
||||
lang = C
|
||||
omffile = extending-gramps-C.omf
|
||||
sgml_ents =
|
||||
subdir = doc/extending-gramps/C
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/extending-gramps/C/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@list='$(DISTFILES)'; for file in $$list; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
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
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="${top_distdir}" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
|
||||
installdirs:
|
||||
|
||||
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_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(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
|
||||
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic uninstall uninstall-am uninstall-info-am
|
||||
|
||||
include ${top_srcdir}/doc/sgmldocs.make
|
||||
dist-hook: app-dist-hook
|
||||
# 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:
|
14
gramps2/doc/extending-gramps/C/extending-gramps-C.omf
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<omf>
|
||||
<resource>
|
||||
<title>
|
||||
Writing GRAMPS Extensions
|
||||
</title>
|
||||
<subject>
|
||||
<category>GNOME|Applications</category>
|
||||
</subject>
|
||||
<format mime="text/sgml"/>
|
||||
<identifier url="extending-gramps.sgml"/>
|
||||
<language code="C"/>
|
||||
</resource>
|
||||
</omf>
|
774
gramps2/doc/extending-gramps/C/extending-gramps.sgml
Normal file
@@ -0,0 +1,774 @@
|
||||
<!DOCTYPE article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
|
||||
<!ENTITY version "0.5.0"> <!-- replace with application version -->
|
||||
]>
|
||||
|
||||
<!-- =============Document Header ============================= -->
|
||||
|
||||
<article id="index"> <!-- please do not change the id -->
|
||||
|
||||
<artheader>
|
||||
<title>Writing Extentions for gramps</title>
|
||||
<copyright>
|
||||
<year>2001</year>
|
||||
<holder>Donald N. Allingham</holder>
|
||||
</copyright>
|
||||
|
||||
<!-- translators: uncomment this:
|
||||
|
||||
<copyright>
|
||||
<year>2001</year>
|
||||
<holder>ME-THE-TRANSLATOR (Latin translation)</holder>
|
||||
</copyright>
|
||||
|
||||
-->
|
||||
|
||||
<!-- do not put authorname in the header except in copyright - use
|
||||
section "authors" below -->
|
||||
|
||||
<!-- Use this legal notice for online documents which depend on -->
|
||||
<!-- core GNOME packages. -->
|
||||
<legalnotice id="legalnotice">
|
||||
<para>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the <ulink type="help"
|
||||
url="gnome-help:fdl"><citetitle>GNU Free Documentation
|
||||
License</citetitle></ulink>, Version 1.1 or any later version
|
||||
published by the Free Software Foundation with no Invariant
|
||||
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy
|
||||
of the license can be found <ulink type="help"
|
||||
url="gnome-help:fdl">here</ulink>.
|
||||
</para>
|
||||
<para>
|
||||
Many of the names used by companies to distinguish their products
|
||||
and services are claimed as trademarks. Where those names appear
|
||||
in any GNOME documentation, and those trademarks are made aware to
|
||||
the members of the GNOME Documentation Project, the names have
|
||||
been printed in caps or initial caps.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
<!-- Use this legal notice for documents which are placed on -->
|
||||
<!-- the web, shipped in any way other than online documents -->
|
||||
<!-- (eg. PS, PDF, or RTF), or which do not depend on the -->
|
||||
<!-- core GNOME distribution. -->
|
||||
<!-- -->
|
||||
<!-- If you use this version, you must place the following -->
|
||||
<!-- line in the document declaration at the top of your -->
|
||||
<!-- document: -->
|
||||
<!-- <!ENTITY FDL SYSTEM "fdl.sgml"> -->
|
||||
<!-- and the following line at the bottom of your document -->
|
||||
<!-- after the last </sect1>. -->
|
||||
<!-- &FDL; -->
|
||||
<!--
|
||||
<legalnotice id="legalnotice">
|
||||
<para>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the <link linkend="fdl"><citetitle>GNU
|
||||
Free Documentation License</citetitle></link>, Version 1.1 or any
|
||||
later version published by the Free Software Foundation with no
|
||||
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license can be found in <xref linkend="fdl">.
|
||||
</para>
|
||||
<para>
|
||||
Many of the names used by companies to distinguish their products
|
||||
and services are claimed as trademarks. Where those names appear
|
||||
in any GNOME documentation, and those trademarks are made aware to
|
||||
the members of the GNOME Documentation Project, the names have
|
||||
been printed in caps or initial caps.
|
||||
</para>
|
||||
</legalnotice>
|
||||
-->
|
||||
|
||||
<!-- This is the manual version, not application version. -->
|
||||
<releaseinfo>
|
||||
This is version 1.0 of the Writing Extentions for gramps manual.
|
||||
</releaseinfo>
|
||||
|
||||
</artheader>
|
||||
|
||||
<!-- ============= Introduction ============================== -->
|
||||
<sect1 id="intro">
|
||||
<title>Introduction</title>
|
||||
<para>
|
||||
<application>gramps</application> was intended from the start to
|
||||
allow the user to extend it through a plugin system. Five types of
|
||||
plugins are supported - filters, reports, tools, import filters,
|
||||
and export filters. In a way, an export filter can be viewed as a
|
||||
special type of report, and an import filter can be viewed as a
|
||||
special type of tool.
|
||||
</para>
|
||||
<para>
|
||||
All plugins are written in the <application>python</application>
|
||||
language.
|
||||
</para>
|
||||
<sect2 id="intro-filter">
|
||||
<title>Filters</title>
|
||||
<para>
|
||||
A filter is a plugin that be used to temporarily display or hide
|
||||
individuals in the <interface>People View</interface>. The
|
||||
filter is the simplest form of plugin, which only needs to
|
||||
determine if a person meets or fails to meet its criteria. It
|
||||
operates on a single person at a time.
|
||||
</para>
|
||||
<para>
|
||||
Filters should never alter a database.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="intro-report">
|
||||
<title>Reports</title>
|
||||
<para>
|
||||
A report is a plugin that generates output. The output may be in
|
||||
either a interactive, graphical form, or as an output
|
||||
file. Report plugins are passed a reference to the internal
|
||||
database and a reference to the active person, which allows the
|
||||
plugn to operate on a single person, the entire database, or
|
||||
anything in between.
|
||||
</para>
|
||||
<para>
|
||||
Plugins that conform to the reportplugin interface appear in the
|
||||
<menuchoice>
|
||||
<guimenu>Reports</guimenu>
|
||||
</menuchoice>
|
||||
menu and in the <interface>Report Selection</interface> dialog
|
||||
box.
|
||||
</para>
|
||||
<para>
|
||||
A report should never alter the database.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="intro-tool">
|
||||
<title>Tools</title>
|
||||
<para>
|
||||
A tool is a plugin that alters the database. It may perform
|
||||
something as small changing the case of some text to something
|
||||
as complex as merging redundant individuals. Tools plugins are
|
||||
passed a reference to the internal database, the active person,
|
||||
and a callback function. The callback function is used to notify
|
||||
the main program if it needs to update the display with any
|
||||
modified information.
|
||||
</para>
|
||||
<para>
|
||||
Plugins that conform to the tool plugin interface appear in the
|
||||
<menuchoice>
|
||||
<guimenu>Tools</guimenu>
|
||||
</menuchoice>
|
||||
menu and in the <interface>Tool Selection</interface> dialog
|
||||
box.
|
||||
</para>
|
||||
<para>
|
||||
A tool is allowed (and usually expected) to alter the database.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="intro-import">
|
||||
<title>Import Filters</title>
|
||||
<para>
|
||||
An import filter is a plugin that adds information from another
|
||||
source to the database. It is similar to a tool, but is called
|
||||
differently to allow gramps to distinguish it from a tool.
|
||||
</para>
|
||||
<para>
|
||||
Plugins that conform to the import filter calling syntax appear
|
||||
in the
|
||||
<menuchoice>
|
||||
<guimenu>File</guimenu>
|
||||
<guisubmenu>Import</guisubmenu>
|
||||
</menuchoice>
|
||||
menu.
|
||||
</para>
|
||||
<para>
|
||||
An import filter is allowed to modify the database.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="intro-export">
|
||||
<title>Export Filters</title>
|
||||
<para>
|
||||
An export filter is a plugin that translates the gramps database
|
||||
into the format expected by another program. Since it generates
|
||||
an output file, it is similar to a report generator. However,
|
||||
its calling syntax is different, so that gramps knows how to
|
||||
distiguish it from a report generator.
|
||||
</para>
|
||||
<para>
|
||||
Plugins that conform to the export filter calling syntax appear
|
||||
in the
|
||||
<menuchoice>
|
||||
<guimenu>File</guimenu>
|
||||
<guisubmenu>Export</guisubmenu>
|
||||
</menuchoice>
|
||||
menu.
|
||||
</para>
|
||||
<para>
|
||||
An export filter should not alter the database.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Writing Filters ============================= -->
|
||||
|
||||
<sect1 id="writingfilters">
|
||||
<title>Writing Filters</title>
|
||||
<para>
|
||||
Users can create their own filters and add them to
|
||||
<application>gramps</application>. By adding the filter to the
|
||||
user's private filter directory (<filename
|
||||
class="directory">~/.gramps/filters</filename>), the filter will
|
||||
be automatically recognized the next time that the program is
|
||||
started.
|
||||
</para>
|
||||
<sect2 id="createfilter">
|
||||
<title>Creating a filter</title>
|
||||
<para>
|
||||
Each filter is a class derived from the
|
||||
<function>Filter.Filter</function> class. The
|
||||
<function>__init__</function> task may be overridden, but if so,
|
||||
should call the <function>__init__</function> function on the
|
||||
<function>Filter.Filter</function> class. The parent class
|
||||
provides the variable <function>self.text</function>, which
|
||||
contains the text string passed as the qualifier. This string
|
||||
provides additional information provided by the user. For
|
||||
example, if the filter is used to match names, the qualifier
|
||||
would be used to provide the name that is being compared
|
||||
against.
|
||||
</para>
|
||||
<para>
|
||||
All filter classes must define a <function>match</function>
|
||||
function. The function takes one argument (other than
|
||||
<function>self</function>), which is an object of type
|
||||
<function>Person</function> to compare against. The function
|
||||
should return a 1 if the person matches the filter, or a zero if
|
||||
the person does not.
|
||||
</para>
|
||||
<para>
|
||||
Each filter must be registered, so that
|
||||
<application>gramps</application> knows about it. This is
|
||||
accomplished by calling the
|
||||
<function>Filter.register_filter</function> function. This
|
||||
function takes three arguments - the filter class, a
|
||||
description, and flag that indicates if the qualifier string is
|
||||
needed. The description string appears in the pull down
|
||||
interface within <application>gramps</application>, and helps
|
||||
the user choose the appropriate filter. The qualifier flag tells
|
||||
<application>gramps</application> whether or not the filter
|
||||
needs a qualifier string. If this flag is 0,
|
||||
<application>gramps</application> will disable the entry of a
|
||||
qualifier string.
|
||||
</para>
|
||||
<figure id="filtersrc">
|
||||
<title>Sample filter implementation</title>
|
||||
<programlisting>
|
||||
|
||||
import Filter
|
||||
import string
|
||||
|
||||
# class definition
|
||||
|
||||
class SubString(Filter.Filter):
|
||||
|
||||
def match(self,person):
|
||||
name = person.getPrimaryName().getName()
|
||||
return string.find(name,self.text) >= 0
|
||||
|
||||
Filter.register_filter(SubString,
|
||||
description="Names that contain a substring",
|
||||
qualifier=1)
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Writing Reports ============================= -->
|
||||
|
||||
<sect1 id="writingreports">
|
||||
<title>Writing Reports</title>
|
||||
<para>
|
||||
Users can create their own report generators and add them to
|
||||
<application>gramps</application>. By adding the report generator
|
||||
to the user's private plugin directory (<filename
|
||||
class="directory">~/.gramps/plugins</filename>), the report
|
||||
generator will be automatically recognized the next time that the
|
||||
program is started.
|
||||
</para>
|
||||
<sect2 id="createreport">
|
||||
<title>Creating a report generator</title>
|
||||
<para>
|
||||
Fewer restrictions are made on report generators than on
|
||||
filters. The report generator is passed the current
|
||||
<application>gramps</application> database and the active
|
||||
person. The generator needs to take special care to make sure
|
||||
that it does not alter the database in anyway.
|
||||
</para>
|
||||
<para>
|
||||
A report generator is a function that takes two arguments
|
||||
— a database (of type <function>RelDataBase</function>)
|
||||
and the currently selected person (of type
|
||||
<function>Person</function>). When called, this task should
|
||||
generate the desired report.
|
||||
</para>
|
||||
<para>
|
||||
This function's implementation can be as simple as generating
|
||||
output without the user's intervention, or it could display a
|
||||
graphical interface to allow the user to select options and
|
||||
customize a report.
|
||||
</para>
|
||||
<para>
|
||||
As with filters, the report generator must be registered before
|
||||
<application>gramps</application> will understand it. The report
|
||||
generator is registered using the
|
||||
<function>Plugins.register_report</function>. This function
|
||||
takes five arguments.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The report generation task</guilabel> This task
|
||||
that generates the report.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The report category</guilabel> The category in
|
||||
which the report is grouped in the
|
||||
<menuchoice><guimenu>Reports</guimenu></menuchoice> menu and
|
||||
in the <interface>Report Selection</interface> dialog.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The report name</guilabel>
|
||||
The name of the report.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>A text description of the report</guilabel> The
|
||||
description appears in the report selection tool to provide
|
||||
the user with a description of what the tools does.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>A graphic logo in XPM format</guilabel> This may
|
||||
be either a path to a filename, or a list of strings
|
||||
containting the XPM data. If a filename is specified, care
|
||||
must be taken to make sure the file location is relocatable
|
||||
and can be determined at runtime.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
While only the task and report name are required, it is
|
||||
recommended to provide all five parameters.
|
||||
</para>
|
||||
<figure id="reportsrc">
|
||||
<title>Sample report implementation</title>
|
||||
<programlisting>
|
||||
|
||||
import Plugins
|
||||
|
||||
def report(database,person):
|
||||
... actual code ...
|
||||
|
||||
Plugins.register_report(
|
||||
task=report,
|
||||
category="Category",
|
||||
name="Report Name",
|
||||
description="A text descripition of the report generator",
|
||||
xpm="%s/myfile.xpm" % os.path.dirname(__file__)
|
||||
)
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
<sect2 id="alittlehelp">
|
||||
<title>A little help - Format Interfaces</title>
|
||||
<para>
|
||||
<application>gramps</application> provides some help with
|
||||
writing reports. Several generic python classes exist that aid
|
||||
in the writing of report generators. These classes provide an
|
||||
abstract interface for a type of document, such as a drawing,
|
||||
word processor document, or a spreadsheet. From these core
|
||||
classes, <application>gramps</application> derives interfaces to
|
||||
various document formats. This means that by coding to the
|
||||
generic word processing class (<function>TextDoc</function>), a
|
||||
report generator can instant access to multiple file formats
|
||||
(such as HTML, OpenOffice, and AbiWord).
|
||||
</para>
|
||||
<para>
|
||||
This scheme of deriving a output format from a generic base
|
||||
class also makes it easier to add new formats. Creating a new
|
||||
derivied class targeting a different format (such as
|
||||
<application>KWord</application> or
|
||||
<application>LaTeX</application>) makes it easy for existing
|
||||
report generators to use the new formats.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Writing Tools ============================= -->
|
||||
|
||||
<sect1 id="writingtools">
|
||||
<title>Writing Tools</title>
|
||||
<para>
|
||||
Users can create their own tools and add them to
|
||||
<application>gramps</application>. By adding the tool to the
|
||||
user's private plugin directory (<filename
|
||||
class="directory">~/.gramps/plugins</filename>), the tool will be
|
||||
automatically recognized the next time that
|
||||
<application>gramps</application> is started.
|
||||
</para>
|
||||
<para>
|
||||
Unlike a report generator, a tool is allowed to modify the
|
||||
database. The tool is passed the current
|
||||
<application>gramps</application> database, the active person,
|
||||
and a callback function. The callback function should be called
|
||||
with a non-zero argument upon completion of the tool if the
|
||||
database has been altered.
|
||||
</para>
|
||||
<para>
|
||||
As with filters and report generators, tools must be registered
|
||||
before <application>gramps</application> will understand it. The
|
||||
tool is registered using the
|
||||
<function>Plugins.register_tool</function>. This function takes
|
||||
four arguments.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The tool task</guilabel> This task
|
||||
that executes the tool.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The tool category</guilabel> The category in which
|
||||
the tool is grouped in the
|
||||
<menuchoice><guimenu>Tools</guimenu></menuchoice> menu and in
|
||||
the <interface>Tool Selection</interface> dialog.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>The tool name</guilabel>
|
||||
The name of the tool.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<guilabel>A text description of the tool</guilabel> The
|
||||
description appears in the Tool Selection dialog to provide
|
||||
the user with a description of what the tool does.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
While only the task and report name are required, it is
|
||||
recommended to provide all five parameters.
|
||||
</para>
|
||||
<figure id="toolsrc">
|
||||
<title>Sample tool implementation</title>
|
||||
<programlisting>
|
||||
|
||||
import Plugins
|
||||
|
||||
def tool(database,person,callback):
|
||||
... actual code ...
|
||||
callback(1)
|
||||
|
||||
Plugins.register_tool(
|
||||
task=tool,
|
||||
category="Category",
|
||||
name="Tool Name",
|
||||
description="A text descripition of the tool"
|
||||
)
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Import Filters ============================= -->
|
||||
|
||||
<sect1 id="writingimportfilters">
|
||||
<title>Writing Import Filters</title>
|
||||
<para>
|
||||
Import filters are similar to tools, since they are allowed to
|
||||
modify the databases. An import filter is a task that accepts
|
||||
three arguments — a database, the filename of the file that
|
||||
is to be imported, and a callback function.
|
||||
</para>
|
||||
<para>
|
||||
The database may or may not have data already in it. The import
|
||||
filter cannot assume that data neither already exists nor that the
|
||||
database is empty.
|
||||
</para>
|
||||
<para>
|
||||
The callback function is different from the callback function used
|
||||
for tools. The import filter's callback function is used to
|
||||
indicate progress and update the status bar during the import
|
||||
process. The function takes a value between 0.0 and 1.0, where 0.0
|
||||
represents the start of the import and 1.0 represents the
|
||||
completion of the import.
|
||||
</para>
|
||||
<para>
|
||||
As with the other plugin types, an import filter must be
|
||||
registered with <application>gramps</application>. This is
|
||||
accomplished by calling the
|
||||
<function>Plugins.register_import</function> task. The
|
||||
<function>Plugins.register_import</function> accepts two arguments
|
||||
— the function the performs the import and a string
|
||||
providing a brief description. This description is used as the
|
||||
menu entry under the
|
||||
<menuchoice>
|
||||
<guimenu>File</guimenu>
|
||||
<guisubmenu>Import</guisubmenu>
|
||||
</menuchoice>
|
||||
menu.
|
||||
</para>
|
||||
<figure id="importexample">
|
||||
<title>Sample Import Implementation</title>
|
||||
<programlisting>
|
||||
|
||||
import Plugins
|
||||
|
||||
def gedcom_import(database,filename,callback):
|
||||
... actual code ...
|
||||
|
||||
Plugins.register_import(gedcom_import,"GEDCOM import")
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Export Filters ============================= -->
|
||||
|
||||
<sect1 id="writingexportfilters">
|
||||
<title>Writing Export Filters</title>
|
||||
<para>
|
||||
Export filters are similar to report generators. They are not
|
||||
allowed to modify the database. An export filter accepts three
|
||||
arguments — a database, the filename of the file that is to
|
||||
be written, and a callback function.
|
||||
</para>
|
||||
<para>
|
||||
The callback function is indentical from the callback function
|
||||
used for import filters. The export filter's callback function is
|
||||
used to indicate progress and update the status bar during the
|
||||
export process. The function takes a value between 0.0 and 1.0,
|
||||
where 0.0 represents the start of the export and 1.0 represents
|
||||
the completion of the export.
|
||||
</para>
|
||||
<para>
|
||||
As with the other plugin types, an export filter must be
|
||||
registered with <application>gramps</application>. This is
|
||||
accomplished by calling the
|
||||
<function>Plugins.register_export</function> task. The
|
||||
<function>Plugins.register_export</function> accepts two arguments
|
||||
— the function the performs the import and a string
|
||||
providing a brief description. This description is used as the
|
||||
menu entry under the
|
||||
<menuchoice>
|
||||
<guimenu>File</guimenu>
|
||||
<guisubmenu>Export</guisubmenu>
|
||||
</menuchoice>
|
||||
menu.
|
||||
</para>
|
||||
<figure id="exportexample">
|
||||
<title>Sample Export Implementation</title>
|
||||
<programlisting>
|
||||
|
||||
import Plugins
|
||||
|
||||
def gedcom_export(database,filename,callback):
|
||||
... actual code ...
|
||||
|
||||
Plugins.register_export(gedcom_export,"GEDCOM export")
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect1>
|
||||
<sect1 id="commontasks">
|
||||
<title>Common tasks</title>
|
||||
<para>
|
||||
While this manual does not document the
|
||||
<application>gramps</application> database interface, this section
|
||||
shows a few common tasks.
|
||||
</para>
|
||||
<sect2 id="gettingnames">
|
||||
<title>Printing names of people</title>
|
||||
<para>
|
||||
This example shows how to display the name of people in the
|
||||
database. It assumes that the database is called
|
||||
<function>db</function>. To get a list of people, it calls the
|
||||
<function>getPersonMap</function> method, which returns a map of
|
||||
<application>gramps</application> ID to
|
||||
<function>Person</function> objects. Calling the
|
||||
<function>valus</function> method of the returned map returns a
|
||||
list of people. For each person, the primary name is extracted,
|
||||
and then the <function>Name</function> object's
|
||||
<function>getName</function> method is called to build a
|
||||
presentable name from the individual name components.
|
||||
</para>
|
||||
<figure id="displaynames">
|
||||
<title>Displaying names</title>
|
||||
<programlisting>
|
||||
|
||||
for person in db.getPersonMap().values():
|
||||
name = person.getPrimaryName()
|
||||
print name.getName()
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
<sect2 id="listingevents">
|
||||
<title>Displaying the events of person</title>
|
||||
<para>
|
||||
This example shows how to display the public events associated
|
||||
with a person. It assumes that the person is called
|
||||
<function>person</function>.
|
||||
</para>
|
||||
<figure id="eventexample">
|
||||
<title>Displaying Event Information</title>
|
||||
<programlisting>
|
||||
|
||||
for event in person.getEventList():
|
||||
if event.getPrivacy() == 0:
|
||||
print "Event:",event.getName()
|
||||
print "Date:",event.getDate()
|
||||
print "Place:",event.getPlaceName()
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
<sect2 id="printfamily">
|
||||
<title>Print the members of each family</title>
|
||||
<para>
|
||||
This example shows how to display the parents and children of
|
||||
each family in the database. It assumes that the database is called
|
||||
<function>db</function>.
|
||||
</para>
|
||||
<figure id="familyexample">
|
||||
<title>Displaying Family Information</title>
|
||||
<programlisting>
|
||||
|
||||
for family in db.getFamilyMap().values:
|
||||
print "-------------------"
|
||||
print "Family ID:",family.getId()
|
||||
father = family.getFather()
|
||||
if father != None:
|
||||
print "Father:",father.getPrimaryName().getName()
|
||||
mother = family.getMother()
|
||||
if mother != None:
|
||||
print "Mother:",mother.getPrimaryName().getName()
|
||||
for child in family.getChildList():
|
||||
print "Child:",child.getPrimaryName().getName()
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
<sect2 id="personsfamily">
|
||||
<title>Display the marriages/relationships of a person</title>
|
||||
<para>
|
||||
This example shows how to display the families and relationships
|
||||
in which the person is considered a spouse or parent. It assumes
|
||||
that the person is called <function>person</function>.
|
||||
</para>
|
||||
<para>
|
||||
Relationships between people can be complex. Because someone is
|
||||
male, does not necessarily mean that the person will be
|
||||
considered the "Father" of a relationship. In relationships of
|
||||
type "Partners", the "father" and "mother" of the relationship
|
||||
should be of the same gender. So to determine the spouse of a
|
||||
person, it is usually best to compare the person against what is
|
||||
returned by <function>getFather</function> and
|
||||
<function>getMother</function> to find the one that is not
|
||||
equal. It should also be noted that the
|
||||
<function>getFather</function> and
|
||||
<function>getMother</function> methods will return None if noone
|
||||
has been associated with that role in the family.
|
||||
</para>
|
||||
<figure id="relexample">
|
||||
<title>Displaying Relationship Information</title>
|
||||
<programlisting>
|
||||
|
||||
for family in person.getFamilyList():
|
||||
print "-------------------"
|
||||
print "Family ID:",family.getId()
|
||||
print "Relationship Type:",family.getRelationship()
|
||||
father = family.getFather()
|
||||
if father != None and father != person:
|
||||
print "Spouse:",father.getPrimaryName().getName()
|
||||
mother = family.getMother()
|
||||
if mother != None and mother != person:
|
||||
print "Spouse:",mother.getPrimaryName().getName()
|
||||
|
||||
</programlisting>
|
||||
</figure>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Authors ================================ -->
|
||||
|
||||
<sect1 id="authors">
|
||||
<title>Authors</title>
|
||||
<para>
|
||||
<application>gramps</application> was written by Don Allingham
|
||||
(<email>dallingham@users.sourceforge.net</email>). To find more
|
||||
information about <application>gramps</application>, please visit
|
||||
the <ulink url="http://gramps.sourceforge.net" type="http">gramps
|
||||
web page</ulink>.
|
||||
</para>
|
||||
<para>
|
||||
This manual was written by Don Allingham
|
||||
(<email>dallingham@users.sourceforge.net</email>).
|
||||
</para>
|
||||
|
||||
<!-- For translations: uncomment this:
|
||||
<para>
|
||||
Latin translation was done by ME
|
||||
(<email>MYNAME@MYADDRESS</email>). Please send all comments and
|
||||
suggestions regarding this translation to SOMEWHERE.
|
||||
</para>
|
||||
-->
|
||||
</sect1>
|
||||
|
||||
<!-- ============= Application License ============================= -->
|
||||
|
||||
<sect1 id="license">
|
||||
<title>License</title>
|
||||
<para>
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the <ulink type="help"
|
||||
url="gnome-help:gpl"> <citetitle>GNU General Public
|
||||
License</citetitle></ulink> as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
</para>
|
||||
<para>
|
||||
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
|
||||
<citetitle>GNU General Public License</citetitle> for more
|
||||
details.
|
||||
</para>
|
||||
<para>
|
||||
A copy of the <citetitle>GNU General Public License</citetitle> is
|
||||
included as an appendix to the <citetitle>GNOME Users
|
||||
Guide</citetitle>. You may also obtain a copy of the
|
||||
<citetitle>GNU General Public License</citetitle> from the Free
|
||||
Software Foundation by visiting <ulink type="http"
|
||||
url="http://www.fsf.org">their Web site</ulink> or by writing to
|
||||
<address>
|
||||
Free Software Foundation, Inc. <street>59 Temple Place</street> -
|
||||
Suite 330 <city>Boston</city>, <state>MA</state>
|
||||
<postcode>02111-1307</postcode> <country>USA</country>
|
||||
</address>
|
||||
</para>
|
||||
</sect1>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
345
gramps2/doc/extending-gramps/C/extending-gramps/index.html
Normal file
@@ -0,0 +1,345 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Extentions for gramps</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Filters"
|
||||
HREF="x57.html"></HEAD
|
||||
><BODY
|
||||
CLASS="ARTICLE"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="ARTICLE"
|
||||
><DIV
|
||||
CLASS="TITLEPAGE"
|
||||
><H1
|
||||
CLASS="TITLE"
|
||||
><A
|
||||
NAME="AEN2">Writing Extentions for gramps</H1
|
||||
><P
|
||||
CLASS="COPYRIGHT"
|
||||
><A
|
||||
HREF="ln7.html"
|
||||
>Copyright</A
|
||||
> © 2001 by Donald N. Allingham</P
|
||||
><HR
|
||||
WIDTH="75%"
|
||||
ALIGN="CENTER"
|
||||
COLOR="#000000"
|
||||
SIZE="1"></DIV
|
||||
><DIV
|
||||
CLASS="TOC"
|
||||
><DL
|
||||
><DT
|
||||
><B
|
||||
>Table of Contents</B
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="t1.html#intro"
|
||||
>Introduction</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x57.html"
|
||||
>Writing Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x83.html"
|
||||
>Writing Reports</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x131.html"
|
||||
>Writing Tools</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x162.html"
|
||||
>Writing Import Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x177.html"
|
||||
>Writing Export Filters</A
|
||||
></DT
|
||||
></DL
|
||||
></DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
<DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="intro">Introduction</H1
|
||||
>
|
||||
<P
|
||||
> <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> was intended from the start to
|
||||
allow the user to extend it through a plugin system. Five types of
|
||||
plugins are supported - filters, reports, tools, import filters,
|
||||
and export filters. In a way, an export filter can be viewed as a
|
||||
special type of report, and an import filter can be viewed as a
|
||||
special type of tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> All plugins are written in the <TT
|
||||
CLASS="APPLICATION"
|
||||
>python</TT
|
||||
>
|
||||
language.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-filter">Filters</H2
|
||||
>
|
||||
<P
|
||||
> A filter is a plugin that be used to temporarily display or hide
|
||||
individuals in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>People View</SPAN
|
||||
>. The
|
||||
filter is the simplest form of plugin, which only needs to
|
||||
determine if a person meets or fails to meet its criteria. It
|
||||
operates on a single person at a time.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Filters should never alter a database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-report">Reports</H2
|
||||
>
|
||||
<P
|
||||
> A report is a plugin that generates output. The output may be in
|
||||
either a interactive, graphical form, or as an output
|
||||
file. Report plugins are passed a reference to the internal
|
||||
database and a reference to the active person, which allows the
|
||||
plugn to operate on a single person, the entire database, or
|
||||
anything in between.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the reportplugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Reports</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Report Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A report should never alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-tool">Tools</H2
|
||||
>
|
||||
<P
|
||||
> A tool is a plugin that alters the database. It may perform
|
||||
something as small changing the case of some text to something
|
||||
as complex as merging redundant individuals. Tools plugins are
|
||||
passed a reference to the internal database, the active person,
|
||||
and a callback function. The callback function is used to notify
|
||||
the main program if it needs to update the display with any
|
||||
modified information.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the tool plugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Tools</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Tool Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A tool is allowed (and usually expected) to alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-import">Import Filters</H2
|
||||
>
|
||||
<P
|
||||
> An import filter is a plugin that adds information from another
|
||||
source to the database. It is similar to a tool, but is called
|
||||
differently to allow gramps to distinguish it from a tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the import filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Import</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An import filter is allowed to modify the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-export">Export Filters</H2
|
||||
>
|
||||
<P
|
||||
> An export filter is a plugin that translates the gramps database
|
||||
into the format expected by another program. Since it generates
|
||||
an output file, it is similar to a report generator. However,
|
||||
its calling syntax is different, so that gramps knows how to
|
||||
distiguish it from a report generator.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the export filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Export</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An export filter should not alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x57.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Filters</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
133
gramps2/doc/extending-gramps/C/extending-gramps/ln7.html
Normal file
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="UP"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html#AEN2"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Filters"
|
||||
HREF="x57.html"></HEAD
|
||||
><BODY
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="LEGALNOTICE"
|
||||
><A
|
||||
NAME="legalnotice"><P
|
||||
></P
|
||||
> <P
|
||||
> Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the <A
|
||||
HREF="gnome-help:fdl"
|
||||
TARGET="_top"
|
||||
><I
|
||||
CLASS="CITETITLE"
|
||||
>GNU Free Documentation
|
||||
License</I
|
||||
></A
|
||||
>, Version 1.1 or any later version
|
||||
published by the Free Software Foundation with no Invariant
|
||||
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy
|
||||
of the license can be found <A
|
||||
HREF="gnome-help:fdl"
|
||||
TARGET="_top"
|
||||
>here</A
|
||||
>.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Many of the names used by companies to distinguish their products
|
||||
and services are claimed as trademarks. Where those names appear
|
||||
in any GNOME documentation, and those trademarks are made aware to
|
||||
the members of the GNOME Documentation Project, the names have
|
||||
been printed in caps or initial caps.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
></P
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html#AEN2"
|
||||
ACCESSKEY="U"
|
||||
>Up</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 995 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 964 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 944 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 95 B |
After Width: | Height: | Size: 843 B |
After Width: | Height: | Size: 846 B |
After Width: | Height: | Size: 922 B |
After Width: | Height: | Size: 1.0 KiB |
345
gramps2/doc/extending-gramps/C/extending-gramps/t1.html
Normal file
@@ -0,0 +1,345 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Extentions for gramps</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Filters"
|
||||
HREF="x57.html"></HEAD
|
||||
><BODY
|
||||
CLASS="ARTICLE"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="ARTICLE"
|
||||
><DIV
|
||||
CLASS="TITLEPAGE"
|
||||
><H1
|
||||
CLASS="TITLE"
|
||||
><A
|
||||
NAME="AEN2">Writing Extentions for gramps</H1
|
||||
><P
|
||||
CLASS="COPYRIGHT"
|
||||
><A
|
||||
HREF="ln7.html"
|
||||
>Copyright</A
|
||||
> © 2001 by Donald N. Allingham</P
|
||||
><HR
|
||||
WIDTH="75%"
|
||||
ALIGN="CENTER"
|
||||
COLOR="#000000"
|
||||
SIZE="1"></DIV
|
||||
><DIV
|
||||
CLASS="TOC"
|
||||
><DL
|
||||
><DT
|
||||
><B
|
||||
>Table of Contents</B
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="t1.html#intro"
|
||||
>Introduction</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x57.html"
|
||||
>Writing Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x83.html"
|
||||
>Writing Reports</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x131.html"
|
||||
>Writing Tools</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x162.html"
|
||||
>Writing Import Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x177.html"
|
||||
>Writing Export Filters</A
|
||||
></DT
|
||||
></DL
|
||||
></DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
<DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="intro">Introduction</H1
|
||||
>
|
||||
<P
|
||||
> <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> was intended from the start to
|
||||
allow the user to extend it through a plugin system. Five types of
|
||||
plugins are supported - filters, reports, tools, import filters,
|
||||
and export filters. In a way, an export filter can be viewed as a
|
||||
special type of report, and an import filter can be viewed as a
|
||||
special type of tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> All plugins are written in the <TT
|
||||
CLASS="APPLICATION"
|
||||
>python</TT
|
||||
>
|
||||
language.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-filter">Filters</H2
|
||||
>
|
||||
<P
|
||||
> A filter is a plugin that be used to temporarily display or hide
|
||||
individuals in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>People View</SPAN
|
||||
>. The
|
||||
filter is the simplest form of plugin, which only needs to
|
||||
determine if a person meets or fails to meet its criteria. It
|
||||
operates on a single person at a time.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Filters should never alter a database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-report">Reports</H2
|
||||
>
|
||||
<P
|
||||
> A report is a plugin that generates output. The output may be in
|
||||
either a interactive, graphical form, or as an output
|
||||
file. Report plugins are passed a reference to the internal
|
||||
database and a reference to the active person, which allows the
|
||||
plugn to operate on a single person, the entire database, or
|
||||
anything in between.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the reportplugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Reports</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Report Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A report should never alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-tool">Tools</H2
|
||||
>
|
||||
<P
|
||||
> A tool is a plugin that alters the database. It may perform
|
||||
something as small changing the case of some text to something
|
||||
as complex as merging redundant individuals. Tools plugins are
|
||||
passed a reference to the internal database, the active person,
|
||||
and a callback function. The callback function is used to notify
|
||||
the main program if it needs to update the display with any
|
||||
modified information.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the tool plugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Tools</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Tool Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A tool is allowed (and usually expected) to alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-import">Import Filters</H2
|
||||
>
|
||||
<P
|
||||
> An import filter is a plugin that adds information from another
|
||||
source to the database. It is similar to a tool, but is called
|
||||
differently to allow gramps to distinguish it from a tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the import filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Import</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An import filter is allowed to modify the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-export">Export Filters</H2
|
||||
>
|
||||
<P
|
||||
> An export filter is a plugin that translates the gramps database
|
||||
into the format expected by another program. Since it generates
|
||||
an output file, it is similar to a report generator. However,
|
||||
its calling syntax is different, so that gramps knows how to
|
||||
distiguish it from a report generator.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the export filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Export</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An export filter should not alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x57.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Filters</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
282
gramps2/doc/extending-gramps/C/extending-gramps/x131.html
Normal file
@@ -0,0 +1,282 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Tools</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="Writing Reports"
|
||||
HREF="x83.html"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Import Filters"
|
||||
HREF="x162.html"></HEAD
|
||||
><BODY
|
||||
CLASS="SECT1"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x83.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x162.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="writingtools">Writing Tools</H1
|
||||
>
|
||||
<P
|
||||
> Users can create their own tools and add them to
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>. By adding the tool to the
|
||||
user's private plugin directory (<TT
|
||||
CLASS="FILENAME"
|
||||
>~/.gramps/plugins</TT
|
||||
>), the tool will be
|
||||
automatically recognized the next time that
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> is started.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Unlike a report generator, a tool is allowed to modify the
|
||||
database. The tool is passed the current
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> database, the active person,
|
||||
and a callback function. The callback function should be called
|
||||
with a non-zero argument upon completion of the tool if the
|
||||
database has been altered.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> As with filters and report generators, tools must be registered
|
||||
before <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> will understand it. The
|
||||
tool is registered using the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_tool</TT
|
||||
>. This function takes
|
||||
four arguments.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The tool task</B
|
||||
></TT
|
||||
> This task
|
||||
that executes the tool.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The tool category</B
|
||||
></TT
|
||||
> The category in which
|
||||
the tool is grouped in the
|
||||
<B
|
||||
CLASS="GUIMENU"
|
||||
>Tools</B
|
||||
> menu and in
|
||||
the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Tool Selection</SPAN
|
||||
> dialog.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The tool name</B
|
||||
></TT
|
||||
>
|
||||
The name of the tool.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>A text description of the tool</B
|
||||
></TT
|
||||
> The
|
||||
description appears in the Tool Selection dialog to provide
|
||||
the user with a description of what the tool does.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
></UL
|
||||
>
|
||||
<P
|
||||
> While only the task and report name are required, it is
|
||||
recommended to provide all five parameters.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="FIGURE"
|
||||
><A
|
||||
NAME="toolsrc">
|
||||
<TABLE
|
||||
BORDER="0"
|
||||
BGCOLOR="#E0E0E0"
|
||||
WIDTH="100%"
|
||||
><TR
|
||||
><TD
|
||||
><PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
> import Plugins
|
||||
|
||||
def tool(database,person,callback):
|
||||
... actual code ...
|
||||
callback(1)
|
||||
|
||||
Plugins.register_tool(
|
||||
task=tool,
|
||||
category="Category",
|
||||
name="Tool Name",
|
||||
description="A text descripition of the tool"
|
||||
)
|
||||
</PRE
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
>
|
||||
<P
|
||||
><B
|
||||
>Figure 3. Sample tool implementation</B
|
||||
></P
|
||||
></DIV
|
||||
>
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x83.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x162.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>Writing Reports</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Import Filters</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
219
gramps2/doc/extending-gramps/C/extending-gramps/x162.html
Normal file
@@ -0,0 +1,219 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Import Filters</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="Writing Tools"
|
||||
HREF="x131.html"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Export Filters"
|
||||
HREF="x177.html"></HEAD
|
||||
><BODY
|
||||
CLASS="SECT1"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x131.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x177.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="writingimportfilters">Writing Import Filters</H1
|
||||
>
|
||||
<P
|
||||
> Import filters are similar to tools, since they are allowed to
|
||||
modify the databases. An import filter is a task that accepts
|
||||
three arguments a database, the filename of the file that
|
||||
is to be imported, and a callback function.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> The database may or may not have data already in it. The import
|
||||
filter cannot assume that data neither already exists nor that the
|
||||
database is empty.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> The callback function is different from the callback function used
|
||||
for tools. The import filter's callback function is used to
|
||||
indicate progress and update the status bar during the import
|
||||
process. The function takes a value between 0.0 and 1.0, where 0.0
|
||||
represents the start of the import and 1.0 represents the
|
||||
completion of the import.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> As with the other plugin types, an import filter must be
|
||||
registered with <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>. This is
|
||||
accomplished by calling the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_import</TT
|
||||
> task. The
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_import</TT
|
||||
> accepts two arguments
|
||||
the function the performs the import and a string
|
||||
providing a brief description. This description is used as the
|
||||
menu entry under the
|
||||
+ + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Import</B
|
||||
>+
|
||||
+ + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="FIGURE"
|
||||
><A
|
||||
NAME="importexample">
|
||||
<TABLE
|
||||
BORDER="0"
|
||||
BGCOLOR="#E0E0E0"
|
||||
WIDTH="100%"
|
||||
><TR
|
||||
><TD
|
||||
><PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
> import Plugins
|
||||
|
||||
def gedcom_import(database,filename,callback):
|
||||
... actual code ...
|
||||
|
||||
Plugins.register_import(gedcom_import,"GEDCOM import")
|
||||
|
||||
</PRE
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
>
|
||||
<P
|
||||
><B
|
||||
>Figure 4. Sample Import Implementation</B
|
||||
></P
|
||||
></DIV
|
||||
>
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x131.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x177.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>Writing Tools</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Export Filters</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
180
gramps2/doc/extending-gramps/C/extending-gramps/x177.html
Normal file
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Export Filters</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="Writing Import Filters"
|
||||
HREF="x162.html"></HEAD
|
||||
><BODY
|
||||
CLASS="SECT1"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x162.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
> </TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="writingexportfilters">Writing Export Filters</H1
|
||||
>
|
||||
<P
|
||||
> Export filters are similar to report generators. They are not
|
||||
allowed to modify the database. An export filter accepts three
|
||||
arguments a database, the filename of the file that is to
|
||||
be written, and a callback function.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> The callback function is indentical from the callback function
|
||||
used for import filters. The export filter's callback function is
|
||||
used to indicate progress and update the status bar during the
|
||||
export process. The function takes a value between 0.0 and 1.0,
|
||||
where 0.0 represents the start of the export and 1.0 represents
|
||||
the completion of the export.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> As with the other plugin types, an export filter must be
|
||||
registered with <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>. This is
|
||||
accomplished by calling the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_export</TT
|
||||
> task. The
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_export</TT
|
||||
> accepts two arguments
|
||||
the function the performs the import and a string
|
||||
providing a brief description. This description is used as the
|
||||
menu entry under the
|
||||
+ + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Export</B
|
||||
>+
|
||||
+ + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="FIGURE"
|
||||
><A
|
||||
NAME="exportexample"> <P
|
||||
><B
|
||||
>Figure 5. </B
|
||||
></P
|
||||
></DIV
|
||||
></DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x162.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>Writing Import Filters</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
276
gramps2/doc/extending-gramps/C/extending-gramps/x57.html
Normal file
@@ -0,0 +1,276 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Filters</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Reports"
|
||||
HREF="x83.html"></HEAD
|
||||
><BODY
|
||||
CLASS="SECT1"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x83.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="writingfilters">Writing Filters</H1
|
||||
>
|
||||
<P
|
||||
> Users can create their own filters and add them to
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>. By adding the filter to the
|
||||
user's private filter directory (<TT
|
||||
CLASS="FILENAME"
|
||||
>~/.gramps/filters</TT
|
||||
>), the filter will
|
||||
be automatically recognized the next time that the program is
|
||||
started.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="createfilter">Creating a filter</H2
|
||||
>
|
||||
<P
|
||||
> Each filter is a class derived from the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Filter.Filter</TT
|
||||
> class. The
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>__init__</TT
|
||||
> task may be overridden, but if so,
|
||||
should call the <TT
|
||||
CLASS="FUNCTION"
|
||||
>__init__</TT
|
||||
> function on the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Filter.Filter</TT
|
||||
> class. The parent class
|
||||
provides the variable <TT
|
||||
CLASS="FUNCTION"
|
||||
>self.text</TT
|
||||
>, which
|
||||
contains the text string passed as the qualifier. This string
|
||||
provides additional information provided by the user. For
|
||||
example, if the filter is used to match names, the qualifier
|
||||
would be used to provide the name that is being compared
|
||||
against.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> All filter classes must define a <TT
|
||||
CLASS="FUNCTION"
|
||||
>match</TT
|
||||
>
|
||||
function. The function takes one argument (other than
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>self</TT
|
||||
>), which is an object of type
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Person</TT
|
||||
> to compare against. The function
|
||||
should return a 1 if the person matches the filter, or a zero if
|
||||
the person does not.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Each filter must be registered, so that
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> knows about it. This is
|
||||
accomplished by calling the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Filter.register_filter</TT
|
||||
> function. This
|
||||
function takes three arguments - the filter class, a
|
||||
description, and flag that indicates if the qualifier string is
|
||||
needed. The description string appears in the pull down
|
||||
interface within <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>, and helps
|
||||
the user choose the appropriate filter. The qualifier flag tells
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> whether or not the filter
|
||||
needs a qualifier string. If this flag is 0,
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> will disable the entry of a
|
||||
qualifier string.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="FIGURE"
|
||||
><A
|
||||
NAME="filtersrc">
|
||||
<TABLE
|
||||
BORDER="0"
|
||||
BGCOLOR="#E0E0E0"
|
||||
WIDTH="100%"
|
||||
><TR
|
||||
><TD
|
||||
><PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
> import Filter
|
||||
import string
|
||||
|
||||
# class definition
|
||||
|
||||
class SubString(Filter.Filter):
|
||||
|
||||
def match(self,person):
|
||||
name = person.getPrimaryName().getName()
|
||||
return string.find(name,self.text) >= 0
|
||||
|
||||
Filter.register_filter(SubString,
|
||||
description="Names that contain a substring",
|
||||
qualifier=1)
|
||||
|
||||
</PRE
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
>
|
||||
<P
|
||||
><B
|
||||
>Figure 1. Sample filter implementation</B
|
||||
></P
|
||||
></DIV
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x83.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>Writing Extentions for gramps</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Reports</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
369
gramps2/doc/extending-gramps/C/extending-gramps/x83.html
Normal file
@@ -0,0 +1,369 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Reports</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="HOME"
|
||||
TITLE="Writing Extentions for gramps"
|
||||
HREF="t1.html"><LINK
|
||||
REL="PREVIOUS"
|
||||
TITLE="Writing Filters"
|
||||
HREF="x57.html"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Tools"
|
||||
HREF="x131.html"></HEAD
|
||||
><BODY
|
||||
CLASS="SECT1"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="NAVHEADER"
|
||||
><TABLE
|
||||
SUMMARY="Header navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TH
|
||||
COLSPAN="3"
|
||||
ALIGN="center"
|
||||
>Writing Extentions for gramps</TH
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="left"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x57.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="80%"
|
||||
ALIGN="center"
|
||||
VALIGN="bottom"
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="10%"
|
||||
ALIGN="right"
|
||||
VALIGN="bottom"
|
||||
><A
|
||||
HREF="x131.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"></DIV
|
||||
><DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="writingreports">Writing Reports</H1
|
||||
>
|
||||
<P
|
||||
> Users can create their own report generators and add them to
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
>. By adding the report generator
|
||||
to the user's private plugin directory (<TT
|
||||
CLASS="FILENAME"
|
||||
>~/.gramps/plugins</TT
|
||||
>), the report
|
||||
generator will be automatically recognized the next time that the
|
||||
program is started.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="createreport">Creating a report generator</H2
|
||||
>
|
||||
<P
|
||||
> Fewer restrictions are made on report generators than on
|
||||
filters. The report generator is passed the current
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> database and the active
|
||||
person. The generator needs to take special care to make sure
|
||||
that it does not alter the database in anyway.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A report generator is a function that takes two arguments
|
||||
a database (of type <TT
|
||||
CLASS="FUNCTION"
|
||||
>RelDataBase</TT
|
||||
>)
|
||||
and the currently selected person (of type
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Person</TT
|
||||
>). When called, this task should
|
||||
generate the desired report.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> This function's implementation can be as simple as generating
|
||||
output without the user's intervention, or it could display a
|
||||
graphical interface to allow the user to select options and
|
||||
customize a report.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> As with filters, the report generator must be registered before
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> will understand it. The report
|
||||
generator is registered using the
|
||||
<TT
|
||||
CLASS="FUNCTION"
|
||||
>Plugins.register_report</TT
|
||||
>. This function
|
||||
takes five arguments.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
></P
|
||||
><UL
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The report generation task</B
|
||||
></TT
|
||||
> This task
|
||||
that generates the report.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The report category</B
|
||||
></TT
|
||||
> The category in
|
||||
which the report is grouped in the
|
||||
<B
|
||||
CLASS="GUIMENU"
|
||||
>Reports</B
|
||||
> menu and
|
||||
in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Report Selection</SPAN
|
||||
> dialog.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>The report name</B
|
||||
></TT
|
||||
>
|
||||
The name of the report.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>A text description of the report</B
|
||||
></TT
|
||||
> The
|
||||
description appears in the report selection tool to provide
|
||||
the user with a description of what the tools does.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
><LI
|
||||
> <P
|
||||
> <TT
|
||||
CLASS="GUILABEL"
|
||||
><B
|
||||
>A graphic logo in XPM format</B
|
||||
></TT
|
||||
> This may
|
||||
be either a path to a filename, or a list of strings
|
||||
containting the XPM data. If a filename is specified, care
|
||||
must be taken to make sure the file location is relocatable
|
||||
and can be determined at runtime.
|
||||
</P
|
||||
>
|
||||
</LI
|
||||
></UL
|
||||
>
|
||||
<P
|
||||
> While only the task and report name are required, it is
|
||||
recommended to provide all five parameters.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="FIGURE"
|
||||
><A
|
||||
NAME="reportsrc">
|
||||
<TABLE
|
||||
BORDER="0"
|
||||
BGCOLOR="#E0E0E0"
|
||||
WIDTH="100%"
|
||||
><TR
|
||||
><TD
|
||||
><PRE
|
||||
CLASS="PROGRAMLISTING"
|
||||
> import Plugins
|
||||
|
||||
def report(database,person):
|
||||
... actual code ...
|
||||
|
||||
Plugins.register_report(
|
||||
task=report,
|
||||
category="Category",
|
||||
name="Report Name",
|
||||
description="A text descripition of the report generator",
|
||||
xpm="%s/myfile.xpm" % os.path.dirname(__file__)
|
||||
)
|
||||
</PRE
|
||||
></TD
|
||||
></TR
|
||||
></TABLE
|
||||
>
|
||||
<P
|
||||
><B
|
||||
>Figure 2. Sample report implementation</B
|
||||
></P
|
||||
></DIV
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="alittlehelp">A little help - Format Interfaces</H2
|
||||
>
|
||||
<P
|
||||
> <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> provides some help with
|
||||
writing reports. Several generic python classes exist that aid
|
||||
in the writing of report generators. These classes provide an
|
||||
abstract interface for a type of document, such as a drawing,
|
||||
word processor document, or a spreadsheet. From these core
|
||||
classes, <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> derives interfaces to
|
||||
various document formats. This means that by coding to the
|
||||
generic word processing class (<TT
|
||||
CLASS="FUNCTION"
|
||||
>TextDoc</TT
|
||||
>), a
|
||||
report generator can instant access to multiple file formats
|
||||
(such as HTML, OpenOffice, and AbiWord).
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> This scheme of deriving a output format from a generic base
|
||||
class also makes it easier to add new formats. Creating a new
|
||||
derivied class targeting a different format (such as
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>KWord</TT
|
||||
> or
|
||||
<TT
|
||||
CLASS="APPLICATION"
|
||||
>LaTeX</TT
|
||||
>) makes it easy for existing
|
||||
report generators to use the new formats.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x57.html"
|
||||
ACCESSKEY="P"
|
||||
><<< Previous</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="t1.html"
|
||||
ACCESSKEY="H"
|
||||
>Home</A
|
||||
></TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x131.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
>Writing Filters</TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Tools</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
345
gramps2/doc/extending-gramps/C/index.html
Normal file
@@ -0,0 +1,345 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<HTML
|
||||
><HEAD
|
||||
><TITLE
|
||||
>Writing Extentions for gramps</TITLE
|
||||
><META
|
||||
NAME="GENERATOR"
|
||||
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
|
||||
"><LINK
|
||||
REL="NEXT"
|
||||
TITLE="Writing Filters"
|
||||
HREF="x57.html"></HEAD
|
||||
><BODY
|
||||
CLASS="ARTICLE"
|
||||
BGCOLOR="#FFFFFF"
|
||||
TEXT="#000000"
|
||||
LINK="#0000FF"
|
||||
VLINK="#840084"
|
||||
ALINK="#0000FF"
|
||||
><DIV
|
||||
CLASS="ARTICLE"
|
||||
><DIV
|
||||
CLASS="TITLEPAGE"
|
||||
><H1
|
||||
CLASS="TITLE"
|
||||
><A
|
||||
NAME="AEN2">Writing Extentions for gramps</H1
|
||||
><P
|
||||
CLASS="COPYRIGHT"
|
||||
><A
|
||||
HREF="ln7.html"
|
||||
>Copyright</A
|
||||
> © 2001 by Donald N. Allingham</P
|
||||
><HR
|
||||
WIDTH="75%"
|
||||
ALIGN="CENTER"
|
||||
COLOR="#000000"
|
||||
SIZE="1"></DIV
|
||||
><DIV
|
||||
CLASS="TOC"
|
||||
><DL
|
||||
><DT
|
||||
><B
|
||||
>Table of Contents</B
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="t1.html#intro"
|
||||
>Introduction</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x57.html"
|
||||
>Writing Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x83.html"
|
||||
>Writing Reports</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x131.html"
|
||||
>Writing Tools</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x162.html"
|
||||
>Writing Import Filters</A
|
||||
></DT
|
||||
><DT
|
||||
><A
|
||||
HREF="x177.html"
|
||||
>Writing Export Filters</A
|
||||
></DT
|
||||
></DL
|
||||
></DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
<DIV
|
||||
CLASS="SECT1"
|
||||
><H1
|
||||
CLASS="SECT1"
|
||||
><A
|
||||
NAME="intro">Introduction</H1
|
||||
>
|
||||
<P
|
||||
> <TT
|
||||
CLASS="APPLICATION"
|
||||
>gramps</TT
|
||||
> was intended from the start to
|
||||
allow the user to extend it through a plugin system. Five types of
|
||||
plugins are supported - filters, reports, tools, import filters,
|
||||
and export filters. In a way, an export filter can be viewed as a
|
||||
special type of report, and an import filter can be viewed as a
|
||||
special type of tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> All plugins are written in the <TT
|
||||
CLASS="APPLICATION"
|
||||
>python</TT
|
||||
>
|
||||
language.
|
||||
</P
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-filter">Filters</H2
|
||||
>
|
||||
<P
|
||||
> A filter is a plugin that be used to temporarily display or hide
|
||||
individuals in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>People View</SPAN
|
||||
>. The
|
||||
filter is the simplest form of plugin, which only needs to
|
||||
determine if a person meets or fails to meet its criteria. It
|
||||
operates on a single person at a time.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Filters should never alter a database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-report">Reports</H2
|
||||
>
|
||||
<P
|
||||
> A report is a plugin that generates output. The output may be in
|
||||
either a interactive, graphical form, or as an output
|
||||
file. Report plugins are passed a reference to the internal
|
||||
database and a reference to the active person, which allows the
|
||||
plugn to operate on a single person, the entire database, or
|
||||
anything in between.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the reportplugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Reports</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Report Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A report should never alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-tool">Tools</H2
|
||||
>
|
||||
<P
|
||||
> A tool is a plugin that alters the database. It may perform
|
||||
something as small changing the case of some text to something
|
||||
as complex as merging redundant individuals. Tools plugins are
|
||||
passed a reference to the internal database, the active person,
|
||||
and a callback function. The callback function is used to notify
|
||||
the main program if it needs to update the display with any
|
||||
modified information.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the tool plugin interface appear in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>Tools</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu and in the <SPAN
|
||||
CLASS="INTERFACE"
|
||||
>Tool Selection</SPAN
|
||||
> dialog
|
||||
box.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> A tool is allowed (and usually expected) to alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-import">Import Filters</H2
|
||||
>
|
||||
<P
|
||||
> An import filter is a plugin that adds information from another
|
||||
source to the database. It is similar to a tool, but is called
|
||||
differently to allow gramps to distinguish it from a tool.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the import filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Import</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An import filter is allowed to modify the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
<DIV
|
||||
CLASS="SECT2"
|
||||
><H2
|
||||
CLASS="SECT2"
|
||||
><A
|
||||
NAME="intro-export">Export Filters</H2
|
||||
>
|
||||
<P
|
||||
> An export filter is a plugin that translates the gramps database
|
||||
into the format expected by another program. Since it generates
|
||||
an output file, it is similar to a report generator. However,
|
||||
its calling syntax is different, so that gramps knows how to
|
||||
distiguish it from a report generator.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> Plugins that conform to the export filter calling syntax appear
|
||||
in the
|
||||
+ + + + + + + + + +<B
|
||||
CLASS="GUIMENU"
|
||||
>File</B
|
||||
>+
|
||||
+ + + + + + + + + + -><B
|
||||
CLASS="GUISUBMENU"
|
||||
>Export</B
|
||||
>+
|
||||
+ + + + + + + +
|
||||
menu.
|
||||
</P
|
||||
>
|
||||
<P
|
||||
> An export filter should not alter the database.
|
||||
</P
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
</DIV
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</DIV
|
||||
><DIV
|
||||
CLASS="NAVFOOTER"
|
||||
><HR
|
||||
ALIGN="LEFT"
|
||||
WIDTH="100%"><TABLE
|
||||
SUMMARY="Footer navigation table"
|
||||
WIDTH="100%"
|
||||
BORDER="0"
|
||||
CELLPADDING="0"
|
||||
CELLSPACING="0"
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
><A
|
||||
HREF="x57.html"
|
||||
ACCESSKEY="N"
|
||||
>Next >>></A
|
||||
></TD
|
||||
></TR
|
||||
><TR
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="left"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="34%"
|
||||
ALIGN="center"
|
||||
VALIGN="top"
|
||||
> </TD
|
||||
><TD
|
||||
WIDTH="33%"
|
||||
ALIGN="right"
|
||||
VALIGN="top"
|
||||
>Writing Filters</TD
|
||||
></TR
|
||||
></TABLE
|
||||
></DIV
|
||||
></BODY
|
||||
></HTML
|
||||
>
|
0
gramps2/doc/extending-gramps/C/omf_timestamp
Normal file
4
gramps2/doc/extending-gramps/Makefile.am
Normal file
@@ -0,0 +1,4 @@
|
||||
# Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = C
|
||||
|
352
gramps2/doc/extending-gramps/Makefile.in
Normal file
@@ -0,0 +1,352 @@
|
||||
# Makefile.in generated by automake 1.6.3 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
# 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@
|
||||
|
||||
# Process this file with automake to produce Makefile.in
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = @program_transform_name@
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
|
||||
EXEEXT = @EXEEXT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
AMTAR = @AMTAR@
|
||||
AWK = @AWK@
|
||||
BINSH = @BINSH@
|
||||
CC = @CC@
|
||||
DEPDIR = @DEPDIR@
|
||||
DISABLE_SCROLLKEEPER = @DISABLE_SCROLLKEEPER@
|
||||
GNOMEHELP = @GNOMEHELP@
|
||||
HAVE_GNOME_CONFIG = @HAVE_GNOME_CONFIG@
|
||||
HAVE_JW = @HAVE_JW@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
JW = @JW@
|
||||
LANGUAGES = @LANGUAGES@
|
||||
LIBS = @LIBS@
|
||||
MOFILES = @MOFILES@
|
||||
MSGFMT = @MSGFMT@
|
||||
P15_INCLUDES = @P15_INCLUDES@
|
||||
P20_INCLUDES = @P20_INCLUDES@
|
||||
P21_INCLUDES = @P21_INCLUDES@
|
||||
P22_INCLUDES = @P22_INCLUDES@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON22 = @PYTHON22@
|
||||
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
|
||||
PYTHON_PLATFORM = @PYTHON_PLATFORM@
|
||||
PYTHON_PREFIX = @PYTHON_PREFIX@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RELEASE = @RELEASE@
|
||||
SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@
|
||||
SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
VERSIONSTRING = @VERSIONSTRING@
|
||||
ZIP = @ZIP@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
pkgpyexecdir = @pkgpyexecdir@
|
||||
pkgpythondir = @pkgpythondir@
|
||||
pyexecdir = @pyexecdir@
|
||||
pythondir = @pythondir@
|
||||
|
||||
SUBDIRS = C
|
||||
subdir = doc/extending-gramps
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
|
||||
uninstall-info-recursive all-recursive install-data-recursive \
|
||||
install-exec-recursive installdirs-recursive install-recursive \
|
||||
uninstall-recursive check-recursive installcheck-recursive
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/extending-gramps/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@list='$(DISTFILES)'; for file in $$list; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
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
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(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-recursive
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-recursive distclean distclean-generic \
|
||||
distclean-recursive distclean-tags distdir dvi dvi-am \
|
||||
dvi-recursive info info-am info-recursive install install-am \
|
||||
install-data install-data-am install-data-recursive \
|
||||
install-exec install-exec-am install-exec-recursive \
|
||||
install-info install-info-am install-info-recursive install-man \
|
||||
install-recursive install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am installdirs-recursive \
|
||||
maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-recursive tags tags-recursive uninstall \
|
||||
uninstall-am uninstall-info-am uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
|
||||
# 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:
|