2007-08-13 Don Allingham <don@gramps-project.org>
* src/GrampsDbUtils/_WriteGedcom.py: improve FAM structure svn: r8816
This commit is contained in:
parent
1a7b3abb26
commit
8cf2437f40
@ -1,3 +1,6 @@
|
|||||||
|
2007-08-13 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GrampsDbUtils/_WriteGedcom.py: improve FAM structure
|
||||||
|
|
||||||
2007-08-12 Don Allingham <don@gramps-project.org>
|
2007-08-12 Don Allingham <don@gramps-project.org>
|
||||||
* src/GrampsDbUtils/_WriteGedcom.py: LANG values, additional
|
* src/GrampsDbUtils/_WriteGedcom.py: LANG values, additional
|
||||||
refactoring
|
refactoring
|
||||||
|
@ -238,6 +238,11 @@ def writeData(database, person):
|
|||||||
GedcomWriter(database, person)
|
GedcomWriter(database, person)
|
||||||
|
|
||||||
def breakup(txt, limit):
|
def breakup(txt, limit):
|
||||||
|
"""
|
||||||
|
Breaks a line of text into a list of strings that conform to the
|
||||||
|
maximum length specified, while breaking words in the middle of a word
|
||||||
|
to avoid issues with spaces.
|
||||||
|
"""
|
||||||
data = []
|
data = []
|
||||||
while limit < len(txt)+1:
|
while limit < len(txt)+1:
|
||||||
idx = limit-1
|
idx = limit-1
|
||||||
@ -529,6 +534,9 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(2, "FORM", 'LINEAGE-LINKED')
|
self.__writeln(2, "FORM", 'LINEAGE-LINKED')
|
||||||
self.__writeln(1, "CHAR", "UTF-8")
|
self.__writeln(1, "CHAR", "UTF-8")
|
||||||
|
|
||||||
|
# write the language string if the current LANG variable
|
||||||
|
# matches something we know about.
|
||||||
|
|
||||||
lang = os.getenv('LANG')
|
lang = os.getenv('LANG')
|
||||||
if lang and len(lang) >= 2:
|
if lang and len(lang) >= 2:
|
||||||
lang_code = LANGUAGES.get(lang[0:2])
|
lang_code = LANGUAGES.get(lang[0:2])
|
||||||
@ -580,8 +588,8 @@ class GedcomWriter(UpdateCallback):
|
|||||||
sorted.append (data)
|
sorted.append (data)
|
||||||
sorted.sort()
|
sorted.sort()
|
||||||
|
|
||||||
for handle in [ data[1] for data in sorted]:
|
for data in sorted:
|
||||||
person = self.db.get_person_from_handle (handle)
|
person = self.db.get_person_from_handle(data[1])
|
||||||
self.__write_person(person)
|
self.__write_person(person)
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@ -622,16 +630,16 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__write_person_event_ref('DEAT', person.get_death_ref())
|
self.__write_person_event_ref('DEAT', person.get_death_ref())
|
||||||
self.__write_remaining_events(person)
|
self.__write_remaining_events(person)
|
||||||
self.__write_attributes(person)
|
self.__write_attributes(person)
|
||||||
self.__write_lds_ords(person)
|
self.__write_lds_ords(person, 1)
|
||||||
self.__write_child_families(person)
|
self.__write_child_families(person)
|
||||||
self.__write_parent_families(person)
|
self.__write_parent_families(person)
|
||||||
self.__write_assoc(person, 1)
|
self.__write_assoc(person, 1)
|
||||||
self.__write_person_sources(person)
|
self.__write_person_sources(person)
|
||||||
self.__write_addresses(person)
|
self.__write_addresses(person)
|
||||||
self.__write_photos(person.get_media_list())
|
self.__write_photos(person.get_media_list(), 1)
|
||||||
self.__write_person_objects(person)
|
self.__write_person_objects(person)
|
||||||
self.__write_note_references(person.get_note_list(), 1)
|
self.__write_note_references(person.get_note_list(), 1)
|
||||||
self.write_change(1, person.get_change_time())
|
self.__write_change(person.get_change_time(), 1)
|
||||||
|
|
||||||
def __write_assoc(self, person, level):
|
def __write_assoc(self, person, level):
|
||||||
"""
|
"""
|
||||||
@ -677,9 +685,9 @@ class GedcomWriter(UpdateCallback):
|
|||||||
elif person.get_gender() == RelLib.Person.FEMALE:
|
elif person.get_gender() == RelLib.Person.FEMALE:
|
||||||
self.__writeln(1, "SEX", "F")
|
self.__writeln(1, "SEX", "F")
|
||||||
|
|
||||||
def __write_lds_ords(self, person):
|
def __write_lds_ords(self, obj, level):
|
||||||
for lds_ord in person.get_lds_ord_list():
|
for lds_ord in obj.get_lds_ord_list():
|
||||||
self.write_ord(lds_ord, 1)
|
self.write_ord(lds_ord, level)
|
||||||
|
|
||||||
def __write_remaining_events(self, person):
|
def __write_remaining_events(self, person):
|
||||||
|
|
||||||
@ -780,9 +788,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(2, 'TYPE', key)
|
self.__writeln(2, 'TYPE', key)
|
||||||
|
|
||||||
self.__write_note_references(attr.get_note_list(), 2)
|
self.__write_note_references(attr.get_note_list(), 2)
|
||||||
|
self.__write_source_references(attr.get_source_references(), 2)
|
||||||
for srcref in attr.get_source_references():
|
|
||||||
self.write_source_ref(2, srcref)
|
|
||||||
|
|
||||||
def __write_source_references(self, ref_list, level):
|
def __write_source_references(self, ref_list, level):
|
||||||
for srcref in ref_list:
|
for srcref in ref_list:
|
||||||
@ -803,15 +809,14 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(3, 'CTRY', addr.get_country())
|
self.__writeln(3, 'CTRY', addr.get_country())
|
||||||
if addr.get_phone():
|
if addr.get_phone():
|
||||||
self.__writeln(2, 'PHON', addr.get_phone())
|
self.__writeln(2, 'PHON', addr.get_phone())
|
||||||
|
|
||||||
self.__write_note_references(addr.get_note_list(), 2)
|
self.__write_note_references(addr.get_note_list(), 2)
|
||||||
|
self.__write_source_references(addr.get_source_references(), 2)
|
||||||
|
|
||||||
for srcref in addr.get_source_references():
|
def __write_photos(self, media_list, level):
|
||||||
self.write_source_ref(2, srcref)
|
|
||||||
|
|
||||||
def __write_photos(self, media_list):
|
|
||||||
if self.images:
|
if self.images:
|
||||||
for photo in media_list:
|
for photo in media_list:
|
||||||
self.write_photo(photo, 1)
|
self.write_photo(photo, level)
|
||||||
|
|
||||||
def __write_child_families(self, person):
|
def __write_child_families(self, person):
|
||||||
hndl_list = [ hndl for hndl in person.get_parent_family_handle_list() \
|
hndl_list = [ hndl for hndl in person.get_parent_family_handle_list() \
|
||||||
@ -854,15 +859,16 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
for family_handle in self.flist:
|
for family_handle in self.flist:
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
data = (family.get_gramps_id(), family_handle, family)
|
data = (family.get_gramps_id(), family_handle)
|
||||||
sorted.append (data)
|
sorted.append (data)
|
||||||
sorted.sort ()
|
sorted.sort ()
|
||||||
|
|
||||||
for (gramps_id, family_handle, family) in sorted:
|
for (gramps_id, family_handle) in sorted:
|
||||||
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
self.__write_family(family)
|
self.__write_family(family)
|
||||||
|
|
||||||
def __write_family_reference(self, token, person_handle):
|
def __write_family_reference(self, token, person_handle):
|
||||||
if (person_handle != None) and (person_handle in self.plist):
|
if person_handle != None and person_handle in self.plist:
|
||||||
person = self.db.get_person_from_handle(person_handle)
|
person = self.db.get_person_from_handle(person_handle)
|
||||||
gramps_id = person.get_gramps_id()
|
gramps_id = person.get_gramps_id()
|
||||||
self.__writeln(1, token, '@%s@' % gramps_id)
|
self.__writeln(1, token, '@%s@' % gramps_id)
|
||||||
@ -873,55 +879,17 @@ class GedcomWriter(UpdateCallback):
|
|||||||
gramps_id = family.get_gramps_id()
|
gramps_id = family.get_gramps_id()
|
||||||
family_handle = family.get_handle()
|
family_handle = family.get_handle()
|
||||||
|
|
||||||
father_alive = mother_alive = False
|
|
||||||
|
|
||||||
self.__writeln(0, '@%s@' % gramps_id, 'FAM' )
|
self.__writeln(0, '@%s@' % gramps_id, 'FAM' )
|
||||||
self.frefn(family)
|
self.frefn(family)
|
||||||
|
|
||||||
father_alive = self.__write_family_reference('HUSB', family.get_father_handle())
|
self.__write_family_reference('HUSB', family.get_father_handle())
|
||||||
mother_alive = self.__write_family_reference('WIFE', family.get_mother_handle())
|
self.__write_family_reference('WIFE', family.get_mother_handle())
|
||||||
|
|
||||||
if not father_alive and not mother_alive :
|
self.__write_lds_ords(family, 1)
|
||||||
for lds_ord in family.get_lds_ord_list():
|
self.__write_family_events(family)
|
||||||
self.write_ord(lds_ord, 1)
|
|
||||||
|
|
||||||
for event_ref in family.get_event_ref_list():
|
|
||||||
event_handle = event_ref.ref
|
|
||||||
event = self.db.get_event_from_handle(event_handle)
|
|
||||||
if not event:
|
|
||||||
continue
|
|
||||||
|
|
||||||
etype = int(event.get_type())
|
|
||||||
val = GedcomInfo.familyConstantEvents.get(etype)
|
|
||||||
|
|
||||||
if val == None:
|
|
||||||
val = self.target_ged.gramps2tag(etype)
|
|
||||||
|
|
||||||
if val:
|
|
||||||
if (not event.get_date_object().is_empty()) \
|
|
||||||
or event.get_place_handle():
|
|
||||||
self.__writeln(1, val)
|
|
||||||
else:
|
|
||||||
self.__writeln(1, val, 'Y')
|
|
||||||
|
|
||||||
if event.get_type() == RelLib.EventType.MARRIAGE:
|
|
||||||
ftype = family.get_relationship()
|
|
||||||
if ftype != RelLib.FamilyRelType.MARRIED and \
|
|
||||||
str(ftype).strip() != "":
|
|
||||||
self.__writeln(2, 'TYPE', str(ftype))
|
|
||||||
elif event.get_description().strip() != "":
|
|
||||||
self.__writeln(2, 'TYPE', event.get_description())
|
|
||||||
else:
|
|
||||||
self.__writeln(1, 'EVEN')
|
|
||||||
the_type = str(event.get_type())
|
|
||||||
if the_type:
|
|
||||||
self.__writeln(2, 'TYPE', the_type)
|
|
||||||
|
|
||||||
self.dump_event_stats(event, event_ref)
|
|
||||||
|
|
||||||
self.__write_family_attributes(family.get_attribute_list(), 1)
|
self.__write_family_attributes(family.get_attribute_list(), 1)
|
||||||
|
|
||||||
|
|
||||||
for child_ref in [cref.ref for cref in family.get_child_ref_list()
|
for child_ref in [cref.ref for cref in family.get_child_ref_list()
|
||||||
if cref.ref not in self.plist]:
|
if cref.ref not in self.plist]:
|
||||||
person = self.db.get_person_from_handle(child_ref)
|
person = self.db.get_person_from_handle(child_ref)
|
||||||
@ -929,15 +897,57 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(1, 'CHIL', '@%s@' % person.get_gramps_id())
|
self.__writeln(1, 'CHIL', '@%s@' % person.get_gramps_id())
|
||||||
|
|
||||||
self.__write_source_references(family.get_source_references(), 1)
|
self.__write_source_references(family.get_source_references(), 1)
|
||||||
|
self.__write_photos(family.get_media_list(), 1)
|
||||||
if self.images:
|
|
||||||
for photo in family.get_media_list():
|
|
||||||
self.write_photo(photo, 1)
|
|
||||||
|
|
||||||
self.__write_note_references(family.get_note_list(), 1)
|
self.__write_note_references(family.get_note_list(), 1)
|
||||||
self.write_change(1, family.get_change_time())
|
self.__write_change(family.get_change_time(), 1)
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
|
def __write_family_events(self, family):
|
||||||
|
|
||||||
|
for event_ref in [ ref for ref in family.get_event_ref_list()]:
|
||||||
|
event = self.db.get_event_from_handle(event_ref.ref)
|
||||||
|
if not event:
|
||||||
|
continue
|
||||||
|
|
||||||
|
etype = int(event.get_type())
|
||||||
|
val = GedcomInfo.familyConstantEvents.get(etype)
|
||||||
|
|
||||||
|
if val == None:
|
||||||
|
val = self.target_ged.gramps2tag(etype)
|
||||||
|
|
||||||
|
if val:
|
||||||
|
if (not event.get_date_object().is_empty()) \
|
||||||
|
or event.get_place_handle():
|
||||||
|
self.__writeln(1, val)
|
||||||
|
else:
|
||||||
|
self.__writeln(1, val, 'Y')
|
||||||
|
|
||||||
|
if event.get_type() == RelLib.EventType.MARRIAGE:
|
||||||
|
ftype = family.get_relationship()
|
||||||
|
if ftype != RelLib.FamilyRelType.MARRIED and str(ftype):
|
||||||
|
self.__writeln(2, 'TYPE', str(ftype))
|
||||||
|
|
||||||
|
self.__write_family_event_attrs(event.get_attribute_list(), 2)
|
||||||
|
elif event.get_description().strip() != "":
|
||||||
|
self.__writeln(2, 'TYPE', event.get_description())
|
||||||
|
else:
|
||||||
|
self.__writeln(1, 'EVEN')
|
||||||
|
the_type = str(event.get_type())
|
||||||
|
if the_type:
|
||||||
|
self.__writeln(2, 'TYPE', the_type)
|
||||||
|
|
||||||
|
self.dump_event_stats(event, event_ref)
|
||||||
|
|
||||||
|
|
||||||
|
def __write_family_event_attrs(self, attr_list, level):
|
||||||
|
for attr in attr_list:
|
||||||
|
if attr.get_type() == RelLib.AttributeType.FATHER_AGE:
|
||||||
|
self.__writeln(level, 'HUSB')
|
||||||
|
self.__writeln(level+1, 'AGE', attr.get_value())
|
||||||
|
elif attr.get_type() == RelLib.AttributeType.MOTHER_AGE:
|
||||||
|
self.__writeln(level, 'WIFE')
|
||||||
|
self.__writeln(level+1, 'AGE', attr.get_value())
|
||||||
|
|
||||||
def __write_family_attributes(self, attr_list, level):
|
def __write_family_attributes(self, attr_list, level):
|
||||||
|
|
||||||
for attr in attr_list:
|
for attr in attr_list:
|
||||||
@ -989,16 +999,13 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if source.get_abbreviation():
|
if source.get_abbreviation():
|
||||||
self.__writeln(1, 'ABBR', source.get_abbreviation())
|
self.__writeln(1, 'ABBR', source.get_abbreviation())
|
||||||
|
|
||||||
if self.images:
|
self.__write_photos(source.get_media_list(), 1)
|
||||||
photos = source.get_media_list ()
|
|
||||||
for photo in photos:
|
|
||||||
self.write_photo(photo, 1)
|
|
||||||
|
|
||||||
for reporef in source.get_reporef_list():
|
for reporef in source.get_reporef_list():
|
||||||
self.write_reporef(reporef, 1)
|
self.write_reporef(reporef, 1)
|
||||||
|
|
||||||
self.__write_note_references(source.get_note_list(), 1)
|
self.__write_note_references(source.get_note_list(), 1)
|
||||||
self.write_change(1, source.get_change_time())
|
self.__write_change(source.get_change_time(), 1)
|
||||||
|
|
||||||
def __write_notes(self):
|
def __write_notes(self):
|
||||||
|
|
||||||
@ -1084,15 +1091,13 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(2, 'TYPE', event.get_description())
|
self.__writeln(2, 'TYPE', event.get_description())
|
||||||
self.dump_event_stats(event, event_ref)
|
self.dump_event_stats(event, event_ref)
|
||||||
|
|
||||||
def write_change(self, level, timeval):
|
def __write_change(self, timeval, level):
|
||||||
self.__writeln(level, 'CHAN')
|
self.__writeln(level, 'CHAN')
|
||||||
time_val = time.localtime(timeval)
|
time_val = time.localtime(timeval)
|
||||||
self.__writeln(level+1, 'DATE', '%d %s %d' % (time_val[2],
|
self.__writeln(level+1, 'DATE', '%d %s %d' % (
|
||||||
_month[time_val[1]],
|
time_val[2], _month[time_val[1]], time_val[0]))
|
||||||
time_val[0]))
|
self.__writeln(level+2, 'TIME', '%02d:%02d:%02d' % (
|
||||||
self.__writeln(level+2, 'TIME', '%02d:%02d:%02d' % (time_val[3],
|
time_val[3], time_val[4], time_val[5]))
|
||||||
time_val[4],
|
|
||||||
time_val[5]))
|
|
||||||
|
|
||||||
def dump_event_stats(self, event, event_ref):
|
def dump_event_stats(self, event, event_ref):
|
||||||
dateobj = event.get_date_object()
|
dateobj = event.get_date_object()
|
||||||
@ -1122,17 +1127,12 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(3, 'AGE', attr.get_value())
|
self.__writeln(3, 'AGE', attr.get_value())
|
||||||
|
|
||||||
self.__write_note_references(event.get_note_list(), 1)
|
self.__write_note_references(event.get_note_list(), 1)
|
||||||
|
self.__write_source_references(event.get_source_references(), 2)
|
||||||
for srcref in event.get_source_references():
|
|
||||||
self.write_source_ref(2, srcref)
|
|
||||||
|
|
||||||
if self.images:
|
if self.images:
|
||||||
photos = event.get_media_list()
|
self.__write_photos(event.get_media_list(), 2)
|
||||||
for photo in photos:
|
|
||||||
self.write_photo(photo, 2)
|
|
||||||
if place:
|
if place:
|
||||||
for photo in place.get_media_list():
|
self.__write_photos(place.get_media_list(), 2)
|
||||||
self.write_photo(photo, 2)
|
|
||||||
|
|
||||||
def write_ord(self, ord, index):
|
def write_ord(self, ord, index):
|
||||||
self.__writeln(index, lds_ord_name[ord.get_type()])
|
self.__writeln(index, lds_ord_name[ord.get_type()])
|
||||||
@ -1151,9 +1151,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(2, 'STAT', lds_status[ord.get_status()])
|
self.__writeln(2, 'STAT', lds_status[ord.get_status()])
|
||||||
|
|
||||||
self.__write_note_references(ord.get_note_list(), index+1)
|
self.__write_note_references(ord.get_note_list(), index+1)
|
||||||
|
self.__write_source_references(ord.get_source_references(), index+1)
|
||||||
for srcref in ord.get_source_references():
|
|
||||||
self.write_source_ref(index+1, srcref)
|
|
||||||
|
|
||||||
def print_date(self, level, date):
|
def print_date(self, level, date):
|
||||||
start = date.get_start_date()
|
start = date.get_start_date()
|
||||||
@ -1220,8 +1218,8 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__writeln(2, 'NPFX', title)
|
self.__writeln(2, 'NPFX', title)
|
||||||
if nick:
|
if nick:
|
||||||
self.__writeln(2, 'NICK', nick)
|
self.__writeln(2, 'NICK', nick)
|
||||||
for srcref in name.get_source_references():
|
|
||||||
self.write_source_ref(2, srcref)
|
self.__write_source_references(name.get_source_references(), 2)
|
||||||
self.__write_note_references(name.get_note_list(), 2)
|
self.__write_note_references(name.get_note_list(), 2)
|
||||||
|
|
||||||
def write_source_ref(self, level, ref):
|
def write_source_ref(self, level, ref):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user