* src/GrampsDb/_WriteXML.py: Handle some of new XML.

svn: r5840
This commit is contained in:
Alex Roitman 2006-01-27 02:13:17 +00:00
parent da0fa1a5cf
commit 94523aa953
2 changed files with 84 additions and 50 deletions

View File

@ -13,6 +13,7 @@
* src/GrampsDb/_GrampsBSDDB.py: Convert family and parent family
relations from integer to tuple on upgrade.
* src/GrampsDb/_WriteGedcom.py: Convert from tuple to string.
* src/GrampsDb/_WriteXML.py: Handle some of new XML.
2006-01-25 Don Allingham <don@gramps-project.org>
* src/DisplayTabs.py: use idle_loop to load data for source

View File

@ -202,11 +202,12 @@ class XmlWriter:
owner = self.db.get_researcher()
person_len = self.db.get_number_of_people()
family_len = len(self.db.get_family_handles())
event_len = len(self.db.get_event_handles())
source_len = len(self.db.get_source_handles())
place_len = len(self.db.get_place_handles())
objList = self.db.get_media_object_handles()
total = person_len + family_len + place_len + source_len
total = person_len + family_len + event_len + place_len + source_len
self.g.write('<?xml version="1.0" encoding="UTF-8"?>\n')
self.g.write('<!DOCTYPE database '
@ -239,25 +240,22 @@ class XmlWriter:
self.g.write(" <people")
person = self.db.get_default_person()
if person:
self.g.write(' default="%s" home="%s"' %
(person.get_gramps_id (),
"_"+person.get_handle()))
self.g.write(">\n")
self.g.write(' default="%s" home="_%s">\n' %
(person.gramps_id,person.handle))
keys = self.db.get_person_handles(sort_handles=False)
sorted_keys = []
for key in keys:
person = self.db.get_person_from_handle (key)
value = (person.get_gramps_id (), person)
sorted_keys.append (value)
sorted_keys.append ((person.gramps_id, person))
sorted_keys.sort ()
for (gramps_id, person) in sorted_keys:
if self.callback and count % delta == 0:
self.callback(float(count)/float(total))
count += 1
self.write_id("person",person,2)
self.write_primary_tag("person",person,2)
if person.get_gender() == RelLib.Person.MALE:
self.write_line("gender","M",3)
elif person.get_gender() == RelLib.Person.FEMALE:
@ -269,13 +267,10 @@ class XmlWriter:
self.dump_name(name,True,3)
self.write_line("nick",person.get_nick_name(),3)
birth = self.db.get_event_from_handle(person.get_birth_handle())
death = self.db.get_event_from_handle(person.get_death_handle())
self.dump_event(birth,3)
self.dump_event(death,3)
for event_handle in person.get_event_list():
event = self.db.get_event_from_handle(event_handle)
self.dump_event(event,3)
self.dump_event_ref(person.birth_ref,3)
self.dump_event_ref(person.death_ref,3)
for event_ref in person.get_event_ref_list():
self.dump_event_ref(event_ref,3)
self.dump_ordinance("baptism",person.get_lds_baptism(),3)
self.dump_ordinance("endowment",person.get_lds_endowment(),3)
@ -351,9 +346,8 @@ class XmlWriter:
self.write_ref("father",fhandle,3)
if mhandle:
self.write_ref("mother",mhandle,3)
for event_handle in family.get_event_list():
event = self.db.get_event_from_handle(event_handle)
self.dump_event(event,3)
for event_ref in family.get_event_ref_list():
self.dump_event_ref(event_ref,3)
self.dump_ordinance("sealed_to_spouse",family.get_lds_sealing(),3)
self.write_media_list(family.get_media_list())
@ -368,6 +362,22 @@ class XmlWriter:
self.g.write(" </family>\n")
self.g.write(" </families>\n")
if event_len > 0:
self.g.write(" <events>\n")
keys = self.db.get_event_handles()
sorted_keys = []
for key in keys:
event = self.db.get_event_from_handle(key)
sorted_keys.append((event.gramps_id, event))
sorted_keys.sort ()
for (gramps_id, event) in sorted_keys:
if self.callback and count % delta == 0:
self.callback(float(count)/float(total))
count = count + 1
self.write_event(event,2)
self.g.write(" </events>\n")
if source_len > 0:
self.g.write(" <sources>\n")
keys = self.db.get_source_handles ()
@ -488,17 +498,35 @@ class XmlWriter:
self.g.write(' %s<comment>%s</comment>\n' % (sp,com))
self.g.write('%s</witness>\n' % sp)
def dump_event(self,event,index=1):
def dump_event_ref(self,eventref,index=1):
if not eventref or not eventref.ref:
return
priv_text = conf_priv(eventref)
role = _ConstXML.str_for_xml(_ConstXML.event_roles,eventref.role)
if role:
role_text = ' role="%s"' % role
else:
role_text = ''
if eventref.get_note() == "":
started = self.write_ref('eventref',eventref.ref,index,
close=True,extra_text=priv_text+role_text)
else:
started = self.write_ref('eventref',eventref.ref,index,
close=False,extra_text=priv_text+role_text)
self.write_note("note",eventref.get_note_object(),index+1)
self.g.write('%s</eventref>\n' % (" "*index))
def write_event(self,event,index=1):
if not event or event.is_empty():
return
self.write_primary_tag("event",event,2)
sp = " " * index
etype = _ConstXML.str_for_xml(_ConstXML.events,event.get_type())
self.g.write('%s<event type="%s"%s>\n' %
(sp,self.fix(etype),conf_priv(event)))
self.g.write(' %s<type>%s</type>\n' % (sp,self.fix(etype)) )
self.write_date(event.get_date_object(),index+1)
#self.write_witness(event.get_witness_list(),index+1)
self.write_ref("place",event.get_place_handle(),index+1)
self.write_line("cause",event.get_cause(),index+1)
self.write_line("description",event.get_description(),index+1)
@ -556,37 +584,41 @@ class XmlWriter:
self.write_date(d,index+1)
self.g.write("%s</sourceref>\n" % (" " * index))
def write_ref(self,label,gid,index=1):
if gid:
self.g.write('%s<%s hlink="%s"/>\n' % (" "*index,label,"_"+gid))
def write_ref(self,tagname,handle,index=1,close=True,extra_text=''):
if handle:
if close:
close_tag = "/"
else:
close_tag = ""
self.g.write('%s<%s hlink="_%s"%s%s>\n'
% (" "*index,tagname,handle,extra_text,close_tag))
def write_id(self,label,person,index=1):
if person:
self.g.write('%s<%s id="%s" handle="%s" change="%d"' %
(" "*index,label,person.get_gramps_id(),"_"+person.get_handle(),
person.get_change_time()))
marker = _ConstXML.str_for_xml(_ConstXML.marker_types,
person.get_marker())
if marker:
self.g.write(' marker="%s"' % marker)
self.g.write('>\n')
def write_primary_tag(self,tagname,obj,index=1):
if not obj:
return
marker = _ConstXML.str_for_xml(_ConstXML.marker_types,
obj.get_marker())
if marker:
marker_text = ' marker="%s"' % marker
else:
marker_text = ''
priv_text = conf_priv(obj)
change_text = ' change="%d"' % obj.get_change_time()
handle_id_text = ' handle="_%s" id="%s"' % (obj.handle,obj.gramps_id)
obj_text = '%s<%s' % (" "*index,tagname)
self.g.write(obj_text + handle_id_text + priv_text + marker_text +
change_text + '>\n')
def write_family_handle(self,family,index=1):
self.write_primary_tag('family',family,index)
if family:
rel = _ConstXML.str_for_xml(_ConstXML.family_relations,
family.get_relationship())
marker = _ConstXML.str_for_xml(_ConstXML.marker_types,
family.get_marker())
sp = " " * index
self.g.write('%s<family id="%s" handle="%s" change="%d"' %
(sp,family.get_gramps_id(),"_"+family.get_handle(),family.get_change_time()))
if marker:
self.g.write(' marker="%s"' % marker)
if rel != "":
self.g.write(' type="%s">\n' % rel )
# const.save_frel(rel))
else:
self.g.write('>\n')
self.g.write('%s<rel type="%s"/>\n' % (" "*index,rel) )
def write_last(self,name,indent=1):
p = name.get_surname_prefix()
@ -599,9 +631,10 @@ class XmlWriter:
self.g.write(' group="%s"' % g)
self.g.write('>%s</last>\n' % self.fix(n))
def write_line(self,label,value,indent=1):
def write_line(self,tagname,value,indent=1):
if value:
self.g.write('%s<%s>%s</%s>\n' % (' '*indent,label,self.fix(value),label))
self.g.write('%s<%s>%s</%s>\n' %
(' '*indent,tagname,self.fix(value),tagname))
def get_iso_date(self,date):
if date[2] == 0: