diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 9efd1ddd6..96e5820bd 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -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 * src/DisplayTabs.py: use idle_loop to load data for source diff --git a/gramps2/src/GrampsDb/_WriteXML.py b/gramps2/src/GrampsDb/_WriteXML.py index ad86b24e3..09a1c5d06 100644 --- a/gramps2/src/GrampsDb/_WriteXML.py +++ b/gramps2/src/GrampsDb/_WriteXML.py @@ -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('\n') 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(" \n") self.g.write(" \n") + if event_len > 0: + self.g.write(" \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(" \n") + if source_len > 0: self.g.write(" \n") keys = self.db.get_source_handles () @@ -488,17 +498,35 @@ class XmlWriter: self.g.write(' %s%s\n' % (sp,com)) self.g.write('%s\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\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\n' % - (sp,self.fix(etype),conf_priv(event))) + self.g.write(' %s%s\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\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\n' % rel ) - # const.save_frel(rel)) - else: - self.g.write('>\n') + self.g.write('%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\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\n' % (' '*indent,label,self.fix(value),label)) + self.g.write('%s<%s>%s\n' % + (' '*indent,tagname,self.fix(value),tagname)) def get_iso_date(self,date): if date[2] == 0: