2006-06-08 Don Allingham <don@gramps-project.org>
* src/GrampsDb/_ReadGedcom.py: handle more bizarre and illegal statements output by other programs. svn: r6875
This commit is contained in:
parent
4ab22011aa
commit
5c89f8ed1e
@ -1,3 +1,7 @@
|
|||||||
|
2006-06-08 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GrampsDb/_ReadGedcom.py: handle more bizarre and illegal
|
||||||
|
statements output by other programs.
|
||||||
|
|
||||||
2006-06-07 Alex Roitman <shura@gramps-project.org>
|
2006-06-07 Alex Roitman <shura@gramps-project.org>
|
||||||
* src/plugins/Check.py (check_for_broken_family_links): Adapt to
|
* src/plugins/Check.py (check_for_broken_family_links): Adapt to
|
||||||
RelLib changes.
|
RelLib changes.
|
||||||
|
@ -547,6 +547,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_CAUS : self.func_event_cause,
|
TOKEN_CAUS : self.func_event_cause,
|
||||||
TOKEN_NOTE : self.func_event_note,
|
TOKEN_NOTE : self.func_event_note,
|
||||||
TOKEN_OFFI : self.func_event_note,
|
TOKEN_OFFI : self.func_event_note,
|
||||||
|
TOKEN_PHON : self.func_event_ignore,
|
||||||
TOKEN__GODP : self.func_event_ignore,
|
TOKEN__GODP : self.func_event_ignore,
|
||||||
TOKEN__WITN : self.func_event_ignore,
|
TOKEN__WITN : self.func_event_ignore,
|
||||||
TOKEN__WTN : self.func_event_ignore,
|
TOKEN__WTN : self.func_event_ignore,
|
||||||
@ -556,8 +557,10 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_IGNORE : self.func_event_ignore,
|
TOKEN_IGNORE : self.func_event_ignore,
|
||||||
TOKEN_STAT : self.func_event_ignore,
|
TOKEN_STAT : self.func_event_ignore,
|
||||||
TOKEN_TEMP : self.func_event_ignore,
|
TOKEN_TEMP : self.func_event_ignore,
|
||||||
|
TOKEN_HUSB : self.func_event_ignore,
|
||||||
|
TOKEN_WIFE : self.func_event_ignore,
|
||||||
TOKEN_OBJE : self.func_event_ignore,
|
TOKEN_OBJE : self.func_event_ignore,
|
||||||
TOKEN_FAMC : self.func_event_ignore,
|
TOKEN_FAMC : self.func_person_birth_famc,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.person_adopt_map = {
|
self.person_adopt_map = {
|
||||||
@ -1188,13 +1191,11 @@ class GedcomParser(UpdateCallback):
|
|||||||
gid = matches[2]
|
gid = matches[2]
|
||||||
handle = self.find_person_handle(self.map_gid(gid[1:-1]))
|
handle = self.find_person_handle(self.map_gid(gid[1:-1]))
|
||||||
self.family.set_father_handle(handle)
|
self.family.set_father_handle(handle)
|
||||||
self.ignore_sub_junk(2)
|
|
||||||
|
|
||||||
def func_family_wife(self, family, matches, level):
|
def func_family_wife(self, family, matches, level):
|
||||||
gid = matches[2]
|
gid = matches[2]
|
||||||
handle = self.find_person_handle(self.map_gid(gid[1:-1]))
|
handle = self.find_person_handle(self.map_gid(gid[1:-1]))
|
||||||
self.family.set_mother_handle(handle)
|
self.family.set_mother_handle(handle)
|
||||||
self.ignore_sub_junk(2)
|
|
||||||
|
|
||||||
def func_family_slgs(self, family, matches, level):
|
def func_family_slgs(self, family, matches, level):
|
||||||
lds_ord = RelLib.LdsOrd()
|
lds_ord = RelLib.LdsOrd()
|
||||||
@ -1448,9 +1449,9 @@ class GedcomParser(UpdateCallback):
|
|||||||
|
|
||||||
if int(matches[0]) < level:
|
if int(matches[0]) < level:
|
||||||
self.backup()
|
self.backup()
|
||||||
return (ftype,note)
|
break
|
||||||
elif matches[1] == TOKEN_PEDI:
|
elif matches[1] == TOKEN_PEDI:
|
||||||
ftype = pedi_type.get(matches[2],RelLib.Person.UNKNOWN)
|
ftype = pedi_type.get(matches[2].lower(),RelLib.ChildRefType.UNKNOWN)
|
||||||
elif matches[1] == TOKEN_SOUR:
|
elif matches[1] == TOKEN_SOUR:
|
||||||
source_ref = self.handle_source(matches,level+1)
|
source_ref = self.handle_source(matches,level+1)
|
||||||
person.primary_name.add_source_reference(source_ref)
|
person.primary_name.add_source_reference(source_ref)
|
||||||
@ -1464,7 +1465,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
else:
|
else:
|
||||||
self.not_recognized(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return (ftype,note)
|
||||||
|
|
||||||
def parse_address(self,address,level):
|
def parse_address(self,address,level):
|
||||||
first = 0
|
first = 0
|
||||||
@ -1571,14 +1572,51 @@ class GedcomParser(UpdateCallback):
|
|||||||
event.set_privacy(True)
|
event.set_privacy(True)
|
||||||
|
|
||||||
def func_person_adopt_famc(self, matches, event, level):
|
def func_person_adopt_famc(self, matches, event, level):
|
||||||
print "ADOPT FAMC"
|
|
||||||
handle = self.find_family_handle(matches[2][1:-1])
|
handle = self.find_family_handle(matches[2][1:-1])
|
||||||
mrel,frel = self.parse_adopt_famc(level+1);
|
mrel,frel = self.parse_adopt_famc(level);
|
||||||
|
|
||||||
if self.person.get_main_parents_family_handle() == handle:
|
if self.person.get_main_parents_family_handle() == handle:
|
||||||
self.person.set_main_parent_family_handle(None)
|
self.person.set_main_parent_family_handle(None)
|
||||||
self.person.add_parent_family_handle(handle)
|
self.person.add_parent_family_handle(handle)
|
||||||
if mrel != RelLib.ChildRefType.BIRTH or frel != RelLib.ChildRefType.BIRTH:
|
|
||||||
print "NOT FIXED YET"
|
family = self.db.find_family_from_handle(handle, self.trans)
|
||||||
|
reflist = [ ref for ref in family.get_child_ref_list() \
|
||||||
|
if ref.ref == self.person.handle ]
|
||||||
|
if reflist:
|
||||||
|
ref = reflist[0]
|
||||||
|
ref.set_father_relation(frel)
|
||||||
|
ref.set_mother_relation(mrel)
|
||||||
|
else:
|
||||||
|
ref = RelLib.ChildRef()
|
||||||
|
ref.ref = self.person.handle
|
||||||
|
ref.set_father_relation(frel)
|
||||||
|
ref.set_mother_relation(mrel)
|
||||||
|
family.add_child_ref(ref)
|
||||||
|
self.db.commit_family(family, self.trans)
|
||||||
|
|
||||||
|
def func_person_birth_famc(self, matches, event, level):
|
||||||
|
handle = self.find_family_handle(matches[2][1:-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)
|
||||||
|
|
||||||
|
frel = mrel = RelLib.ChildRefType.BIRTH
|
||||||
|
|
||||||
|
family = self.db.find_family_from_handle(handle, self.trans)
|
||||||
|
reflist = [ ref for ref in family.get_child_ref_list() \
|
||||||
|
if ref.ref == self.person.handle ]
|
||||||
|
if reflist:
|
||||||
|
ref = reflist[0]
|
||||||
|
ref.set_father_relation(frel)
|
||||||
|
ref.set_mother_relation(mrel)
|
||||||
|
else:
|
||||||
|
ref = RelLib.ChildRef()
|
||||||
|
ref.ref = self.person.handle
|
||||||
|
ref.set_father_relation(frel)
|
||||||
|
ref.set_mother_relation(mrel)
|
||||||
|
family.add_child_ref(ref)
|
||||||
|
self.db.commit_family(family, self.trans)
|
||||||
|
|
||||||
def func_event_note(self, matches, event, level):
|
def func_event_note(self, matches, event, level):
|
||||||
self.parse_note(matches,event,level+1,'')
|
self.parse_note(matches,event,level+1,'')
|
||||||
@ -1601,28 +1639,28 @@ class GedcomParser(UpdateCallback):
|
|||||||
place.set_title(matches[2])
|
place.set_title(matches[2])
|
||||||
load_place_values(place,matches[2])
|
load_place_values(place,matches[2])
|
||||||
event.set_place_handle(place_handle)
|
event.set_place_handle(place_handle)
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level)
|
||||||
|
|
||||||
def func_event_cause(self, matches, event, level):
|
def func_event_cause(self, matches, event, level):
|
||||||
event.set_cause(matches[2])
|
event.set_cause(matches[2])
|
||||||
self.parse_cause(event,level+1)
|
self.parse_cause(event,level+1)
|
||||||
|
|
||||||
def parse_adopt_famc(self,level):
|
def parse_adopt_famc(self,level):
|
||||||
mrel = _TYPE_ADOPT
|
mrel = _TYPE_BIRTH
|
||||||
frel = _TYPE_ADOPT
|
frel = _TYPE_BIRTH
|
||||||
while True:
|
while True:
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
if int(matches[0]) < level:
|
if int(matches[0]) < level:
|
||||||
self.backup()
|
self.backup()
|
||||||
return (mrel,frel)
|
break
|
||||||
elif matches[1] == TOKEN_ADOP:
|
elif matches[1] == TOKEN_ADOP:
|
||||||
if matches[2] == "HUSB":
|
if matches[2] == "HUSB":
|
||||||
mrel = _TYPE_BIRTH
|
frel = _TYPE_ADOPT
|
||||||
elif matches[2] == "WIFE":
|
elif matches[2] == "WIFE":
|
||||||
frel = _TYPE_BIRTH
|
mrel = _TYPE_ADOPT
|
||||||
else:
|
else:
|
||||||
self.not_recognized(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return (mrel,frel)
|
||||||
|
|
||||||
def parse_person_attr(self,attr,level):
|
def parse_person_attr(self,attr,level):
|
||||||
"""
|
"""
|
||||||
@ -1679,12 +1717,9 @@ class GedcomParser(UpdateCallback):
|
|||||||
|
|
||||||
def parse_source_reference(self,source,level):
|
def parse_source_reference(self,source,level):
|
||||||
"""Reads the data associated with a SOUR reference"""
|
"""Reads the data associated with a SOUR reference"""
|
||||||
note = ""
|
|
||||||
while True:
|
while True:
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
|
|
||||||
if int(matches[0]) < level:
|
if int(matches[0]) < level:
|
||||||
source.set_note(note)
|
|
||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
elif matches[1] == TOKEN_PAGE:
|
elif matches[1] == TOKEN_PAGE:
|
||||||
@ -1697,7 +1732,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
d = self.dp.parse(date)
|
d = self.dp.parse(date)
|
||||||
source.set_date_object(d)
|
source.set_date_object(d)
|
||||||
source.set_text(text)
|
source.set_text(text)
|
||||||
elif matches[1] in (TOKEN_OBJE,TOKEN_REFN):
|
elif matches[1] in (TOKEN_OBJE, TOKEN_REFN, TOKEN_EVEN):
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
elif matches[1] == TOKEN_QUAY:
|
elif matches[1] == TOKEN_QUAY:
|
||||||
try:
|
try:
|
||||||
@ -1708,8 +1743,12 @@ class GedcomParser(UpdateCallback):
|
|||||||
source.set_confidence_level(val+1)
|
source.set_confidence_level(val+1)
|
||||||
else:
|
else:
|
||||||
source.set_confidence_level(val)
|
source.set_confidence_level(val)
|
||||||
elif matches[1] in (TOKEN_NOTE,TOKEN_TEXT):
|
elif matches[1] == TOKEN_NOTE:
|
||||||
note = self.parse_comment(matches,source,level+1,'')
|
note = self.parse_comment(matches,source,level+1,'')
|
||||||
|
source.set_note(note)
|
||||||
|
elif matches[1] == TOKEN_TEXT:
|
||||||
|
note = self.parse_comment(matches,source,level+1,'')
|
||||||
|
source.set_text(note)
|
||||||
else:
|
else:
|
||||||
self.not_recognized(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
@ -1981,7 +2020,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
note = ''
|
note = ''
|
||||||
handle = self.inline_srcs.get((title,note),Utils.create_id())
|
handle = self.inline_srcs.get((title,note),Utils.create_id())
|
||||||
self.inline_srcs[(title,note)] = handle
|
self.inline_srcs[(title,note)] = handle
|
||||||
self.ignore_sub_junk(level+1)
|
self.parse_source_reference(source_ref,level-1)
|
||||||
else:
|
else:
|
||||||
handle = self.find_or_create_source(matches[2][1:-1]).handle
|
handle = self.find_or_create_source(matches[2][1:-1]).handle
|
||||||
self.parse_source_reference(source_ref,level)
|
self.parse_source_reference(source_ref,level)
|
||||||
@ -2123,8 +2162,9 @@ class GedcomParser(UpdateCallback):
|
|||||||
if not ignore:
|
if not ignore:
|
||||||
state.person.add_person_ref(ref)
|
state.person.add_person_ref(ref)
|
||||||
break
|
break
|
||||||
elif matches[1] == TOKEN_TYPE and matches[2] != "INDI":
|
elif matches[1] == TOKEN_TYPE:
|
||||||
ignore = True
|
if matches[2] != "INDI":
|
||||||
|
ignore = True
|
||||||
elif matches[1] == TOKEN_RELA:
|
elif matches[1] == TOKEN_RELA:
|
||||||
ref.rel = matches[2]
|
ref.rel = matches[2]
|
||||||
elif matches[1] == TOKEN_SOUR:
|
elif matches[1] == TOKEN_SOUR:
|
||||||
|
Loading…
Reference in New Issue
Block a user