diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index ed7ec3c0c..c32a940fc 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,7 @@ 2006-04-13 Don Allingham + * src/GrampsDb/_ReadGedcom.py: handle ASSO tag + * src/GrampsDb/_GedTokens.py: handle ASSO tag + * example/gedcom/sample.ged: add ASSO tag * src/GrampsDb/_WriteXML.py: write old style XML. * src/Editors/_EditPersonRef.py: display person correctly in label * src/Editors/_EditFamily.py: comment out unused tab diff --git a/gramps2/example/gedcom/sample.ged b/gramps2/example/gedcom/sample.ged index 3dff82cf8..50908d465 100755 --- a/gramps2/example/gedcom/sample.ged +++ b/gramps2/example/gedcom/sample.ged @@ -58,6 +58,10 @@ 1 NAME Edwin Michael /Smith/ 2 NOTE This is a note attached to a name 2 SOUR @S1600@ +1 ASSO @I07@ +2 RELA SomeRelationship +2 NOTE This is a note for the ASSOC import +2 SOUR @S1600@ 1 SEX M 1 TITL Grand Poobah 1 OBJE @@ -516,6 +520,7 @@ 2 DATE 26 JUN 34 B.C. 2 PLAC Hayward, Alameda Co., CA 0 @F01@ FAM +1 HUSB @IC3a2b1@ 1 WIFE @I40@ 1 CHIL @I42@ 2 _FREL Adopted diff --git a/gramps2/src/GrampsDb/_GedTokens.py b/gramps2/src/GrampsDb/_GedTokens.py index 3f5f807be..f7127ba25 100644 --- a/gramps2/src/GrampsDb/_GedTokens.py +++ b/gramps2/src/GrampsDb/_GedTokens.py @@ -123,6 +123,7 @@ TOKEN__WTN = 103 TOKEN_HEAD = 105 TOKEN_CALN = 106 TOKEN_MEDI = 107 +TOKEN_RELA = 108 tokens = { "HEAD" : TOKEN_HEAD, "MEDI" : TOKEN_MEDI, @@ -208,5 +209,5 @@ tokens = { "_UID" : TOKEN__UID, "VERS" : TOKEN_VERS, "VERSION" : TOKEN_VERS, "WIFE" : TOKEN_WIFE, "_WITN" : TOKEN__WITN, "_WTN" : TOKEN__WTN, - "_CHUR" : TOKEN_IGNORE, + "_CHUR" : TOKEN_IGNORE,"RELA" : TOKEN_RELA, } diff --git a/gramps2/src/GrampsDb/_ReadGedcom.py b/gramps2/src/GrampsDb/_ReadGedcom.py index 5cca153e1..fcf6e0024 100644 --- a/gramps2/src/GrampsDb/_ReadGedcom.py +++ b/gramps2/src/GrampsDb/_ReadGedcom.py @@ -541,7 +541,7 @@ class GedcomParser: TOKEN_RFN : self.func_person_attr, TOKEN__UID : self.func_person_attr, TOKEN_CHAN : self.skip_record, - TOKEN_ASSO : self.skip_record, + TOKEN_ASSO : self.func_person_asso, TOKEN_ANCI : self.skip_record, TOKEN_DESI : self.skip_record, TOKEN_RIN : self.skip_record, @@ -808,7 +808,8 @@ class GedcomParser: if mother: mother.add_address(self.addr) self.db.commit_person(mother, self.trans) - for child_handle in self.family.get_child_handle_list(): + for child_ref in self.family.get_child_ref_list(): + child_handle = child_ref.ref child = self.db.get_person_from_handle(child_handle) if child: child.add_address(self.addr) @@ -1105,26 +1106,12 @@ class GedcomParser: mrel,frel = self.parse_ftw_relations(2) gid = matches[2] child = self.find_or_create_person(self.map_gid(gid[1:-1])) - self.family.add_child_handle(child.handle) - change = False - - for f in child.get_parent_family_handle_list(): - if f[0] == self.family.handle: - if (mrel != f[1] or frel != f[2]): - change = True - child.change_parent_family_handle(self.family.handle, - mrel, frel) - break - else: - change = True - if mrel in rel_types and frel in rel_types: - child.set_main_parent_family_handle(self.family.handle) - else: - if child.get_main_parents_family_handle() == self.family.handle: - child.set_main_parent_family_handle(None) - if change: - self.db.commit_person(child, self.trans) + ref = RelLib.ChildRef() + ref.ref = child.handle + ref.set_father_relation(frel) + ref.set_mother_relation(mrel) + self.family.add_child_ref(ref) elif matches[1] == TOKEN_NCHI: a = RelLib.Attribute() a.set_type((RelLib.Attribute.NUM_CHILD,'')) @@ -1540,7 +1527,9 @@ class GedcomParser: mrel,frel = self.parse_adopt_famc(level+1); if self.person.get_main_parents_family_handle() == handle: self.person.set_main_parent_family_handle(None) - self.person.add_parent_family_handle(handle,mrel,frel) + self.person.add_parent_family_handle(handle) + if mrel[0] != RelLib.ChildRef.BIRTH or frel[0] != RelLib.ChildRef.BIRTH: + print "NOT FIXED YET" elif matches[1] == TOKEN_PLAC: val = matches[2] place = self.find_or_create_place(val) @@ -2038,6 +2027,32 @@ class GedcomParser: state.name_cnt += 1 self.parse_name(name,2,state) + def func_person_asso(self, matches, state): + print matches + gid = matches[2] + handle = self.find_person_handle(self.map_gid(gid[1:-1])) + ref = RelLib.PersonRef() + print handle + ref.ref = handle + + self.person.add_person_ref(ref) + + while True: + matches = self.get_next() + + if int(matches[0]) < 2: + self.backup() + return + elif matches[1] == TOKEN_RELA: + ref.rel = matches[2] + elif matches[1] == TOKEN_SOUR: + ref.add_source_reference(self.handle_source(matches,2)) + elif matches[1] == TOKEN_NOTE: + note = self.parse_note(matches,ref,2,"") + ref.set_note(note) + else: + self.barf(2) + def func_person_alt_name(self,matches,state): aka = RelLib.Name() try: @@ -2107,7 +2122,8 @@ class GedcomParser: else: if state.person.get_main_parents_family_handle() == handle: state.person.set_main_parent_family_handle(None) - state.person.add_parent_family_handle(handle,ftype,ftype) + state.person.add_parent_family_handle(handle) + print "NEED TO CHANGE CHILDREF TO",ftype,ftype def func_person_resi(self,matches,state): addr = RelLib.Address()