# -*- coding: utf-8 -*- # # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2009 Brian G. Matherly # Copyright (C) 2010 Jakim Friant # Copyright (C) 2011 Vlada Perić # Copyright (C) 2011 Matt Keenan # Copyright (C) 2011 Tim G L Lyons # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # $Id$ """ Narrator class for use by plugins. """ #------------------------------------------------------------------------ # # GRAMPS modules # #------------------------------------------------------------------------ from gen.lib.date import Date from gen.lib.person import Person from gen.lib.eventroletype import EventRoleType from gen.lib.eventtype import EventType from gen.lib.familyreltype import FamilyRelType from gen.display.name import displayer as _nd import Utils from gen.plug.report import utils as ReportUtils from libtranslate import Translator #------------------------------------------------------------------------- # # Private constants # #------------------------------------------------------------------------- # In string arrays, the first strings should include the name, the second # strings should not include the name. _NAME_INDEX_INCLUDE_NAME = 0 _NAME_INDEX_EXCLUDE_NAME = 1 # In string arrays, the first strings should not include age. # The following strings should include year, month and day units. # And support format with precision (see gen/lib/date.py). _AGE_INDEX_NO_AGE = 0 _AGE_INDEX = 1 #------------------------------------------------------------------------- # # Private functions # #------------------------------------------------------------------------- def _get_empty_endnote_numbers(obj): """ Empty stab function for when endnotes are not needed """ return "" def _(message): return message #------------------------------------------------------------------------ # # Born strings # #------------------------------------------------------------------------ born_full_date_with_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born on %(birth_date)s in %(birth_place)s."), Person.MALE : _("%(male_name)s was born on %(birth_date)s in %(birth_place)s."), Person.FEMALE : _("%(female_name)s was born on %(birth_date)s in %(birth_place)s."), }, { Person.UNKNOWN : _("This person was born on %(birth_date)s in %(birth_place)s."), Person.MALE : _("He was born on %(birth_date)s in %(birth_place)s."), Person.FEMALE : _("She was born on %(birth_date)s in %(birth_place)s."), }, _("Born %(birth_date)s in %(birth_place)s."), ] born_modified_date_with_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born %(modified_date)s in %(birth_place)s."), Person.MALE : _("%(male_name)s was born %(modified_date)s in %(birth_place)s."), Person.FEMALE : _("%(female_name)s was born %(modified_date)s in %(birth_place)s."), }, { Person.UNKNOWN : _("This person was born %(modified_date)s in %(birth_place)s."), Person.MALE : _("He was born %(modified_date)s in %(birth_place)s."), Person.FEMALE : _("She was born %(modified_date)s in %(birth_place)s."), }, _("Born %(modified_date)s in %(birth_place)s."), ] born_full_date_no_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born on %(birth_date)s."), Person.MALE : _("%(male_name)s was born on %(birth_date)s."), Person.FEMALE : _("%(female_name)s was born on %(birth_date)s."), }, { Person.UNKNOWN : _("This person was born on %(birth_date)s."), Person.MALE : _("He was born on %(birth_date)s."), Person.FEMALE : _("She was born on %(birth_date)s."), }, _("Born %(birth_date)s."), ] born_modified_date_no_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born %(modified_date)s."), Person.MALE : _("%(male_name)s was born %(modified_date)s."), Person.FEMALE : _("%(female_name)s was born %(modified_date)s."), }, { Person.UNKNOWN : _("This person was born %(modified_date)s."), Person.MALE : _("He was born %(modified_date)s."), Person.FEMALE : _("She was born %(modified_date)s."), }, _("Born %(modified_date)s."), ] born_partial_date_with_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born in %(month_year)s in %(birth_place)s."), Person.MALE : _("%(male_name)s was born in %(month_year)s in %(birth_place)s."), Person.FEMALE : _("%(female_name)s was born in %(month_year)s in %(birth_place)s."), }, { Person.UNKNOWN : _("This person was born in %(month_year)s in %(birth_place)s."), Person.MALE : _("He was born in %(month_year)s in %(birth_place)s."), Person.FEMALE : _("She was born in %(month_year)s in %(birth_place)s."), }, _("Born %(month_year)s in %(birth_place)s."), ] born_partial_date_no_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born in %(month_year)s."), Person.MALE : _("%(male_name)s was born in %(month_year)s."), Person.FEMALE : _("%(female_name)s was born in %(month_year)s."), }, { Person.UNKNOWN : _("This person was born in %(month_year)s."), Person.MALE : _("He was born in %(month_year)s."), Person.FEMALE : _("She was born in %(month_year)s."), }, _("Born %(month_year)s."), ] born_no_date_with_place = [ { Person.UNKNOWN : _("%(unknown_gender_name)s was born in %(birth_place)s."), Person.MALE : _("%(male_name)s was born in %(birth_place)s."), Person.FEMALE : _("%(female_name)s was born in %(birth_place)s."), }, { Person.UNKNOWN : _("This person was born in %(birth_place)s."), Person.MALE : _("He was born in %(birth_place)s."), Person.FEMALE : _("She was born in %(birth_place)s."), }, _("Born in %(birth_place)s."), ] #------------------------------------------------------------------------ # # Died strings # #------------------------------------------------------------------------ died_full_date_with_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died on %(death_date)s in %(death_place)s."), _("%(unknown_gender_name)s died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died on %(death_date)s in %(death_place)s."), _("%(male_name)s died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died on %(death_date)s in %(death_place)s."), _("%(female_name)s died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died on %(death_date)s in %(death_place)s."), _("This person died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("He died on %(death_date)s in %(death_place)s."), _("He died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died on %(death_date)s in %(death_place)s."), _("She died on %(death_date)s in %(death_place)s at the age of %(age)s."), ], }, [ _("Died %(death_date)s in %(death_place)s."), _("Died %(death_date)s in %(death_place)s (%(age)s)."), ], ] died_modified_date_with_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died %(death_date)s in %(death_place)s."), _("%(unknown_gender_name)s died %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died %(death_date)s in %(death_place)s."), _("%(male_name)s died %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died %(death_date)s in %(death_place)s."), _("%(female_name)s died %(death_date)s in %(death_place)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died %(death_date)s in %(death_place)s."), _("This person died %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("He died %(death_date)s in %(death_place)s."), _("He died %(death_date)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died %(death_date)s in %(death_place)s."), _("She died %(death_date)s in %(death_place)s at the age of %(age)s."), ], }, [ _("Died %(death_date)s in %(death_place)s."), _("Died %(death_date)s in %(death_place)s (%(age)s)."), ], ] died_full_date_no_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died on %(death_date)s."), _("%(unknown_gender_name)s died on %(death_date)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died on %(death_date)s."), _("%(male_name)s died on %(death_date)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died on %(death_date)s."), _("%(female_name)s died on %(death_date)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died on %(death_date)s."), _("This person died on %(death_date)s at the age of %(age)s."), ], Person.MALE : [ _("He died on %(death_date)s."), _("He died on %(death_date)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died on %(death_date)s."), _("She died on %(death_date)s at the age of %(age)s."), ], }, [ _("Died %(death_date)s."), _("Died %(death_date)s (%(age)s)."), ], ] died_modified_date_no_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died %(death_date)s."), _("%(unknown_gender_name)s died %(death_date)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died %(death_date)s."), _("%(male_name)s died %(death_date)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died %(death_date)s."), _("%(female_name)s died %(death_date)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died %(death_date)s."), _("This person died %(death_date)s at the age of %(age)s."), ], Person.MALE : [ _("He died %(death_date)s."), _("He died %(death_date)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died %(death_date)s."), _("She died %(death_date)s at the age of %(age)s."), ], }, [ _("Died %(death_date)s."), _("Died %(death_date)s (%(age)s)."), ], ] died_partial_date_with_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died in %(month_year)s in %(death_place)s."), _("%(unknown_gender_name)s died in %(month_year)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died in %(month_year)s in %(death_place)s."), _("%(male_name)s died in %(month_year)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died in %(month_year)s in %(death_place)s."), _("%(female_name)s died in %(month_year)s in %(death_place)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died in %(month_year)s in %(death_place)s."), _("This person died in %(month_year)s in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("He died in %(month_year)s in %(death_place)s."), _("He died in %(month_year)s in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died in %(month_year)s in %(death_place)s."), _("She died in %(month_year)s in %(death_place)s at the age of %(age)s."), ] }, [ _("Died %(month_year)s in %(death_place)s."), _("Died %(month_year)s in %(death_place)s (%(age)s)."), ], ] died_partial_date_no_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died in %(month_year)s."), _("%(unknown_gender_name)s died in %(month_year)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died in %(month_year)s."), _("%(male_name)s died in %(month_year)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died in %(month_year)s."), _("%(female_name)s died in %(month_year)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died in %(month_year)s."), _("This person died in %(month_year)s at the age of %(age)s."), ], Person.MALE : [ _("He died in %(month_year)s."), _("He died in %(month_year)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died in %(month_year)s."), _("She died in %(month_year)s at the age of %(age)s."), ], }, [ _("Died %(month_year)s."), _("Died %(month_year)s (%(age)s)."), ], ] died_no_date_with_place = [ { Person.UNKNOWN : [ _("%(unknown_gender_name)s died in %(death_place)s."), _("%(unknown_gender_name)s died in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("%(male_name)s died in %(death_place)s."), _("%(male_name)s died in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("%(female_name)s died in %(death_place)s."), _("%(female_name)s died in %(death_place)s at the age of %(age)s."), ], }, { Person.UNKNOWN : [ _("This person died in %(death_place)s."), _("This person died in %(death_place)s at the age of %(age)s."), ], Person.MALE : [ _("He died in %(death_place)s."), _("He died in %(death_place)s at the age of %(age)s."), ], Person.FEMALE : [ _("She died in %(death_place)s."), _("She died in %(death_place)s at the age of %(age)s."), ], }, [ _("Died in %(death_place)s."), _("Died in %(death_place)s (%(age)s)."), ], ] died_no_date_no_place = [ { Person.UNKNOWN : [ "", _("%(unknown_gender_name)s died at the age of %(age)s."), ], Person.MALE : [ "", _("%(male_name)s died at the age of %(age)s."), ], Person.FEMALE : [ "", _("%(female_name)s died at the age of %(age)s."), ], }, { Person.UNKNOWN : [ "", _("This person died at the age of %(age)s."), ], Person.MALE : [ "", _("He died at the age of %(age)s."), ], Person.FEMALE : [ "", _("She died at the age of %(age)s."), ], }, [ "", _("Died (%(age)s)."), ], ] #------------------------------------------------------------------------ # # Buried strings # #------------------------------------------------------------------------ buried_full_date_place = { Person.MALE: [ _("%(male_name)s was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), _("He was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), _("She was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), _("This person was buried on %(burial_date)s in %(burial_place)s%(endnotes)s."), ], 'succinct' : _("Buried %(burial_date)s in %(burial_place)s%(endnotes)s."), } buried_full_date_no_place = { Person.MALE: [ _("%(male_name)s was buried on %(burial_date)s%(endnotes)s."), _("He was buried on %(burial_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried on %(burial_date)s%(endnotes)s."), _("She was buried on %(burial_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried on %(burial_date)s%(endnotes)s."), _("This person was buried on %(burial_date)s%(endnotes)s."), ], 'succinct' : _("Buried %(burial_date)s%(endnotes)s."), } buried_partial_date_place = { Person.MALE: [ _("%(male_name)s was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), _("He was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), _("She was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), _("This person was buried in %(month_year)s in %(burial_place)s%(endnotes)s."), ], 'succinct' : _("Buried %(month_year)s in %(burial_place)s%(endnotes)s."), } buried_partial_date_no_place = { Person.MALE: [ _("%(male_name)s was buried in %(month_year)s%(endnotes)s."), _("He was buried in %(month_year)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried in %(month_year)s%(endnotes)s."), _("She was buried in %(month_year)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried in %(month_year)s%(endnotes)s."), _("This person was buried in %(month_year)s%(endnotes)s."), ], 'succinct' : _("Buried %(month_year)s%(endnotes)s."), } buried_modified_date_place = { Person.MALE: [ _("%(male_name)s was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), _("He was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), _("She was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), _("This person was buried %(modified_date)s in %(burial_place)s%(endnotes)s."), ], 'succinct' : _("Buried %(modified_date)s in %(burial_place)s%(endnotes)s."), } buried_modified_date_no_place = { Person.MALE: [ _("%(male_name)s was buried %(modified_date)s%(endnotes)s."), _("He was buried %(modified_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was buried %(modified_date)s%(endnotes)s."), _("She was buried %(modified_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was buried %(modified_date)s%(endnotes)s."), _("This person was buried %(modified_date)s%(endnotes)s."), ], 'succinct' : _("Buried %(modified_date)s%(endnotes)s."), } buried_no_date_place = { Person.MALE : [ _("%(male_name)s was buried in %(burial_place)s%(endnotes)s."), _("He was buried in %(burial_place)s%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was buried in %(burial_place)s%(endnotes)s."), _("She was buried in %(burial_place)s%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was buried in %(burial_place)s%(endnotes)s."), _("This person was buried in %(burial_place)s%(endnotes)s."), ], 'succinct' : _("Buried in %(burial_place)s%(endnotes)s."), } buried_no_date_no_place = { Person.MALE : [ _("%(male_name)s was buried%(endnotes)s."), _("He was buried%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was buried%(endnotes)s."), _("She was buried%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was buried%(endnotes)s."), _("This person was buried%(endnotes)s."), ], 'succinct' : _("Buried%(endnotes)s."), } #------------------------------------------------------------------------ # # Baptised strings # #------------------------------------------------------------------------ baptised_full_date_place = { Person.MALE: [ _("%(male_name)s was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), _("He was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), _("She was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), _("This person was baptised on %(baptism_date)s in %(baptism_place)s%(endnotes)s."), ], 'succinct' : _("Baptised %(baptism_date)s in %(baptism_place)s%(endnotes)s."), } baptised_full_date_no_place = { Person.MALE: [ _("%(male_name)s was baptised on %(baptism_date)s%(endnotes)s."), _("He was baptised on %(baptism_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised on %(baptism_date)s%(endnotes)s."), _("She was baptised on %(baptism_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised on %(baptism_date)s%(endnotes)s."), _("This person was baptised on %(baptism_date)s%(endnotes)s."), ], 'succinct' : _("Baptised %(baptism_date)s%(endnotes)s.") } baptised_partial_date_place = { Person.MALE: [ _("%(male_name)s was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), _("He was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), _("She was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), _("This person was baptised in %(month_year)s in %(baptism_place)s%(endnotes)s."), ], 'succinct' : _("Baptised %(month_year)s in %(baptism_place)s%(endnotes)s."), } baptised_partial_date_no_place = { Person.MALE: [ _("%(male_name)s was baptised in %(month_year)s%(endnotes)s."), _("He was baptised in %(month_year)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised in %(month_year)s%(endnotes)s."), _("She was baptised in %(month_year)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised in %(month_year)s%(endnotes)s."), _("This person was baptised in %(month_year)s%(endnotes)s."), ], 'succinct' : _("Baptised %(month_year)s%(endnotes)s."), } baptised_modified_date_place = { Person.MALE: [ _("%(male_name)s was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), _("He was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), _("She was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), _("This person was baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), ], 'succinct' : _("Baptised %(modified_date)s in %(baptism_place)s%(endnotes)s."), } baptised_modified_date_no_place = { Person.MALE: [ _("%(male_name)s was baptised %(modified_date)s%(endnotes)s."), _("He was baptised %(modified_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was baptised %(modified_date)s%(endnotes)s."), _("She was baptised %(modified_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was baptised %(modified_date)s%(endnotes)s."), _("This person was baptised %(modified_date)s%(endnotes)s."), ], 'succinct' : _("Baptised %(modified_date)s%(endnotes)s."), } baptised_no_date_place = { Person.MALE : [ _("%(male_name)s was baptised in %(baptism_place)s%(endnotes)s."), _("He was baptised in %(baptism_place)s%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was baptised in %(baptism_place)s%(endnotes)s."), _("She was baptised in %(baptism_place)s%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was baptised in %(baptism_place)s%(endnotes)s."), _("This person was baptised in %(baptism_place)s%(endnotes)s."), ], 'succinct' : _("Baptised in %(baptism_place)s%(endnotes)s."), } baptised_no_date_no_place = { Person.MALE : [ _("%(male_name)s was baptised%(endnotes)s."), _("He was baptised%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was baptised%(endnotes)s."), _("She was baptised%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was baptised%(endnotes)s."), _("This person was baptised%(endnotes)s."), ], 'succinct' : _("Baptised%(endnotes)s."), } #------------------------------------------------------------------------ # # Christened strings # #------------------------------------------------------------------------ christened_full_date_place = { Person.MALE: [ _("%(male_name)s was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), _("He was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), _("She was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), _("This person was christened on %(christening_date)s in %(christening_place)s%(endnotes)s."), ], 'succinct' : _("Christened %(christening_date)s in %(christening_place)s%(endnotes)s."), } christened_full_date_no_place = { Person.MALE: [ _("%(male_name)s was christened on %(christening_date)s%(endnotes)s."), _("He was christened on %(christening_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened on %(christening_date)s%(endnotes)s."), _("She was christened on %(christening_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened on %(christening_date)s%(endnotes)s."), _("This person was christened on %(christening_date)s%(endnotes)s."), ], 'succinct' : _("Christened %(christening_date)s%(endnotes)s.") } christened_partial_date_place = { Person.MALE: [ _("%(male_name)s was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), _("He was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), _("She was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), _("This person was christened in %(month_year)s in %(christening_place)s%(endnotes)s."), ], 'succinct' : _("Christened %(month_year)s in %(christening_place)s%(endnotes)s."), } christened_partial_date_no_place = { Person.MALE: [ _("%(male_name)s was christened in %(month_year)s%(endnotes)s."), _("He was christened in %(month_year)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened in %(month_year)s%(endnotes)s."), _("She was christened in %(month_year)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened in %(month_year)s%(endnotes)s."), _("This person was christened in %(month_year)s%(endnotes)s."), ], 'succinct' : _("Christened %(month_year)s%(endnotes)s."), } christened_modified_date_place = { Person.MALE: [ _("%(male_name)s was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), _("He was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), _("She was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), _("This person was christened %(modified_date)s in %(christening_place)s%(endnotes)s."), ], 'succinct' : _("Christened %(modified_date)s in %(christening_place)s%(endnotes)s."), } christened_modified_date_no_place = { Person.MALE: [ _("%(male_name)s was christened %(modified_date)s%(endnotes)s."), _("He was christened %(modified_date)s%(endnotes)s."), ], Person.FEMALE: [ _("%(female_name)s was christened %(modified_date)s%(endnotes)s."), _("She was christened %(modified_date)s%(endnotes)s."), ], Person.UNKNOWN: [ _("%(unknown_gender_name)s was christened %(modified_date)s%(endnotes)s."), _("This person was christened %(modified_date)s%(endnotes)s."), ], 'succinct' : _("Christened %(modified_date)s%(endnotes)s."), } christened_no_date_place = { Person.MALE : [ _("%(male_name)s was christened in %(christening_place)s%(endnotes)s."), _("He was christened in %(christening_place)s%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was christened in %(christening_place)s%(endnotes)s."), _("She was christened in %(christening_place)s%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was christened in %(christening_place)s%(endnotes)s."), _("This person was christened in %(christening_place)s%(endnotes)s."), ], 'succinct' : _("Christened in %(christening_place)s%(endnotes)s."), } christened_no_date_no_place = { Person.MALE : [ _("%(male_name)s was christened%(endnotes)s."), _("He was christened%(endnotes)s."), ], Person.FEMALE : [ _("%(female_name)s was christened%(endnotes)s."), _("She was christened%(endnotes)s."), ], Person.UNKNOWN : [ _("%(unknown_gender_name)s was christened%(endnotes)s."), _("This person was christened%(endnotes)s."), ], 'succinct' : _("Christened%(endnotes)s."), } #------------------------------------------------------------------------- # # child to parent relationships # #------------------------------------------------------------------------- child_father_mother = { Person.UNKNOWN: [ [ _("%(male_name)s is the child of %(father)s and %(mother)s."), _("%(male_name)s was the child of %(father)s and %(mother)s."), ], [ _("This person is the child of %(father)s and %(mother)s."), _("This person was the child of %(father)s and %(mother)s."), ], _("Child of %(father)s and %(mother)s."), ], Person.MALE : [ [ _("%(male_name)s is the son of %(father)s and %(mother)s."), _("%(male_name)s was the son of %(father)s and %(mother)s."), ], [ _("He is the son of %(father)s and %(mother)s."), _("He was the son of %(father)s and %(mother)s."), ], _("Son of %(father)s and %(mother)s."), ], Person.FEMALE : [ [ _("%(female_name)s is the daughter of %(father)s and %(mother)s."), _("%(female_name)s was the daughter of %(father)s and %(mother)s."), ], [ _("She is the daughter of %(father)s and %(mother)s."), _("She was the daughter of %(father)s and %(mother)s."), ], _("Daughter of %(father)s and %(mother)s."), ] } child_father = { Person.UNKNOWN : [ [ _("%(male_name)s is the child of %(father)s."), _("%(male_name)s was the child of %(father)s."), ], [ _("This person is the child of %(father)s."), _("This person was the child of %(father)s."), ], _("Child of %(father)s."), ], Person.MALE : [ [ _("%(male_name)s is the son of %(father)s."), _("%(male_name)s was the son of %(father)s."), ], [ _("He is the son of %(father)s."), _("He was the son of %(father)s."), ], _("Son of %(father)s."), ], Person.FEMALE : [ [ _("%(female_name)s is the daughter of %(father)s."), _("%(female_name)s was the daughter of %(father)s."), ], [ _("She is the daughter of %(father)s."), _("She was the daughter of %(father)s."), ], _("Daughter of %(father)s."), ], } child_mother = { Person.UNKNOWN : [ [ _("%(male_name)s is the child of %(mother)s."), _("%(male_name)s was the child of %(mother)s."), ], [ _("This person is the child of %(mother)s."), _("This person was the child of %(mother)s."), ], _("Child of %(mother)s."), ], Person.MALE : [ [ _("%(male_name)s is the son of %(mother)s."), _("%(male_name)s was the son of %(mother)s."), ], [ _("He is the son of %(mother)s."), _("He was the son of %(mother)s."), ], _("Son of %(mother)s."), ], Person.FEMALE : [ [ _("%(female_name)s is the daughter of %(mother)s."), _("%(female_name)s was the daughter of %(mother)s."), ], [ _("She is the daughter of %(mother)s."), _("She was the daughter of %(mother)s."), ], _("Daughter of %(mother)s."), ], } #------------------------------------------------------------------------ # # Marriage strings - Relationship type MARRIED # #------------------------------------------------------------------------ marriage_first_date_place = { Person.UNKNOWN : [ _('This person married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Married %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Married %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } marriage_also_date_place = { Person.UNKNOWN : [ _('This person also married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person also married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person also married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He also married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He also married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He also married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also married %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She also married %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She also married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Also married %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Also married %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Also married %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } marriage_first_date = { Person.UNKNOWN : [ _('This person married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person married %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person married %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He married %(spouse)s on %(full_date)s%(endnotes)s.'), _('He married %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She married %(spouse)s on %(full_date)s%(endnotes)s.'), _('She married %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Married %(spouse)s %(partial_date)s%(endnotes)s.'), _('Married %(spouse)s %(full_date)s%(endnotes)s.'), _('Married %(spouse)s %(modified_date)s%(endnotes)s.'), ], } marriage_also_date = { Person.UNKNOWN : [ _('This person also married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person also married %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person also married %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He also married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He also married %(spouse)s on %(full_date)s%(endnotes)s.'), _('He also married %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also married %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She also married %(spouse)s on %(full_date)s%(endnotes)s.'), _('She also married %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Also married %(spouse)s %(partial_date)s%(endnotes)s.'), _('Also married %(spouse)s %(full_date)s%(endnotes)s.'), _('Also married %(spouse)s %(modified_date)s%(endnotes)s.'), ], } marriage_first_place = { Person.UNKNOWN : _('This person married %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He married %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She married %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Married %(spouse)s in %(place)s%(endnotes)s.'), } marriage_also_place = { Person.UNKNOWN : _('This person also married %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He also married %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She also married %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Also married %(spouse)s in %(place)s%(endnotes)s.'), } marriage_first_only = { Person.UNKNOWN : _('This person married %(spouse)s%(endnotes)s.'), Person.MALE : _('He married %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She married %(spouse)s%(endnotes)s.'), 'succinct' : _('Married %(spouse)s%(endnotes)s.'), } marriage_also_only = { Person.UNKNOWN : _('This person also married %(spouse)s%(endnotes)s.'), Person.MALE : _('He also married %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She also married %(spouse)s%(endnotes)s.'), 'succinct' : _('Also married %(spouse)s%(endnotes)s.'), } #------------------------------------------------------------------------ # # Marriage strings - Relationship type UNMARRIED # #------------------------------------------------------------------------ unmarried_first_date_place = { Person.UNKNOWN : [ _('This person had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Unmarried relationship with %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } unmarried_also_date_place = { Person.UNKNOWN : [ _('This person also had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person also had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person also had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He also had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He also had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He also had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also had an unmarried relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She also had an unmarried relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She also had an unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Unmarried relationship with %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } unmarried_first_date = { Person.UNKNOWN : [ _('This person had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('He had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('She had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Unmarried relationship with %(spouse)s %(partial_date)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(full_date)s%(endnotes)s.'), _('Unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], } unmarried_also_date = { Person.UNKNOWN : [ _('This person also had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person also had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person also had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He also had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He also had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('He also had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also had an unmarried relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She also had an unmarried relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('She also had an unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Also unmarried relationship with %(spouse)s %(partial_date)s%(endnotes)s.'), _('Also unmarried relationship with %(spouse)s %(full_date)s%(endnotes)s.'), _('Also unmarried relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], } unmarried_first_place = { Person.UNKNOWN : _('This person had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), } unmarried_also_place = { Person.UNKNOWN : _('This person also had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He also had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She also had an unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Unmarried relationship with %(spouse)s in %(place)s%(endnotes)s.'), } unmarried_first_only = { Person.UNKNOWN : _('This person had an unmarried relationship with %(spouse)s%(endnotes)s.'), Person.MALE : _('He had an unmarried relationship with %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She had an unmarried relationship with %(spouse)s%(endnotes)s.'), 'succinct' : _('Unmarried relationship with %(spouse)s%(endnotes)s.'), } unmarried_also_only = { Person.UNKNOWN : _('This person also had an unmarried relationship with %(spouse)s%(endnotes)s.'), Person.MALE : _('He also had an unmarried relationship with %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She also had an unmarried relationship with %(spouse)s%(endnotes)s.'), 'succinct' : _('Unmarried relationship with %(spouse)s%(endnotes)s.'), } #------------------------------------------------------------------------ # # Marriage strings - Relationship type other than MARRIED or UNMARRIED # i.e. CIVIL UNION or CUSTOM # #------------------------------------------------------------------------ relationship_first_date_place = { Person.UNKNOWN : [ _('This person had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Relationship with %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Relationship with %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } relationship_also_date_place = { Person.UNKNOWN : [ _('This person also had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('This person also had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('This person also had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.MALE : [ _('He also had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('He also had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('He also had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also had a relationship with %(spouse)s in %(partial_date)s in %(place)s%(endnotes)s.'), _('She also had a relationship with %(spouse)s on %(full_date)s in %(place)s%(endnotes)s.'), _('She also had a relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], 'succinct' : [ _('Also relationship with %(spouse)s %(partial_date)s in %(place)s%(endnotes)s.'), _('Also relationship with %(spouse)s %(full_date)s in %(place)s%(endnotes)s.'), _('Also relationship with %(spouse)s %(modified_date)s in %(place)s%(endnotes)s.'), ], } relationship_first_date = { Person.UNKNOWN : [ _('This person had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('He had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('She had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Relationship with %(spouse)s %(partial_date)s%(endnotes)s.'), _('Relationship with %(spouse)s %(full_date)s%(endnotes)s.'), _('Relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], } relationship_also_date = { Person.UNKNOWN : [ _('This person also had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('This person also had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('This person also had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.MALE : [ _('He also had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('He also had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('He also had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], Person.FEMALE : [ _('She also had a relationship with %(spouse)s in %(partial_date)s%(endnotes)s.'), _('She also had a relationship with %(spouse)s on %(full_date)s%(endnotes)s.'), _('She also had a relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], 'succinct' : [ _('Also relationship with %(spouse)s %(partial_date)s%(endnotes)s.'), _('Also relationship with %(spouse)s %(full_date)s%(endnotes)s.'), _('Also relationship with %(spouse)s %(modified_date)s%(endnotes)s.'), ], } relationship_first_place = { Person.UNKNOWN : _('This person had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Relationship with %(spouse)s in %(place)s%(endnotes)s.'), } relationship_also_place = { Person.UNKNOWN : _('This person also had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.MALE : _('He also had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), Person.FEMALE : _('She also had a relationship with %(spouse)s in %(place)s%(endnotes)s.'), 'succinct' : _('Also relationship with %(spouse)s in %(place)s%(endnotes)s.'), } relationship_first_only = { Person.UNKNOWN : _('This person had a relationship with %(spouse)s%(endnotes)s.'), Person.MALE : _('He had a relationship with %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She had a relationship with %(spouse)s%(endnotes)s.'), 'succinct' : _('Relationship with %(spouse)s%(endnotes)s.'), } relationship_also_only = { Person.UNKNOWN : _('This person also had a relationship with %(spouse)s%(endnotes)s.'), Person.MALE : _('He also had a relationship with %(spouse)s%(endnotes)s.'), Person.FEMALE : _('She also had a relationship with %(spouse)s%(endnotes)s.'), 'succinct' : _('Also relationship with %(spouse)s%(endnotes)s.'), } #------------------------------------------------------------------------ # # Narrator # #------------------------------------------------------------------------ class Narrator(object): """ Narrator is a class which provides narration text. """ def __init__(self, dbase, verbose=True, use_call_name=False,use_fulldate=False, empty_date="", empty_place="", translator=None, get_endnote_numbers=_get_empty_endnote_numbers): """ Initialize the narrator class. :param dbase: The database that contains the data to be narrated. :type dbase: :class:`~gen.db.base,DbBase` :param verbose: Specifies whether complete sentences should be used. :type verbose: bool :param use_call_name: Specifies whether a person's call name should be used for the first name. :type use_call_name: bool :param empty_date: String to use when a date is not known. :type empty_date: str :param empty_place: String to use when a place is not known. :type empty_place: str :param translate_text: A function that returns a translated message string given a message id (similar to gettext). :type translate_text: callable(str) :param get_endnote_numbers: A callable to use for getting a string representing endnote numbers. The function takes a :class:`~gen.lib.CitationBase` instance. A typical return value from get_endnote_numbers() would be "2a" and would represent a reference to an endnote in a document. :type get_endnote_numbers: callable( :class:`~gen.lib.CitationBase` ) """ self.__db = dbase self.__verbose = verbose self.__use_call = use_call_name self.__use_fulldate = use_fulldate self.__empty_date = empty_date self.__empty_place = empty_place self.__get_endnote_numbers = get_endnote_numbers self.__person = None self.__first_name = "" self.__first_name_used = False if translator is None: translator = Translator(Translator.DEFAULT_TRANSLATION_STR) self.__translate_text = translator.gettext self.__get_date = translator.get_date def set_subject(self, person): """ Start a new story about this person. The person's first name will be used in the first sentence. A pronoun will be used as the subject for each subsequent sentence. :param person: The person to be the subject of the story. :type dbase: :class:`~gen.lib.person,Person` """ self.__person = person if self.__use_call and person.get_primary_name().get_call_name(): self.__first_name = person.get_primary_name().get_call_name() else: self.__first_name = person.get_primary_name().get_first_name() self.__first_name_used = False def get_born_string(self): """ Get a string narrating the birth of the subject. Example sentences: Person was born on Date. Person was born on Date in Place. Person was born in Place. '' :returns: A sentence about the subject's birth. :rtype: unicode """ if not self.__first_name_used: name_index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: name_index = _NAME_INDEX_EXCLUDE_NAME text = "" bplace = self.__empty_place bdate = self.__empty_date birth_event = None bdate_full = False bdate_mod = False birth_ref = self.__person.get_birth_ref() if birth_ref and birth_ref.ref: birth_event = self.__db.get_event_from_handle(birth_ref.ref) if birth_event: if self.__use_fulldate : bdate = self.__get_date(birth_event.get_date_object()) else: bdate = birth_event.get_date_object().get_year() bplace_handle = birth_event.get_place_handle() if bplace_handle: place = self.__db.get_place_from_handle(bplace_handle) bplace = place.get_title() bdate_obj = birth_event.get_date_object() bdate_full = bdate_obj and bdate_obj.get_day_valid() bdate_mod = bdate_obj and \ bdate_obj.get_modifier() != Date.MOD_NONE value_map = { 'name' : self.__first_name, 'male_name' : self.__first_name, 'unknown_gender_name' : self.__first_name, 'female_name' : self.__first_name, 'birth_date' : bdate, 'birth_place' : bplace, 'month_year' : bdate, 'modified_date' : bdate, } gender = self.__person.get_gender() if bdate: if bdate_mod: if bplace and self.__verbose: text = born_modified_date_with_place[name_index][gender] elif bplace: text = born_modified_date_with_place[2] elif self.__verbose: text = born_modified_date_no_place[name_index][gender] else: text = born_modified_date_no_place[2] elif bdate_full: if bplace and self.__verbose: text = born_full_date_with_place[name_index][gender] elif bplace: text = born_full_date_with_place[2] elif self.__verbose: text = born_full_date_no_place[name_index][gender] else: text = born_full_date_no_place[2] else: if bplace and self.__verbose: text = born_partial_date_with_place[name_index][gender] elif bplace: text = born_partial_date_with_place[2] elif self.__verbose: text = born_partial_date_no_place[name_index][gender] else: text = born_partial_date_no_place[2] else: if bplace and self.__verbose: text = born_no_date_with_place[name_index][gender] elif bplace: text = born_no_date_with_place[2] else: text = "" if text: text = self.__translate_text(text) % value_map if birth_event: text = text.rstrip(". ") text = text + self.__get_endnote_numbers(birth_event) + ". " text = text + " " return text def get_died_string(self, include_age=False): """ Get a string narrating the death of the subject. Example sentences: Person died on Date Person died on Date at the age of 'age' Person died on Date in Place Person died on Date in Place at the age of 'age' Person died in Place Person died in Place at the age of 'age' Person died '' where 'age' string is an advanced age calculation. :returns: A sentence about the subject's death. :rtype: unicode """ if not self.__first_name_used: name_index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: name_index = _NAME_INDEX_EXCLUDE_NAME text = "" dplace = self.__empty_place ddate = self.__empty_date death_event = None ddate_full = False ddate_mod = False death_ref = self.__person.get_death_ref() if death_ref and death_ref.ref: death_event = self.__db.get_event_from_handle(death_ref.ref) if death_event: if self.__use_fulldate : ddate = self.__get_date(death_event.get_date_object()) else: ddate = death_event.get_date_object().get_year() dplace_handle = death_event.get_place_handle() if dplace_handle: place = self.__db.get_place_from_handle(dplace_handle) dplace = place.get_title() ddate_obj = death_event.get_date_object() ddate_full = ddate_obj and ddate_obj.get_day_valid() ddate_mod = ddate_obj and \ ddate_obj.get_modifier() != Date.MOD_NONE if include_age: age, age_index = self.__get_age_at_death() else: age = 0 age_index = _AGE_INDEX_NO_AGE value_map = { 'name' : self.__first_name, 'unknown_gender_name' : self.__first_name, 'male_name' : self.__first_name, 'female_name' : self.__first_name, 'death_date' : ddate, 'modified_date' : ddate, 'death_place' : dplace, 'age' : age, 'month_year' : ddate, } gender = self.__person.get_gender() if ddate and ddate_mod: if dplace and self.__verbose: text = died_modified_date_with_place[name_index][gender][age_index] elif dplace: text = died_modified_date_with_place[2][age_index] elif self.__verbose: text = died_modified_date_no_place[name_index][gender][age_index] else: text = died_modified_date_no_place[2][age_index] elif ddate and ddate_full: if dplace and self.__verbose: text = died_full_date_with_place[name_index][gender][age_index] elif dplace: text = died_full_date_with_place[2][age_index] elif self.__verbose: text = died_full_date_no_place[name_index][gender][age_index] else: text = died_full_date_no_place[2][age_index] elif ddate: if dplace and self.__verbose: text = died_partial_date_with_place[name_index][gender][age_index] elif dplace: text = died_partial_date_with_place[2][age_index] elif self.__verbose: text = died_partial_date_no_place[name_index][gender][age_index] else: text = died_partial_date_no_place[2][age_index] elif dplace and self.__verbose: text = died_no_date_with_place[name_index][gender][age_index] elif dplace: text = died_no_date_with_place[2][age_index] elif self.__verbose: text = died_no_date_no_place[name_index][gender][age_index] else: text = died_no_date_no_place[2][age_index] if text: text = self.__translate_text(text) % value_map if death_event: text = text.rstrip(". ") text = text + self.__get_endnote_numbers(death_event) + ". " text = text + " " return text def get_buried_string(self): """ Get a string narrating the burial of the subject. Example sentences: Person was buried on Date. Person was buried on Date in Place. Person was buried in Month_Year. Person was buried in Month_Year in Place. Person was buried in Place. '' :returns: A sentence about the subject's burial. :rtype: unicode """ if not self.__first_name_used: name_index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: name_index = _NAME_INDEX_EXCLUDE_NAME gender = self.__person.get_gender() text = "" bplace = self.__empty_place bdate = self.__empty_date bdate_full = False bdate_mod = False burial = None for event_ref in self.__person.get_event_ref_list(): event = self.__db.get_event_from_handle(event_ref.ref) if event and event.type.value == EventType.BURIAL \ and event_ref.role.value == EventRoleType.PRIMARY: burial = event break if burial: if self.__use_fulldate : bdate = self.__get_date(burial.get_date_object()) else: bdate = burial.get_date_object().get_year() bplace_handle = burial.get_place_handle() if bplace_handle: place = self.__db.get_place_from_handle(bplace_handle) bplace = place.get_title() bdate_obj = burial.get_date_object() bdate_full = bdate_obj and bdate_obj.get_day_valid() bdate_mod = bdate_obj and bdate_obj.get_modifier() != Date.MOD_NONE else: return text value_map = { 'unknown_gender_name' : self.__first_name, 'male_name' : self.__first_name, 'name' : self.__first_name, 'female_name' : self.__first_name, 'burial_date' : bdate, 'burial_place' : bplace, 'month_year' : bdate, 'modified_date' : bdate, 'endnotes' : self.__get_endnote_numbers(event), } if bdate and bdate_mod and self.__verbose: if bplace: #male, date, place text = buried_modified_date_place[gender][name_index] else: #male, date, no place text = buried_modified_date_no_place[gender][name_index] elif bdate and bdate_mod: if bplace: #male, date, place text = buried_modified_date_place['succinct'] else: #male, date, no place text = buried_modified_date_no_place['succinct'] elif bdate and bdate_full and self.__verbose: if bplace: #male, date, place text = buried_full_date_place[gender][name_index] else: #male, date, no place text = buried_full_date_no_place[gender][name_index] elif bdate and bdate_full: if bplace: #male, date, place text = buried_full_date_place['succinct'] else: #male, date, no place text = buried_full_date_no_place['succinct'] elif bdate and self.__verbose: if bplace: #male, month_year, place text = buried_partial_date_place[gender][name_index] else: #male, month_year, no place text = buried_partial_date_no_place[gender][name_index] elif bdate: if bplace: #male, month_year, place text = buried_partial_date_place['succinct'] else: #male, month_year, no place text = buried_partial_date_no_place['succinct'] elif bplace and self.__verbose: #male, no date, place text = buried_no_date_place[gender][name_index] elif bplace: #male, no date, place text = buried_no_date_place['succinct'] elif self.__verbose: text = buried_no_date_no_place[gender][name_index] else: #male, no date, no place text = buried_no_date_no_place['succinct'] if text: text = self.__translate_text(text) % value_map text = text + " " return text def get_baptised_string(self): """ Get a string narrating the baptism of the subject. Example sentences: Person was baptised on Date. Person was baptised on Date in Place. Person was baptised in Month_Year. Person was baptised in Month_Year in Place. Person was baptised in Place. '' :returns: A sentence about the subject's baptism. :rtype: unicode """ if not self.__first_name_used: name_index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: name_index = _NAME_INDEX_EXCLUDE_NAME gender = self.__person.get_gender() text = "" bplace = self.__empty_place bdate = self.__empty_date bdate_full = False bdate_mod = False baptism = None for event_ref in self.__person.get_event_ref_list(): event = self.__db.get_event_from_handle(event_ref.ref) if event and event.type.value == EventType.BAPTISM \ and event_ref.role.value == EventRoleType.PRIMARY: baptism = event break if baptism: if self.__use_fulldate : bdate = self.__get_date(baptism.get_date_object()) else: bdate = baptism.get_date_object().get_year() bplace_handle = baptism.get_place_handle() if bplace_handle: place = self.__db.get_place_from_handle(bplace_handle) bplace = place.get_title() bdate_obj = baptism.get_date_object() bdate_full = bdate_obj and bdate_obj.get_day_valid() bdate_mod = bdate_obj and bdate_obj.get_modifier() != Date.MOD_NONE else: return text value_map = { 'unknown_gender_name' : self.__first_name, 'male_name' : self.__first_name, 'name' : self.__first_name, 'female_name' : self.__first_name, 'baptism_date' : bdate, 'baptism_place' : bplace, 'month_year' : bdate, 'modified_date' : bdate, 'endnotes' : self.__get_endnote_numbers(event), } if bdate and bdate_mod and self.__verbose: if bplace: #male, date, place text = baptised_modified_date_place[gender][name_index] else: #male, date, no place text = baptised_modified_date_no_place[gender][name_index] elif bdate and bdate_mod: if bplace: #male, date, place text = baptised_modified_date_place['succinct'] else: #male, date, no place text = baptised_modified_date_no_place['succinct'] elif bdate and bdate_full and self.__verbose: if bplace: #male, date, place text = baptised_full_date_place[gender][name_index] else: #male, date, no place text = baptised_full_date_no_place[gender][name_index] elif bdate and bdate_full: if bplace: #male, date, place text = baptised_full_date_place['succinct'] else: #male, date, no place text = baptised_full_date_no_place['succinct'] elif bdate and self.__verbose: if bplace: #male, month_year, place text = baptised_partial_date_place[gender][name_index] else: #male, month_year, no place text = baptised_partial_date_no_place[gender][name_index] elif bdate: if bplace: #male, month_year, place text = baptised_partial_date_place['succinct'] else: #male, month_year, no place text = baptised_partial_date_no_place['succinct'] elif bplace and self.__verbose: #male, no date, place text = baptised_no_date_place[gender][name_index] elif bplace: #male, no date, place text = baptised_no_date_place['succinct'] elif self.__verbose: text = baptised_no_date_no_place[gender][name_index] else: #male, no date, no place text = baptised_no_date_no_place['succinct'] if text: text = self.__translate_text(text) % value_map text = text + " " return text def get_christened_string(self): """ Get a string narrating the christening of the subject. Example sentences: Person was christened on Date. Person was christened on Date in Place. Person was christened in Month_Year. Person was christened in Month_Year in Place. Person was christened in Place. '' :returns: A sentence about the subject's christening. :rtype: unicode """ if not self.__first_name_used: name_index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: name_index = _NAME_INDEX_EXCLUDE_NAME gender = self.__person.get_gender() text = "" cplace = self.__empty_place cdate = self.__empty_date cdate_full = False cdate_mod = False christening = None for event_ref in self.__person.get_event_ref_list(): event = self.__db.get_event_from_handle(event_ref.ref) if event and event.type.value == EventType.CHRISTEN \ and event_ref.role.value == EventRoleType.PRIMARY: christening = event break if christening: if self.__use_fulldate : cdate = self.__get_date(christening.get_date_object()) else: cdate = christening.get_date_object().get_year() cplace_handle = christening.get_place_handle() if cplace_handle: place = self.__db.get_place_from_handle(cplace_handle) cplace = place.get_title() cdate_obj = christening.get_date_object() cdate_full = cdate_obj and cdate_obj.get_day_valid() cdate_mod = cdate_obj and cdate_obj.get_modifier() != Date.MOD_NONE else: return text value_map = { 'unknown_gender_name' : self.__first_name, 'male_name' : self.__first_name, 'name' : self.__first_name, 'female_name' : self.__first_name, 'christening_date' : cdate, 'christening_place' : cplace, 'month_year' : cdate, 'modified_date' : cdate, 'endnotes' : self.__get_endnote_numbers(event), } if cdate and cdate_mod and self.__verbose: if cplace: #male, date, place text = christened_modified_date_place[gender][name_index] else: #male, date, no place text = christened_modified_date_no_place[gender][name_index] elif cdate and cdate_mod: if cplace: #male, date, place text = christened_modified_date_place['succinct'] else: #male, date, no place text = christened_modified_date_no_place['succinct'] elif cdate and cdate_full and self.__verbose: if cplace: #male, date, place text = christened_full_date_place[gender][name_index] else: #male, date, no place text = christened_full_date_no_place[gender][name_index] elif cdate and cdate_full: if cplace: #male, date, place text = christened_full_date_place['succinct'] else: #male, date, no place text = christened_full_date_no_place['succinct'] elif cdate and self.__verbose: if cplace: #male, month_year, place text = christened_partial_date_place[gender][name_index] else: #male, month_year, no place text = christened_partial_date_no_place[gender][name_index] elif cdate: if cplace: #male, month_year, place text = christened_partial_date_place['succinct'] else: #male, month_year, no place text = christened_partial_date_no_place['succinct'] elif cplace and self.__verbose: #male, no date, place text = christened_no_date_place[gender][name_index] elif cplace: #male, no date, place text = christened_no_date_place['succinct'] elif self.__verbose: text = christened_no_date_no_place[gender][name_index] else: #male, no date, no place text = christened_no_date_no_place['succinct'] if text: text = self.__translate_text(text) % value_map text = text + " " return text def get_married_string(self, family, is_first=True, name_display=None): """ Get a string narrating the marriage of the subject. Example sentences: Person was married to Spouse on Date. Person was married to Spouse. Person was also married to Spouse on Date. Person was also married to Spouse. "" :param family: The family that contains the Spouse for this marriage. :type family: :class:`~gen.lib.family,Family` :param is_first: Indicates whether this sentence represents the first marriage. If it is not the first marriage, the sentence will include "also". :type is_first: bool :param name_display: An object to be used for displaying names :type is_first: :class:`~gen.display.name,NameDisplay` :returns: A sentence about the subject's marriage. :rtype: unicode """ spouse_handle = ReportUtils.find_spouse(self.__person, family) spouse = self.__db.get_person_from_handle(spouse_handle) event = ReportUtils.find_marriage(self.__db, family) date = self.__empty_date place = self.__empty_place if spouse: if not name_display: spouse_name = _nd.display(spouse) else: spouse_name = name_display.display(spouse) else: # not all families have a spouse. spouse_name = _("Unknown") if event: if self.__use_fulldate : mdate = self.__get_date(event.get_date_object()) else: mdate = event.get_date_object().get_year() if mdate: date = mdate place_handle = event.get_place_handle() if place_handle: place_obj = self.__db.get_place_from_handle(place_handle) place = place_obj.get_title() relationship = family.get_relationship() value_map = { 'spouse' : spouse_name, 'endnotes' : self.__get_endnote_numbers(event), 'full_date' : date, 'modified_date' : date, 'partial_date' : date, 'place' : place, } date_full = 0 if event: dobj = event.get_date_object() if dobj.get_modifier() != Date.MOD_NONE: date_full = 2 elif dobj and dobj.get_day_valid(): date_full = 1 gender = self.__person.get_gender() # This would be much simpler, excepting for translation considerations # Currently support FamilyRelType's: # MARRIED : civil and/or religious # UNMARRIED # CIVIL UNION : described as a relationship # UNKNOWN : also described as a relationship # CUSTOM : also described as a relationship # # In the future, there may be a need to distinguish between # CIVIL UNION, UNKNOWN and CUSTOM relationship types # CUSTOM will be difficult as user can supply any arbitrary string to # describe type if is_first: if date and place and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_first_date_place[gender][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_date_place[gender][date_full] else: text = relationship_first_date_place[gender][date_full] elif date and place: if relationship == FamilyRelType.MARRIED: text = marriage_first_date_place['succinct'][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_date_place['succinct'][date_full] else: text = relationship_first_date_place['succinct'][date_full] elif date and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_first_date[gender][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_date[gender][date_full] else: text = relationship_first_date[gender][date_full] elif date: if relationship == FamilyRelType.MARRIED: text = marriage_first_date['succinct'][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_date['succinct'][date_full] else: text = relationship_first_date['succinct'][date_full] elif place and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_first_place[gender] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_place[gender] else: text = relationship_first_place[gender] elif place: if relationship == FamilyRelType.MARRIED: text = marriage_first_place['succinct'] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_place['succinct'] else: text = relationship_first_place['succinct'] elif self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_first_only[gender] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_only[gender] else: text = relationship_first_only[gender] else: if relationship == FamilyRelType.MARRIED: text = marriage_first_only['succinct'] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_first_only['succinct'] else: text = relationship_first_only['succinct'] else: if date and place and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_also_date_place[gender][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_date_place[gender][date_full] else: text = relationship_also_date_place[gender][date_full] elif date and place: if relationship == FamilyRelType.MARRIED: text = marriage_also_date_place['succinct'][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_date_place['succinct'][date_full] else: text = relationship_also_date_place['succinct'][date_full] elif date and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_also_date[gender][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_date[gender][date_full] else: text = relationship_also_date[gender][date_full] elif date: if relationship == FamilyRelType.MARRIED: text = marriage_also_date['succinct'][date_full] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_date['succinct'][date_full] else: text = relationship_also_date['succinct'][date_full] elif place and self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_also_place[gender] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_place[gender] else: text = relationship_also_place[gender] elif place: if relationship == FamilyRelType.MARRIED: text = marriage_also_place['succinct'] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_place['succinct'] else: text = relationship_also_place['succinct'] elif self.__verbose: if relationship == FamilyRelType.MARRIED: text = marriage_also_only[gender] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_only[gender] else: text = relationship_also_only[gender] else: if relationship == FamilyRelType.MARRIED: text = marriage_also_only['succinct'] elif relationship == FamilyRelType.UNMARRIED: text = unmarried_also_only['succinct'] else: text = relationship_also_only['succinct'] if text: text = self.__translate_text(text) % value_map text = text + " " return text def get_child_string(self, father_name="", mother_name=""): """ Get a string narrating the relationship to the parents of the subject. Missing information will be omitted without loss of readability. Example sentences: Person was the son of father_name and mother_name. Person was the daughter of father_name and mother_name. "" :param father_name: The name of the Subjects' father. :type father_name: unicode :param mother_name: The name of the Subjects' mother. :type mother_name: unicode :returns: A sentence about the subject's parents. :rtype: unicode """ value_map = { 'father' : father_name, 'mother' : mother_name, 'male_name' : self.__first_name, 'name' : self.__first_name, 'female_name' : self.__first_name, 'unknown_gender_name' : self.__first_name, } dead = not Utils.probably_alive(self.__person, self.__db) if not self.__first_name_used: index = _NAME_INDEX_INCLUDE_NAME self.__first_name_used = True else: index = _NAME_INDEX_EXCLUDE_NAME gender = self.__person.get_gender() text = "" if mother_name and father_name and self.__verbose: text = child_father_mother[gender][index][dead] elif mother_name and father_name: text = child_father_mother[gender][2] elif mother_name and self.__verbose: text = child_mother[gender][index][dead] elif mother_name: text = child_mother[gender][2] elif father_name and self.__verbose: text = child_father[gender][index][dead] elif father_name: text = child_father[gender][2] if text: text = self.__translate_text(text) % value_map text = text + " " return text def __get_age_at_death(self): """ Calculate the age the person died. Returns a tuple representing (age, age_index). """ birth_ref = self.__person.get_birth_ref() if birth_ref: birth_event = self.__db.get_event_from_handle(birth_ref.ref) birth = birth_event.get_date_object() birth_year_valid = birth.get_year_valid() else: birth_year_valid = False death_ref = self.__person.get_death_ref() if death_ref: death_event = self.__db.get_event_from_handle(death_ref.ref) death = death_event.get_date_object() death_year_valid = death.get_year_valid() else: death_year_valid = False # wihtout at least a year for each event no age can be calculated if birth_year_valid and death_year_valid: span = death - birth if span and span.is_valid(): if span: age = span age_index = _AGE_INDEX else: age = 0 age_index = _AGE_INDEX_NO_AGE else: age = 0 age_index = _AGE_INDEX_NO_AGE else: age = 0 age_index = _AGE_INDEX_NO_AGE return age, age_index