2007-08-07 Don Allingham <don@gramps-project.org>
* src/GrampsDbUtils/_WriteGedcom.py: additional refactoring svn: r8802
This commit is contained in:
parent
fc6910bd1b
commit
1c14e57ba5
@ -1,3 +1,6 @@
|
|||||||
|
2007-08-07 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GrampsDbUtils/_WriteGedcom.py: additional refactoring
|
||||||
|
|
||||||
2007-08-05 Don Allingham <don@gramps-project.org>
|
2007-08-05 Don Allingham <don@gramps-project.org>
|
||||||
* src/GrampsDbUtils/_WriteGedcom.py: start of refactoring
|
* src/GrampsDbUtils/_WriteGedcom.py: start of refactoring
|
||||||
* src/Bookmarks.py: Don't rewrite list
|
* src/Bookmarks.py: Don't rewrite list
|
||||||
|
@ -31,6 +31,7 @@ import os
|
|||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
import string
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(".WriteGedcom")
|
log = logging.getLogger(".WriteGedcom")
|
||||||
@ -248,6 +249,19 @@ def make_date(subdate, calendar, mode):
|
|||||||
def writeData(database, person):
|
def writeData(database, person):
|
||||||
GedcomWriter(database, person)
|
GedcomWriter(database, person)
|
||||||
|
|
||||||
|
|
||||||
|
def breakup(txt, limit):
|
||||||
|
data = []
|
||||||
|
while limit < len(txt):
|
||||||
|
idx = limit-1
|
||||||
|
while txt[idx] in string.whitespace:
|
||||||
|
idx -= 1
|
||||||
|
data.append(txt[:idx+1])
|
||||||
|
txt = txt[idx+1:]
|
||||||
|
if len(txt) > 0:
|
||||||
|
data.append(txt)
|
||||||
|
return data
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
@ -428,17 +442,18 @@ class GedcomWriter(UpdateCallback):
|
|||||||
# Collect needed families
|
# Collect needed families
|
||||||
for handle in list(self.plist):
|
for handle in list(self.plist):
|
||||||
person = self.db.get_person_from_handle(handle)
|
person = self.db.get_person_from_handle(handle)
|
||||||
if self.private and person.private:
|
|
||||||
self.plist.remove(handle)
|
|
||||||
for family_handle in person.get_family_handle_list():
|
for family_handle in person.get_family_handle_list():
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
if self.private and family.private:
|
|
||||||
continue
|
|
||||||
self.flist.add(family_handle)
|
self.flist.add(family_handle)
|
||||||
|
|
||||||
def __writeln(self, level, token, text="", limit=0):
|
def __writeln(self, level, token, text="", limit=248):
|
||||||
if text:
|
if text:
|
||||||
self.g.write("%d %s %s\n" % (level, token, self.cnvtxt(text)))
|
if limit:
|
||||||
|
prefix = "\n%d CONC " % (level + 1)
|
||||||
|
txt = prefix.join(breakup(self.cnvtxt(text), limit))
|
||||||
|
else:
|
||||||
|
txt = self.cnvtxt(text)
|
||||||
|
self.g.write("%d %s %s\n" % (level, token, txt))
|
||||||
else:
|
else:
|
||||||
self.g.write("%d %s\n" % (level, token))
|
self.g.write("%d %s\n" % (level, token))
|
||||||
|
|
||||||
@ -465,19 +480,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.cnvtxt = self.option_box.cnvtxt
|
self.cnvtxt = self.option_box.cnvtxt
|
||||||
self.nl = self.option_box.nl
|
self.nl = self.option_box.nl
|
||||||
|
|
||||||
if HAVE_CONFIG:
|
|
||||||
show_owner_missing_warning = not Config.get(Config.OWNER_WARN)
|
|
||||||
owner_name_empty = self.db.get_researcher().get_name() == ''
|
|
||||||
|
|
||||||
if show_owner_missing_warning and owner_name_empty:
|
|
||||||
MessageHideDialog(
|
|
||||||
_('Researcher information'),
|
|
||||||
_('A valid GEDCOM file is required to contain researcher '
|
|
||||||
'information. You need to fill these data in the '
|
|
||||||
'Preferences dialog.\n\n'
|
|
||||||
'However, most programs do not require it. You may '
|
|
||||||
'leave this empty if you want.'), Config.OWNER_WARN)
|
|
||||||
|
|
||||||
if self.option_box.cfilter == None:
|
if self.option_box.cfilter == None:
|
||||||
self.plist = set(self.db.get_person_handles(sort_handles=False))
|
self.plist = set(self.db.get_person_handles(sort_handles=False))
|
||||||
else:
|
else:
|
||||||
@ -546,31 +548,60 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
def __write_header(self, filename):
|
def __write_header(self, filename):
|
||||||
"""
|
"""
|
||||||
HEADER
|
Writes the GEDCOM header.
|
||||||
|
|
||||||
|
HEADER:=
|
||||||
|
n HEAD {1:1}
|
||||||
|
+1 SOUR <APPROVED_SYSTEM_ID> {1:1} p.*
|
||||||
|
+2 VERS <VERSION_NUMBER> {0:1} p.*
|
||||||
|
+2 NAME <NAME_OF_PRODUCT> {0:1} p.*
|
||||||
|
+2 CORP <NAME_OF_BUSINESS> {0:1} p.* # Not used
|
||||||
|
+3 <<ADDRESS_STRUCTURE>> {0:1} p.* # Not used
|
||||||
|
+2 DATA <NAME_OF_SOURCE_DATA> {0:1} p.* # Not used
|
||||||
|
+3 DATE <PUBLICATION_DATE> {0:1} p.* # Not used
|
||||||
|
+3 COPR <COPYRIGHT_SOURCE_DATA> {0:1} p.* # Not used
|
||||||
|
+1 DEST <RECEIVING_SYSTEM_NAME> {0:1*} p.* # Not used
|
||||||
|
+1 DATE <TRANSMISSION_DATE> {0:1} p.*
|
||||||
|
+2 TIME <TIME_VALUE> {0:1} p.*
|
||||||
|
+1 SUBM @XREF:SUBM@ {1:1} p.*
|
||||||
|
+1 SUBN @XREF:SUBN@ {0:1} p.*
|
||||||
|
+1 FILE <FILE_NAME> {0:1} p.*
|
||||||
|
+1 COPR <COPYRIGHT_GEDCOM_FILE> {0:1} p.*
|
||||||
|
+1 GEDC {1:1}
|
||||||
|
+2 VERS <VERSION_NUMBER> {1:1} p.*
|
||||||
|
+2 FORM <GEDCOM_FORM> {1:1} p.*
|
||||||
|
+1 CHAR <CHARACTER_SET> {1:1} p.*
|
||||||
|
+2 VERS <VERSION_NUMBER> {0:1} p.*
|
||||||
|
+1 LANG <LANGUAGE_OF_TEXT> {0:1} p.*
|
||||||
|
+1 PLAC {0:1}
|
||||||
|
+2 FORM <PLACE_HIERARCHY> {1:1} p.*
|
||||||
|
+1 NOTE <GEDCOM_CONTENT_DESCRIPTION> {0:1} p.*
|
||||||
|
+2 [CONT|CONC] <GEDCOM_CONTENT_DESCRIPTION> {0:M}
|
||||||
"""
|
"""
|
||||||
date = time.ctime(time.time()).split()
|
(year, mon, day, hour, min, sec, x, y, z) = time.localtime(time.time())
|
||||||
date_str = " ".join([date[2], date[2].upper(), date[4]])
|
date_str = "%d %s %d" % (day, _month[mon], year)
|
||||||
|
time_str = "%02d:%02d:%02d" % (hour, min, sec)
|
||||||
|
rname = self.db.get_researcher().get_name()
|
||||||
|
|
||||||
self.__writeln(0, "HEAD")
|
self.__writeln(0, "HEAD")
|
||||||
self.__writeln(1, "SOUR", "GRAMPS")
|
self.__writeln(1, "SOUR", "GRAMPS")
|
||||||
self.__writeln(2, "VERS", const.version)
|
self.__writeln(2, "VERS", const.version)
|
||||||
self.__writeln(2, "NAME", "GRAMPS")
|
self.__writeln(2, "NAME", "GRAMPS")
|
||||||
if self.dest:
|
|
||||||
self.__writeln(1, "DEST", self.dest)
|
|
||||||
self.__writeln(1, "DATE", date_str)
|
self.__writeln(1, "DATE", date_str)
|
||||||
|
self.__writeln(2, "TIME", time_str)
|
||||||
|
self.__writeln(1, "SUBM", "@SUBM@")
|
||||||
|
self.__writeln(1, "FILE", filename)
|
||||||
|
self.__writeln(1, "COPR", 'Copyright (c) %d %s.' % (year, rname))
|
||||||
|
self.__writeln(1, "GEDC")
|
||||||
|
self.__writeln(2, "VERS", "5.5")
|
||||||
|
self.__writeln(2, "FORM", 'LINEAGE-LINKED')
|
||||||
|
|
||||||
if self.cnvtxt == ansel_utf8.utf8_to_ansel:
|
if self.cnvtxt == ansel_utf8.utf8_to_ansel:
|
||||||
self.__writeln(1, "CHAR", "ANSEL")
|
self.__writeln(1, "CHAR", "ANSEL")
|
||||||
elif self.cnvtxt == iso8859:
|
elif self.cnvtxt == iso8859:
|
||||||
self.__writeln(1, "CHAR", "ANSI")
|
self.__writeln(1, "CHAR", "ANSI")
|
||||||
else:
|
else:
|
||||||
self.__writeln(1, "CHAR", "UTF-8")
|
self.__writeln(1, "CHAR", "UTF-8")
|
||||||
self.__writeln(1, "SUBM", "@SUBM@")
|
|
||||||
self.__writeln(1, "FILE", filename)
|
|
||||||
self.write_copy()
|
|
||||||
self.__writeln(1, "GEDC")
|
|
||||||
self.__writeln(2, "VERS", "5.5")
|
|
||||||
self.__writeln(2, "FORM", 'LINEAGE-LINKED')
|
|
||||||
self.gnu_fdl()
|
|
||||||
|
|
||||||
def __write_submitter(self):
|
def __write_submitter(self):
|
||||||
"""
|
"""
|
||||||
@ -582,32 +613,22 @@ class GedcomWriter(UpdateCallback):
|
|||||||
name = u'Not Provided'
|
name = u'Not Provided'
|
||||||
if not addr :
|
if not addr :
|
||||||
addr = u'Not Provided'
|
addr = u'Not Provided'
|
||||||
if not city :
|
|
||||||
city = u'City (not provided)'
|
|
||||||
if not post :
|
|
||||||
post = u'Postal code (not provided)'
|
|
||||||
if not ctry :
|
|
||||||
ctry = u'Country (not provided)'
|
|
||||||
|
|
||||||
self.__writeln(0, "@SUBM@", "SUBM")
|
self.__writeln(0, "@SUBM@", "SUBM")
|
||||||
self.__writeln(1, "NAME", name)
|
self.__writeln(1, "NAME", name)
|
||||||
self.__writeln(1, "ADDR", addr)
|
self.__writeln(1, "ADDR", addr)
|
||||||
self.__writeln(2, "CONT", "%s, %s" % (city, post))
|
if city and stae and post:
|
||||||
self.__writeln(2, "CONT", ctry)
|
self.__writeln(2, "CONT", "%s, %s %s" % (city, stae, post))
|
||||||
self.__writeln(2, "ADR1", addr)
|
if city:
|
||||||
self.__writeln(2, "ADR2", "%s, %s" % (city, post))
|
|
||||||
if city != u'City (not provided)':
|
|
||||||
self.__writeln(2, "CITY", city)
|
self.__writeln(2, "CITY", city)
|
||||||
if stae != '':
|
if stae:
|
||||||
self.__writeln(2, "STAE", stae)
|
self.__writeln(2, "STAE", stae)
|
||||||
if post != u'Postal code (not provided)':
|
if post:
|
||||||
self.__writeln(2, "POST", post)
|
self.__writeln(2, "POST", post)
|
||||||
if ctry != u'Country (not provided)':
|
if ctry:
|
||||||
self.__writeln(2, "CTRY", ctry)
|
self.__writeln(2, "CTRY", ctry)
|
||||||
if phon != '':
|
if phon:
|
||||||
self.__writeln(1, "PHON", phon)
|
self.__writeln(1, "PHON", phon)
|
||||||
if mail != '':
|
|
||||||
self.__writeln(1, "PHON", mail)
|
|
||||||
|
|
||||||
def __write_individuals(self):
|
def __write_individuals(self):
|
||||||
"""
|
"""
|
||||||
@ -616,11 +637,12 @@ class GedcomWriter(UpdateCallback):
|
|||||||
sorted = []
|
sorted = []
|
||||||
for handle in self.plist:
|
for handle in self.plist:
|
||||||
person = self.db.get_person_from_handle (handle)
|
person = self.db.get_person_from_handle (handle)
|
||||||
data = (person.get_gramps_id (), person)
|
data = (person.get_gramps_id (), handle)
|
||||||
sorted.append (data)
|
sorted.append (data)
|
||||||
sorted.sort()
|
sorted.sort()
|
||||||
|
|
||||||
for (gramps_id, person) in sorted:
|
for handle in [ data[1] for data in sorted]:
|
||||||
|
person = self.db.get_person_from_handle (handle)
|
||||||
self.__write_person(person)
|
self.__write_person(person)
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@ -645,15 +667,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.__write_child_families(person)
|
self.__write_child_families(person)
|
||||||
self.__write_parent_families(person)
|
self.__write_parent_families(person)
|
||||||
self.__write_person_sources(person)
|
self.__write_person_sources(person)
|
||||||
|
self.__write_person_objects(person)
|
||||||
if self.obje:
|
|
||||||
for url in person.get_url_list():
|
|
||||||
self.__writeln(1, 'OBJE')
|
|
||||||
self.__writeln(2, 'FORM', 'URL')
|
|
||||||
if url.get_description():
|
|
||||||
self.__writeln(2, 'TITL', url.get_description())
|
|
||||||
if url.get_path():
|
|
||||||
self.__writeln(2, 'FILE', url.get_path())
|
|
||||||
|
|
||||||
for notehandle in person.get_note_list():
|
for notehandle in person.get_note_list():
|
||||||
self.write_note(1, notehandle)
|
self.write_note(1, notehandle)
|
||||||
@ -694,9 +708,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if etype in (RelLib.EventType.BIRTH, RelLib.EventType.DEATH):
|
if etype in (RelLib.EventType.BIRTH, RelLib.EventType.DEATH):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if self.private and event.get_privacy():
|
|
||||||
continue
|
|
||||||
|
|
||||||
val = GedcomInfo.personalConstantEvents.get(
|
val = GedcomInfo.personalConstantEvents.get(
|
||||||
etype, self.target_ged.gramps2tag(etype))
|
etype, self.target_ged.gramps2tag(etype))
|
||||||
|
|
||||||
@ -762,8 +773,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
def __write_attributes(self, person):
|
def __write_attributes(self, person):
|
||||||
for attr in person.get_attribute_list():
|
for attr in person.get_attribute_list():
|
||||||
if self.private and attr.get_privacy():
|
|
||||||
continue
|
|
||||||
|
|
||||||
t = int(attr.get_type())
|
t = int(attr.get_type())
|
||||||
name = GedcomInfo.personalConstantAttributes.get(t)
|
name = GedcomInfo.personalConstantAttributes.get(t)
|
||||||
@ -795,13 +804,10 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
def __write_addresses(self, person):
|
def __write_addresses(self, person):
|
||||||
for addr in person.get_address_list():
|
for addr in person.get_address_list():
|
||||||
if self.private and addr.get_privacy():
|
|
||||||
continue
|
|
||||||
self.__writeln(1, 'RESI')
|
self.__writeln(1, 'RESI')
|
||||||
self.print_date("2 DATE", addr.get_date_object())
|
self.print_date("2 DATE", addr.get_date_object())
|
||||||
if self.resi == 0:
|
if self.resi == 0:
|
||||||
self.write_long_text("ADDR", 2,
|
self.__writeln(2, "ADDR", addr.get_street())
|
||||||
self.cnvtxt(addr.get_street()))
|
|
||||||
if addr.get_city():
|
if addr.get_city():
|
||||||
self.__writeln(3, 'CITY', addr.get_city())
|
self.__writeln(3, 'CITY', addr.get_city())
|
||||||
if addr.get_state():
|
if addr.get_state():
|
||||||
@ -828,9 +834,8 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.write_source_ref(2, srcref)
|
self.write_source_ref(2, srcref)
|
||||||
|
|
||||||
def __write_photos(self, media_list):
|
def __write_photos(self, media_list):
|
||||||
if self.images and not self.private:
|
if self.images:
|
||||||
for photo in media_list:
|
for photo in media_list:
|
||||||
if not photo.get_privacy():
|
|
||||||
self.write_photo(photo, 1)
|
self.write_photo(photo, 1)
|
||||||
|
|
||||||
def __write_child_families(self, person):
|
def __write_child_families(self, person):
|
||||||
@ -860,34 +865,15 @@ class GedcomWriter(UpdateCallback):
|
|||||||
for srcref in person.get_source_references():
|
for srcref in person.get_source_references():
|
||||||
self.write_source_ref(1, srcref)
|
self.write_source_ref(1, srcref)
|
||||||
|
|
||||||
def write_copy(self):
|
def __write_person_objects(self, person):
|
||||||
t = time.localtime(time.time())
|
if self.obje:
|
||||||
y = t[0]
|
for url in person.get_url_list():
|
||||||
|
self.__writeln(1, 'OBJE')
|
||||||
if self.copy == 0:
|
self.__writeln(2, 'FORM', 'URL')
|
||||||
o = self.db.get_researcher().get_name()
|
if url.get_description():
|
||||||
self.__writeln(1, 'COPR', 'Copyright (c) %d %s.' % (y, o))
|
self.__writeln(2, 'TITL', url.get_description())
|
||||||
elif self.copy == 1:
|
if url.get_path():
|
||||||
o = self.db.get_researcher().get_name()
|
self.__writeln(2, 'FILE', url.get_path())
|
||||||
self.__writeln(1, 'COPR', 'Copyright (c) %d %s. '
|
|
||||||
'See additional copyright NOTE below.' % (y, o))
|
|
||||||
|
|
||||||
def gnu_fdl(self):
|
|
||||||
if self.copy != 1:
|
|
||||||
return
|
|
||||||
|
|
||||||
t = time.localtime(time.time())
|
|
||||||
y = t[0]
|
|
||||||
o = self.db.get_researcher().get_name()
|
|
||||||
|
|
||||||
self.__writeln(1, 'NOTE', 'Copyright (c) %d %s.' % (y, o))
|
|
||||||
try:
|
|
||||||
f = open(const.fdl, "r")
|
|
||||||
for line in f.readlines():
|
|
||||||
self.__writeln(2, 'CONT', line)
|
|
||||||
f.close()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __write_families(self):
|
def __write_families(self):
|
||||||
sorted = []
|
sorted = []
|
||||||
@ -896,8 +882,8 @@ class GedcomWriter(UpdateCallback):
|
|||||||
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, family)
|
||||||
sorted.append (data)
|
sorted.append (data)
|
||||||
|
|
||||||
sorted.sort ()
|
sorted.sort ()
|
||||||
|
|
||||||
for (gramps_id, family_handle, family) in sorted:
|
for (gramps_id, family_handle, family) in sorted:
|
||||||
father_alive = mother_alive = 0
|
father_alive = mother_alive = 0
|
||||||
self.__writeln(0, '@%s@' % gramps_id, 'FAM' )
|
self.__writeln(0, '@%s@' % gramps_id, 'FAM' )
|
||||||
@ -923,7 +909,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
for event_ref in family.get_event_ref_list():
|
for event_ref in family.get_event_ref_list():
|
||||||
event_handle = event_ref.ref
|
event_handle = event_ref.ref
|
||||||
event = self.db.get_event_from_handle(event_handle)
|
event = self.db.get_event_from_handle(event_handle)
|
||||||
if not event or self.private and event.get_privacy():
|
if not event:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
etype = int(event.get_type())
|
etype = int(event.get_type())
|
||||||
@ -955,8 +941,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.dump_event_stats(event, event_ref)
|
self.dump_event_stats(event, event_ref)
|
||||||
|
|
||||||
for attr in family.get_attribute_list():
|
for attr in family.get_attribute_list():
|
||||||
if self.private and attr.get_privacy():
|
|
||||||
continue
|
|
||||||
|
|
||||||
t = int(attr.get_type())
|
t = int(attr.get_type())
|
||||||
name = GedcomInfo.familyConstantAttributes.get(t)
|
name = GedcomInfo.familyConstantAttributes.get(t)
|
||||||
@ -986,23 +970,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if not person:
|
if not person:
|
||||||
continue
|
continue
|
||||||
self.__writeln(1, 'CHIL', '@%s@' % person.get_gramps_id())
|
self.__writeln(1, 'CHIL', '@%s@' % person.get_gramps_id())
|
||||||
if self.adopt == GedcomInfo.ADOPT_FTW:
|
|
||||||
if person.get_main_parents_family_handle() \
|
|
||||||
== family.get_handle():
|
|
||||||
self.__writeln(2, '_FREL', 'Natural')
|
|
||||||
self.__writeln(2, '_MREL', 'Natural')
|
|
||||||
else:
|
|
||||||
if family.get_handle() in \
|
|
||||||
person.get_parent_family_handle_list():
|
|
||||||
for child_ref in family.get_child_ref_list():
|
|
||||||
if child_ref.ref == person.handle:
|
|
||||||
self.__writeln(2, '_FREL', child_ref.frel.xml_str())
|
|
||||||
self.__writeln(2, '_MREL', child_ref.mrel.xml_str())
|
|
||||||
break
|
|
||||||
if self.adopt == GedcomInfo.ADOPT_LEGACY:
|
|
||||||
if family.get_handle() in \
|
|
||||||
person.get_parent_family_handle_list():
|
|
||||||
self.__writeln(2, '_STAT', child_ref.mrel.xml_str())
|
|
||||||
|
|
||||||
for srcref in family.get_source_references():
|
for srcref in family.get_source_references():
|
||||||
self.write_source_ref(1, srcref)
|
self.write_source_ref(1, srcref)
|
||||||
@ -1010,8 +977,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if self.images:
|
if self.images:
|
||||||
photos = family.get_media_list ()
|
photos = family.get_media_list ()
|
||||||
for photo in photos:
|
for photo in photos:
|
||||||
if self.private and photo.get_privacy():
|
|
||||||
continue
|
|
||||||
self.write_photo(photo, 1)
|
self.write_photo(photo, 1)
|
||||||
|
|
||||||
for notehandle in family.get_note_list():
|
for notehandle in family.get_note_list():
|
||||||
@ -1022,7 +987,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
def write_note(self, level, handle):
|
def write_note(self, level, handle):
|
||||||
note = self.db.get_note_from_handle(handle)
|
note = self.db.get_note_from_handle(handle)
|
||||||
self.write_long_text("NOTE", level, self.cnvtxt(note.get()))
|
self.__writeln(level, "NOTE", note.get())
|
||||||
|
|
||||||
def __write_sources(self):
|
def __write_sources(self):
|
||||||
sorted = []
|
sorted = []
|
||||||
@ -1030,8 +995,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
source = self.db.get_source_from_handle(handle)
|
source = self.db.get_source_from_handle(handle)
|
||||||
if not source:
|
if not source:
|
||||||
continue
|
continue
|
||||||
if self.private and source.private:
|
|
||||||
continue
|
|
||||||
data = (source.get_gramps_id(), source)
|
data = (source.get_gramps_id(), source)
|
||||||
sorted.append (data)
|
sorted.append (data)
|
||||||
sorted.sort ()
|
sorted.sort ()
|
||||||
@ -1039,21 +1002,20 @@ class GedcomWriter(UpdateCallback):
|
|||||||
for (source_id, source) in sorted:
|
for (source_id, source) in sorted:
|
||||||
self.__writeln(0, '@%s@' % source_id, 'SOUR')
|
self.__writeln(0, '@%s@' % source_id, 'SOUR')
|
||||||
if source.get_title():
|
if source.get_title():
|
||||||
self.write_long_text('TITL', 1, source.get_title())
|
self.__writeln(1, 'TITL', source.get_title())
|
||||||
|
|
||||||
if source.get_author():
|
if source.get_author():
|
||||||
self.write_long_text("AUTH", 1, source.get_author())
|
self.__writeln(1, "AUTH", source.get_author())
|
||||||
|
|
||||||
if source.get_publication_info():
|
if source.get_publication_info():
|
||||||
self.write_long_text("PUBL", 1, source.get_publication_info())
|
self.__writeln(1, "PUBL", source.get_publication_info())
|
||||||
|
|
||||||
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:
|
if self.images:
|
||||||
photos = source.get_media_list ()
|
photos = source.get_media_list ()
|
||||||
for photo in photos:
|
for photo in photos:
|
||||||
if self.private and photo.get_privacy():
|
|
||||||
continue
|
|
||||||
self.write_photo(photo, 1)
|
self.write_photo(photo, 1)
|
||||||
|
|
||||||
for reporef in source.get_reporef_list():
|
for reporef in source.get_reporef_list():
|
||||||
@ -1068,8 +1030,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
sorted = []
|
sorted = []
|
||||||
for handle in self.rlist:
|
for handle in self.rlist:
|
||||||
repo = self.db.get_repository_from_handle(handle)
|
repo = self.db.get_repository_from_handle(handle)
|
||||||
if self.private and repo.private:
|
|
||||||
continue
|
|
||||||
repo_id = repo.get_gramps_id()
|
repo_id = repo.get_gramps_id()
|
||||||
sorted.append((repo_id, repo))
|
sorted.append((repo_id, repo))
|
||||||
|
|
||||||
@ -1080,9 +1040,9 @@ class GedcomWriter(UpdateCallback):
|
|||||||
for (repo_id, repo) in sorted:
|
for (repo_id, repo) in sorted:
|
||||||
self.__writeln(0, '@%s@' % repo_id, 'REPO' )
|
self.__writeln(0, '@%s@' % repo_id, 'REPO' )
|
||||||
if repo.get_name():
|
if repo.get_name():
|
||||||
self.write_long_text('NAME', 1, repo.get_name())
|
self.__writeln(1, 'NAME', repo.get_name())
|
||||||
for addr in repo.get_address_list():
|
for addr in repo.get_address_list():
|
||||||
self.write_long_text("ADDR", 1, addr.get_street())
|
self.__writeln(1, "ADDR", addr.get_street())
|
||||||
if addr.get_city():
|
if addr.get_city():
|
||||||
self.__writeln(2, 'CITY', addr.get_city())
|
self.__writeln(2, 'CITY', addr.get_city())
|
||||||
if addr.get_state():
|
if addr.get_state():
|
||||||
@ -1122,7 +1082,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
|
|
||||||
if event_ref:
|
if event_ref:
|
||||||
event = self.db.get_event_from_handle(event_ref.ref)
|
event = self.db.get_event_from_handle(event_ref.ref)
|
||||||
if not (self.private and event.get_privacy()):
|
|
||||||
if (not event.get_date_object().is_empty()) \
|
if (not event.get_date_object().is_empty()) \
|
||||||
or event.get_place_handle():
|
or event.get_place_handle():
|
||||||
self.__writeln(1, key)
|
self.__writeln(1, key)
|
||||||
@ -1142,39 +1101,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
time_val[4],
|
time_val[4],
|
||||||
time_val[5]))
|
time_val[5]))
|
||||||
|
|
||||||
def write_long_text(self, tag, level, note):
|
|
||||||
prefix = "%d %s" % (level, tag)
|
|
||||||
textlines = note.split('\n')
|
|
||||||
if len(note) == 0:
|
|
||||||
self.writeln(prefix)
|
|
||||||
else:
|
|
||||||
for line in textlines:
|
|
||||||
ll = len(line)
|
|
||||||
if ll == 0:
|
|
||||||
self.writeln("%s " % prefix)
|
|
||||||
prefix = "%d CONT" % (level+1)
|
|
||||||
continue
|
|
||||||
while ll > 0:
|
|
||||||
brkpt = 70
|
|
||||||
if ll > brkpt:
|
|
||||||
while (ll > brkpt and line[brkpt].isspace()):
|
|
||||||
brkpt = brkpt+1
|
|
||||||
if ll == brkpt:
|
|
||||||
self.writeln("%s %s" % (prefix, line))
|
|
||||||
line = ''
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self.writeln("%s %s" % (prefix, line[0:brkpt+1]))
|
|
||||||
line = line[brkpt+1:]
|
|
||||||
else:
|
|
||||||
self.writeln("%s %s" % (prefix, line))
|
|
||||||
line = ""
|
|
||||||
if len(line) > 0:
|
|
||||||
prefix = "%d CONC" % (level+1)
|
|
||||||
else:
|
|
||||||
prefix = "%d CONT" % (level+1)
|
|
||||||
ll = len(line)
|
|
||||||
|
|
||||||
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()
|
||||||
self.print_date("2 DATE", dateobj)
|
self.print_date("2 DATE", dateobj)
|
||||||
@ -1211,18 +1137,12 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if self.images:
|
if self.images:
|
||||||
photos = event.get_media_list()
|
photos = event.get_media_list()
|
||||||
for photo in photos:
|
for photo in photos:
|
||||||
if self.private and photo.get_privacy():
|
|
||||||
continue
|
|
||||||
self.write_photo(photo, 2)
|
self.write_photo(photo, 2)
|
||||||
if place:
|
if place:
|
||||||
for photo in place.get_media_list():
|
for photo in place.get_media_list():
|
||||||
if self.private and photo.get_privacy():
|
|
||||||
continue
|
|
||||||
self.write_photo(photo, 2)
|
self.write_photo(photo, 2)
|
||||||
|
|
||||||
def write_ord(self, ord, index):
|
def write_ord(self, ord, index):
|
||||||
if self.private and ord.private:
|
|
||||||
return
|
|
||||||
self.__writeln(index, lds_ord_name[ord.get_type()])
|
self.__writeln(index, lds_ord_name[ord.get_type()])
|
||||||
self.print_date("%d DATE" % (index + 1), ord.get_date_object())
|
self.print_date("%d DATE" % (index + 1), ord.get_date_object())
|
||||||
if ord.get_family_handle():
|
if ord.get_family_handle():
|
||||||
@ -1263,8 +1183,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.writeln("%s %s" % (prefix, self.cnvtxt(date.get_text())))
|
self.writeln("%s %s" % (prefix, self.cnvtxt(date.get_text())))
|
||||||
|
|
||||||
def write_person_name(self, name, nick):
|
def write_person_name(self, name, nick):
|
||||||
if self.private and name.private:
|
|
||||||
return
|
|
||||||
firstname = "%s %s" % (name.get_first_name(),
|
firstname = "%s %s" % (name.get_first_name(),
|
||||||
name.get_patronymic().strip())
|
name.get_patronymic().strip())
|
||||||
surname = name.get_surname().replace('/', '?')
|
surname = name.get_surname().replace('/', '?')
|
||||||
@ -1308,8 +1226,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.write_source_ref(2, srcref)
|
self.write_source_ref(2, srcref)
|
||||||
|
|
||||||
def write_source_ref(self, level, ref):
|
def write_source_ref(self, level, ref):
|
||||||
if self.private and ref.private:
|
|
||||||
return
|
|
||||||
|
|
||||||
src_handle = ref.get_reference_handle()
|
src_handle = ref.get_reference_handle()
|
||||||
|
|
||||||
@ -1317,8 +1233,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
return
|
return
|
||||||
|
|
||||||
src = self.db.get_source_from_handle(src_handle)
|
src = self.db.get_source_from_handle(src_handle)
|
||||||
if self.private and src.private:
|
|
||||||
return
|
|
||||||
|
|
||||||
self.slist.add(src_handle)
|
self.slist.add(src_handle)
|
||||||
|
|
||||||
@ -1334,7 +1248,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
# Cap the maximum level
|
# Cap the maximum level
|
||||||
conf = min(conf, RelLib.SourceRef.CONF_VERY_HIGH)
|
conf = min(conf, RelLib.SourceRef.CONF_VERY_HIGH)
|
||||||
if conf != RelLib.SourceRef.CONF_NORMAL and conf != -1:
|
if conf != RelLib.SourceRef.CONF_NORMAL and conf != -1:
|
||||||
self.write_long_text("QUAY", level+1, str(quay_map[conf]))
|
self.__writeln(level+1, "QUAY", str(quay_map[conf]))
|
||||||
|
|
||||||
if len(ref.get_note_list()) > 0:
|
if len(ref.get_note_list()) > 0:
|
||||||
|
|
||||||
@ -1351,7 +1265,7 @@ class GedcomWriter(UpdateCallback):
|
|||||||
if ref_text != "" or not ref.get_date_object().is_empty():
|
if ref_text != "" or not ref.get_date_object().is_empty():
|
||||||
self.__writeln(level+1, 'DATA')
|
self.__writeln(level+1, 'DATA')
|
||||||
if ref_text != "":
|
if ref_text != "":
|
||||||
self.write_long_text("TEXT", level+2, self.cnvtxt(ref_text))
|
self.__writeln(level+1, "TEXT", ref_text)
|
||||||
pfx = "%d DATE" % (level+2)
|
pfx = "%d DATE" % (level+2)
|
||||||
self.print_date(pfx, ref.get_date_object())
|
self.print_date(pfx, ref.get_date_object())
|
||||||
|
|
||||||
@ -1417,8 +1331,6 @@ class GedcomWriter(UpdateCallback):
|
|||||||
self.write_note(level+1, notehandle)
|
self.write_note(level+1, notehandle)
|
||||||
|
|
||||||
def write_place(self, place, level):
|
def write_place(self, place, level):
|
||||||
if self.private and place.private:
|
|
||||||
return
|
|
||||||
place_name = place.get_title()
|
place_name = place.get_title()
|
||||||
self.__writeln(level, "PLAC", place_name.replace('\r', ' '))
|
self.__writeln(level, "PLAC", place_name.replace('\r', ' '))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user