Added repository information
svn: r6868
This commit is contained in:
parent
8e06592375
commit
5801d77505
@ -1,3 +1,7 @@
|
|||||||
|
2006-06-06 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GrampsDb/_ReadGedcom.py: More improvements, esp. with REPO
|
||||||
|
* example/gedcom/sample.ged: add repo info
|
||||||
|
|
||||||
2006-06-06 Alex Roitman <shura@gramps-project.org>
|
2006-06-06 Alex Roitman <shura@gramps-project.org>
|
||||||
* src/GrampsDb/_ReadXML.py (start_eventref): Only set birth and
|
* src/GrampsDb/_ReadXML.py (start_eventref): Only set birth and
|
||||||
death references for events with primary role.
|
death references for events with primary role.
|
||||||
|
@ -66,7 +66,7 @@
|
|||||||
1 TITL Grand Poobah
|
1 TITL Grand Poobah
|
||||||
1 OBJE
|
1 OBJE
|
||||||
2 FORM jpeg
|
2 FORM jpeg
|
||||||
2 FILE foo/O0.jpg
|
2 FILE O0.jpg
|
||||||
1 BIRT Edwin Michael Smith's Birth event
|
1 BIRT Edwin Michael Smith's Birth event
|
||||||
2 DATE 24 MAY 1961
|
2 DATE 24 MAY 1961
|
||||||
2 PLAC San Jose, Santa Clara Co., CA
|
2 PLAC San Jose, Santa Clara Co., CA
|
||||||
@ -558,6 +558,10 @@
|
|||||||
2 DATE 4 JUN 1954
|
2 DATE 4 JUN 1954
|
||||||
2 PLAC Sparks, Washoe Co., NV
|
2 PLAC Sparks, Washoe Co., NV
|
||||||
2 SOUR Hannah was the widow of James Matthewson.
|
2 SOUR Hannah was the widow of James Matthewson.
|
||||||
|
1 OBJE
|
||||||
|
2 FORM jpg
|
||||||
|
2 FILE test.jpg
|
||||||
|
2 TITL Random title
|
||||||
0 @F03@ FAM
|
0 @F03@ FAM
|
||||||
1 HUSB @I03@
|
1 HUSB @I03@
|
||||||
1 WIFE @I04@
|
1 WIFE @I04@
|
||||||
@ -695,18 +699,21 @@
|
|||||||
1 WIFE @I21@
|
1 WIFE @I21@
|
||||||
0 @S1600@ SOUR
|
0 @S1600@ SOUR
|
||||||
1 TITL Birth Certificate
|
1 TITL Birth Certificate
|
||||||
1 REPO
|
1 REPO @R00@
|
||||||
2 CALN
|
2 CALN
|
||||||
3 MEDI Book
|
3 MEDI Book
|
||||||
0 @S1601@ SOUR
|
0 @S1601@ SOUR
|
||||||
1 TITL Birth Record
|
1 TITL Birth Record
|
||||||
2 CONC s
|
2 CONC s
|
||||||
1 REPO
|
1 REPO @R00@
|
||||||
2 CALN
|
2 CALN
|
||||||
3 MEDI Book
|
3 MEDI Book
|
||||||
0 @S1602@ SOUR
|
0 @S1602@ SOUR
|
||||||
1 TITL Birth, Death and Marriage Records
|
1 TITL Birth, Death and Marriage Records
|
||||||
1 REPO
|
1 REPO @R00@
|
||||||
2 CALN
|
2 CALN
|
||||||
3 MEDI Book
|
3 MEDI Book
|
||||||
|
0 @R00@ REPO
|
||||||
|
1 NAME Repository Name
|
||||||
|
1 ADDR Repository Address
|
||||||
0 TRLR
|
0 TRLR
|
||||||
|
@ -532,47 +532,47 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_NOTE : self.func_name_note,
|
TOKEN_NOTE : self.func_name_note,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.person_event_map = {
|
self.generic_event_map = {
|
||||||
TOKEN_TYPE : self.func_person_event_type,
|
TOKEN_TYPE : self.func_event_type,
|
||||||
TOKEN__PRIV : self.func_person_event_privacy,
|
TOKEN__PRIV : self.func_event_privacy,
|
||||||
TOKEN_DATE : self.func_person_event_date,
|
TOKEN_DATE : self.func_event_date,
|
||||||
TOKEN_SOUR : self.func_person_event_source,
|
TOKEN_SOUR : self.func_event_source,
|
||||||
TOKEN_PLAC : self.func_person_event_place,
|
TOKEN_PLAC : self.func_event_place,
|
||||||
TOKEN_CAUS : self.func_person_event_cause,
|
TOKEN_CAUS : self.func_event_cause,
|
||||||
TOKEN_NOTE : self.func_person_event_note,
|
TOKEN_NOTE : self.func_event_note,
|
||||||
TOKEN_OFFI : self.func_person_event_note,
|
TOKEN_OFFI : self.func_event_note,
|
||||||
TOKEN__GODP : self.func_person_event_ignore,
|
TOKEN__GODP : self.func_event_ignore,
|
||||||
TOKEN__WITN : self.func_person_event_ignore,
|
TOKEN__WITN : self.func_event_ignore,
|
||||||
TOKEN__WTN : self.func_person_event_ignore,
|
TOKEN__WTN : self.func_event_ignore,
|
||||||
TOKEN_RELI : self.func_person_event_ignore,
|
TOKEN_RELI : self.func_event_ignore,
|
||||||
TOKEN_TIME : self.func_person_event_ignore,
|
TOKEN_TIME : self.func_event_ignore,
|
||||||
TOKEN_ADDR : self.func_person_event_ignore,
|
TOKEN_ADDR : self.func_event_ignore,
|
||||||
TOKEN_IGNORE : self.func_person_event_ignore,
|
TOKEN_IGNORE : self.func_event_ignore,
|
||||||
TOKEN_STAT : self.func_person_event_ignore,
|
TOKEN_STAT : self.func_event_ignore,
|
||||||
TOKEN_TEMP : self.func_person_event_ignore,
|
TOKEN_TEMP : self.func_event_ignore,
|
||||||
TOKEN_OBJE : self.func_person_event_ignore,
|
TOKEN_OBJE : self.func_event_ignore,
|
||||||
TOKEN_FAMC : self.func_person_event_ignore,
|
TOKEN_FAMC : self.func_event_ignore,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.person_adopt_map = {
|
self.person_adopt_map = {
|
||||||
TOKEN_TYPE : self.func_person_event_type,
|
TOKEN_TYPE : self.func_event_type,
|
||||||
TOKEN__PRIV : self.func_person_event_privacy,
|
TOKEN__PRIV : self.func_event_privacy,
|
||||||
TOKEN_DATE : self.func_person_event_date,
|
TOKEN_DATE : self.func_event_date,
|
||||||
TOKEN_SOUR : self.func_person_event_source,
|
TOKEN_SOUR : self.func_event_source,
|
||||||
TOKEN_PLAC : self.func_person_event_place,
|
TOKEN_PLAC : self.func_event_place,
|
||||||
TOKEN_CAUS : self.func_person_event_cause,
|
TOKEN_CAUS : self.func_event_cause,
|
||||||
TOKEN_NOTE : self.func_person_event_note,
|
TOKEN_NOTE : self.func_event_note,
|
||||||
TOKEN_OFFI : self.func_person_event_note,
|
TOKEN_OFFI : self.func_event_note,
|
||||||
TOKEN__GODP : self.func_person_event_ignore,
|
TOKEN__GODP : self.func_event_ignore,
|
||||||
TOKEN__WITN : self.func_person_event_ignore,
|
TOKEN__WITN : self.func_event_ignore,
|
||||||
TOKEN__WTN : self.func_person_event_ignore,
|
TOKEN__WTN : self.func_event_ignore,
|
||||||
TOKEN_RELI : self.func_person_event_ignore,
|
TOKEN_RELI : self.func_event_ignore,
|
||||||
TOKEN_TIME : self.func_person_event_ignore,
|
TOKEN_TIME : self.func_event_ignore,
|
||||||
TOKEN_ADDR : self.func_person_event_ignore,
|
TOKEN_ADDR : self.func_event_ignore,
|
||||||
TOKEN_IGNORE : self.func_person_event_ignore,
|
TOKEN_IGNORE : self.func_event_ignore,
|
||||||
TOKEN_STAT : self.func_person_event_ignore,
|
TOKEN_STAT : self.func_event_ignore,
|
||||||
TOKEN_TEMP : self.func_person_event_ignore,
|
TOKEN_TEMP : self.func_event_ignore,
|
||||||
TOKEN_OBJE : self.func_person_event_ignore,
|
TOKEN_OBJE : self.func_event_ignore,
|
||||||
TOKEN_FAMC : self.func_person_adopt_famc,
|
TOKEN_FAMC : self.func_person_adopt_famc,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -761,7 +761,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.backoff = False
|
self.backoff = False
|
||||||
return self.groups
|
return self.groups
|
||||||
|
|
||||||
def barf(self,level):
|
def not_recognized(self,level):
|
||||||
msg = _("Line %d was not understood, so it was ignored.") % self.groups[4]
|
msg = _("Line %d was not understood, so it was ignored.") % self.groups[4]
|
||||||
self.errmsg(msg)
|
self.errmsg(msg)
|
||||||
self.error_count += 1
|
self.error_count += 1
|
||||||
@ -812,7 +812,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
def parse_trailer(self):
|
def parse_trailer(self):
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
if matches[0] >= 0 and matches[1] != TOKEN_TRLR:
|
if matches[0] >= 0 and matches[1] != TOKEN_TRLR:
|
||||||
self.barf(0)
|
self.not_recognized(0)
|
||||||
|
|
||||||
def parse_header(self):
|
def parse_header(self):
|
||||||
self.parse_header_head()
|
self.parse_header_head()
|
||||||
@ -893,7 +893,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[2] == "INDI":
|
elif matches[2] == "INDI":
|
||||||
self.parse_INDI(matches)
|
self.parse_INDI(matches)
|
||||||
elif matches[2] == "REPO":
|
elif matches[2] == "REPO":
|
||||||
self.repo_count = self.repo_count + 1
|
self.repo_count += 1
|
||||||
self.repo = self.find_or_create_repository(matches[3][1:-1])
|
self.repo = self.find_or_create_repository(matches[3][1:-1])
|
||||||
self.added.add(self.repo.handle)
|
self.added.add(self.repo.handle)
|
||||||
self.parse_repository(self.repo)
|
self.parse_repository(self.repo)
|
||||||
@ -921,7 +921,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.backup()
|
self.backup()
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.barf(1)
|
self.not_recognized(1)
|
||||||
|
|
||||||
def map_gid_empty(self,gid):
|
def map_gid_empty(self,gid):
|
||||||
return gid
|
return gid
|
||||||
@ -1046,7 +1046,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_SOUR:
|
elif matches[1] == TOKEN_SOUR:
|
||||||
event.add_source_reference(self.handle_source(matches,level+1))
|
event.add_source_reference(self.handle_source(matches,level+1))
|
||||||
else:
|
else:
|
||||||
self.barf(1)
|
self.not_recognized(1)
|
||||||
|
|
||||||
def parse_repo_caln(self, matches, repo, level):
|
def parse_repo_caln(self, matches, repo, level):
|
||||||
while True:
|
while True:
|
||||||
@ -1060,7 +1060,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_NOTE:
|
elif matches[1] == TOKEN_NOTE:
|
||||||
repo.set_note(matches[2])
|
repo.set_note(matches[2])
|
||||||
else:
|
else:
|
||||||
self.barf(1)
|
self.not_recognized(1)
|
||||||
|
|
||||||
def parse_repo_ref(self, matches, repo_ref, level):
|
def parse_repo_ref(self, matches, repo_ref, level):
|
||||||
while True:
|
while True:
|
||||||
@ -1075,7 +1075,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
note = self.parse_note(matches,repo_ref,level+1,"")
|
note = self.parse_note(matches,repo_ref,level+1,"")
|
||||||
repo_ref.set_note(note)
|
repo_ref.set_note(note)
|
||||||
else:
|
else:
|
||||||
self.barf(1)
|
self.not_recognized(1)
|
||||||
|
|
||||||
def parse_repo_ref_caln(self, reporef, level):
|
def parse_repo_ref_caln(self, reporef, level):
|
||||||
while True:
|
while True:
|
||||||
@ -1086,7 +1086,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_MEDI:
|
elif matches[1] == TOKEN_MEDI:
|
||||||
reporef.media_type.set(matches[2])
|
reporef.media_type.set(matches[2])
|
||||||
else:
|
else:
|
||||||
self.barf(1)
|
self.not_recognized(1)
|
||||||
|
|
||||||
def parse_note_data(self,level):
|
def parse_note_data(self,level):
|
||||||
while True:
|
while True:
|
||||||
@ -1099,7 +1099,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_RIN:
|
elif matches[1] == TOKEN_RIN:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
def parse_ftw_relations(self,level):
|
def parse_ftw_relations(self,level):
|
||||||
mrel = RelLib.ChildRefType()
|
mrel = RelLib.ChildRefType()
|
||||||
@ -1127,7 +1127,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] and matches[1][0] == TOKEN_UNKNOWN:
|
elif matches[1] and matches[1][0] == TOKEN_UNKNOWN:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_FAM(self, matches):
|
def parse_FAM(self, matches):
|
||||||
@ -1137,7 +1137,16 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.family = self.find_or_create_family(matches[3][1:-1])
|
self.family = self.find_or_create_family(matches[3][1:-1])
|
||||||
|
|
||||||
# parse the family
|
# parse the family
|
||||||
self.parse_family()
|
|
||||||
|
self.addr = None
|
||||||
|
while True:
|
||||||
|
matches = self.get_next()
|
||||||
|
|
||||||
|
if self.level_is_finished(matches, 1):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
func = self.family_func.get(matches[1], self.func_family_event)
|
||||||
|
func(self.family, matches, 2)
|
||||||
|
|
||||||
# handle addresses attached to families
|
# handle addresses attached to families
|
||||||
if self.addr != None:
|
if self.addr != None:
|
||||||
@ -1169,18 +1178,6 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.db.commit_family(self.family, self.trans)
|
self.db.commit_family(self.family, self.trans)
|
||||||
del self.family
|
del self.family
|
||||||
|
|
||||||
def parse_family(self):
|
|
||||||
self.addr = None
|
|
||||||
note = ""
|
|
||||||
while True:
|
|
||||||
matches = self.get_next()
|
|
||||||
|
|
||||||
if self.level_is_finished(matches, 1):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
func = self.family_func.get(matches[1], self.func_family_event)
|
|
||||||
func(self.family, matches, 2)
|
|
||||||
|
|
||||||
def func_family_husb(self, family, matches, level):
|
def func_family_husb(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]))
|
||||||
@ -1230,9 +1227,32 @@ class GedcomParser(UpdateCallback):
|
|||||||
|
|
||||||
def func_family_object(self, family, matches, level):
|
def func_family_object(self, family, matches, level):
|
||||||
if matches[2] and matches[2][0] == '@':
|
if matches[2] and matches[2][0] == '@':
|
||||||
self.barf(2)
|
self.not_recognized(2)
|
||||||
else:
|
else:
|
||||||
self.parse_family_object(2)
|
(form, filename, title, note) = self.parse_obje(level)
|
||||||
|
self.build_media_object(self.family, form, filename, title, note)
|
||||||
|
|
||||||
|
def parse_obje(self, level):
|
||||||
|
form = ""
|
||||||
|
filename = ""
|
||||||
|
title = ""
|
||||||
|
note = ""
|
||||||
|
while True:
|
||||||
|
matches = self.get_next()
|
||||||
|
# print matches, level
|
||||||
|
if self.level_is_finished(matches, level):
|
||||||
|
break
|
||||||
|
elif matches[1] == TOKEN_FORM:
|
||||||
|
form = matches[2].lower()
|
||||||
|
elif matches[1] == TOKEN_TITL:
|
||||||
|
title = matches[2]
|
||||||
|
elif matches[1] == TOKEN_FILE:
|
||||||
|
filename = matches[2]
|
||||||
|
elif matches[1] == TOKEN_NOTE:
|
||||||
|
note = matches[2]
|
||||||
|
else:
|
||||||
|
self.not_recognized(level+1)
|
||||||
|
return (form, filename, title, note)
|
||||||
|
|
||||||
def func_family_comm(self, family, matches, level):
|
def func_family_comm(self, family, matches, level):
|
||||||
note = matches[2]
|
note = matches[2]
|
||||||
@ -1260,7 +1280,8 @@ class GedcomParser(UpdateCallback):
|
|||||||
if matches[2] and not event.get_description():
|
if matches[2] and not event.get_description():
|
||||||
event.set_description(matches[2])
|
event.set_description(matches[2])
|
||||||
|
|
||||||
self.parse_family_event(event,2)
|
self.parse_event(event, self.generic_event_map, 2)
|
||||||
|
|
||||||
if int(event.get_type()) == RelLib.EventType.MARRIAGE:
|
if int(event.get_type()) == RelLib.EventType.MARRIAGE:
|
||||||
self.family.type.set(RelLib.FamilyRelType.MARRIED)
|
self.family.type.set(RelLib.FamilyRelType.MARRIED)
|
||||||
if int(event.get_type()) != RelLib.EventType.CUSTOM:
|
if int(event.get_type()) != RelLib.EventType.CUSTOM:
|
||||||
@ -1392,7 +1413,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_famc_type(self,level,person):
|
def parse_famc_type(self,level,person):
|
||||||
@ -1418,97 +1439,8 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_person_object(self,level,state):
|
|
||||||
form = ""
|
|
||||||
filename = ""
|
|
||||||
title = "no title"
|
|
||||||
note = ""
|
|
||||||
while True:
|
|
||||||
matches = self.get_next()
|
|
||||||
if int(matches[0]) < level:
|
|
||||||
self.backup()
|
|
||||||
break
|
|
||||||
elif matches[1] == TOKEN_FORM:
|
|
||||||
form = matches[2].lower()
|
|
||||||
elif matches[1] == TOKEN_TITL:
|
|
||||||
title = matches[2]
|
|
||||||
elif matches[1] == TOKEN_FILE:
|
|
||||||
filename = matches[2]
|
|
||||||
elif matches[1] == TOKEN_NOTE:
|
|
||||||
note = matches[2]
|
|
||||||
elif matches[1] == TOKEN_UNKNOWN:
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
else:
|
|
||||||
self.barf(level+1)
|
|
||||||
|
|
||||||
if form == "url":
|
|
||||||
url = RelLib.Url()
|
|
||||||
url.set_path(filename)
|
|
||||||
url.set_description(title)
|
|
||||||
state.person.add_url(url)
|
|
||||||
else:
|
|
||||||
(ok,path) = self.find_file(filename,self.dir_path)
|
|
||||||
if not ok:
|
|
||||||
self.warn(_("Could not import %s") % filename)
|
|
||||||
path = filename.replace('\\','/')
|
|
||||||
photo_handle = self.media_map.get(path)
|
|
||||||
if photo_handle == None:
|
|
||||||
photo = RelLib.MediaObject()
|
|
||||||
photo.set_path(path)
|
|
||||||
photo.set_description(title)
|
|
||||||
photo.set_mime_type(Mime.get_type(os.path.abspath(path)))
|
|
||||||
self.db.add_object(photo, self.trans)
|
|
||||||
self.media_map[path] = photo.handle
|
|
||||||
else:
|
|
||||||
photo = self.db.get_object_from_handle(photo_handle)
|
|
||||||
oref = RelLib.MediaRef()
|
|
||||||
oref.set_reference_handle(photo.handle)
|
|
||||||
oref.set_note(note)
|
|
||||||
state.person.add_media_reference(oref)
|
|
||||||
|
|
||||||
def parse_family_object(self,level):
|
|
||||||
form = ""
|
|
||||||
filename = ""
|
|
||||||
title = ""
|
|
||||||
note = ""
|
|
||||||
while True:
|
|
||||||
matches = self.get_next()
|
|
||||||
if matches[1] == TOKEN_FORM:
|
|
||||||
form = matches[2].lower()
|
|
||||||
elif matches[1] == TOKEN_TITL:
|
|
||||||
title = matches[2]
|
|
||||||
elif matches[1] == TOKEN_FILE:
|
|
||||||
filename = matches[2]
|
|
||||||
elif matches[1] == TOKEN_NOTE:
|
|
||||||
note = matches[2]
|
|
||||||
elif int(matches[0]) < level:
|
|
||||||
self.backup()
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self.barf(level+1)
|
|
||||||
|
|
||||||
if form:
|
|
||||||
(ok,path) = self.find_file(filename,self.dir_path)
|
|
||||||
if not ok:
|
|
||||||
self.warn(_("Could not import %s") % filename)
|
|
||||||
path = filename.replace('\\','/')
|
|
||||||
photo_handle = self.media_map.get(path)
|
|
||||||
if photo_handle == None:
|
|
||||||
photo = RelLib.MediaObject()
|
|
||||||
photo.set_path(path)
|
|
||||||
photo.set_description(title)
|
|
||||||
photo.set_mime_type(Mime.get_type(os.path.abspath(path)))
|
|
||||||
self.db.add_object(photo, self.trans)
|
|
||||||
self.media_map[path] = photo.handle
|
|
||||||
else:
|
|
||||||
photo = self.db.get_object_from_handle(photo_handle)
|
|
||||||
oref = RelLib.MediaRef()
|
|
||||||
oref.set_reference_handle(photo.handle)
|
|
||||||
oref.set_note(note)
|
|
||||||
self.family.add_media_reference(oref)
|
|
||||||
|
|
||||||
def parse_address(self,address,level):
|
def parse_address(self,address,level):
|
||||||
first = 0
|
first = 0
|
||||||
@ -1544,7 +1476,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] in (TOKEN__LOC, TOKEN__NAME):
|
elif matches[1] in (TOKEN__LOC, TOKEN__NAME):
|
||||||
pass # ignore unsupported extended location syntax
|
pass # ignore unsupported extended location syntax
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
def parse_ord(self,lds_ord,level):
|
def parse_ord(self,lds_ord,level):
|
||||||
note = ""
|
note = ""
|
||||||
@ -1580,24 +1512,24 @@ class GedcomParser(UpdateCallback):
|
|||||||
lds_ord.set_status(
|
lds_ord.set_status(
|
||||||
lds_status.get(matches[2],RelLib.LdsOrd.STATUS_NONE))
|
lds_status.get(matches[2],RelLib.LdsOrd.STATUS_NONE))
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
def parse_person_event(self, event, func_map, level):
|
def parse_event(self, event, func_map, level):
|
||||||
while True:
|
while True:
|
||||||
matches = self.get_next()
|
matches = self.get_next()
|
||||||
if self.level_is_finished(matches,level):
|
if self.level_is_finished(matches,level):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
func = func_map.get(matches[1], self.func_person_event_undef)
|
func = func_map.get(matches[1], self.func_event_undef)
|
||||||
func(matches, event, level+1)
|
func(matches, event, level+1)
|
||||||
|
|
||||||
def func_person_event_ignore(self, matches, event, level):
|
def func_event_ignore(self, matches, event, level):
|
||||||
self.ignore_sub_junk(level)
|
self.ignore_sub_junk(level)
|
||||||
|
|
||||||
def func_person_event_undef(self, matches, event, level):
|
def func_event_undef(self, matches, event, level):
|
||||||
self.barf(level)
|
self.not_recognized(level)
|
||||||
|
|
||||||
def func_person_event_type(self, matches, event, level):
|
def func_event_type(self, matches, event, level):
|
||||||
if event.get_type().is_custom():
|
if event.get_type().is_custom():
|
||||||
if ged2gramps.has_key(matches[2]):
|
if ged2gramps.has_key(matches[2]):
|
||||||
name = RelLib.EventType(ged2gramps[matches[2]])
|
name = RelLib.EventType(ged2gramps[matches[2]])
|
||||||
@ -1611,7 +1543,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
event.set_description(matches[2])
|
event.set_description(matches[2])
|
||||||
|
|
||||||
def func_person_event_privacy(self, matches, event, level):
|
def func_event_privacy(self, matches, event, level):
|
||||||
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):
|
||||||
@ -1624,16 +1556,16 @@ class GedcomParser(UpdateCallback):
|
|||||||
if mrel != RelLib.ChildRefType.BIRTH or frel != RelLib.ChildRefType.BIRTH:
|
if mrel != RelLib.ChildRefType.BIRTH or frel != RelLib.ChildRefType.BIRTH:
|
||||||
print "NOT FIXED YET"
|
print "NOT FIXED YET"
|
||||||
|
|
||||||
def func_person_event_note(self, matches, event, level):
|
def func_event_note(self, matches, event, level):
|
||||||
self.parse_note(matches,event,level+1,note)
|
self.parse_note(matches,event,level+1,note)
|
||||||
|
|
||||||
def func_person_event_date(self, matches, event, level):
|
def func_event_date(self, matches, event, level):
|
||||||
event.set_date_object(self.extract_date(matches[2]))
|
event.set_date_object(self.extract_date(matches[2]))
|
||||||
|
|
||||||
def func_person_event_source(self, matches, event, level):
|
def func_event_source(self, matches, event, level):
|
||||||
event.add_source_reference(self.handle_source(matches,level+1))
|
event.add_source_reference(self.handle_source(matches,level+1))
|
||||||
|
|
||||||
def func_person_event_place(self, matches, event, level):
|
def func_event_place(self, matches, event, level):
|
||||||
val = matches[2]
|
val = matches[2]
|
||||||
n = event.get_type()
|
n = event.get_type()
|
||||||
if self.is_ftw and int(n) in [RelLib.EventType.OCCUPATION,
|
if self.is_ftw and int(n) in [RelLib.EventType.OCCUPATION,
|
||||||
@ -1647,7 +1579,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
event.set_place_handle(place_handle)
|
event.set_place_handle(place_handle)
|
||||||
self.ignore_sub_junk(level+1)
|
self.ignore_sub_junk(level+1)
|
||||||
|
|
||||||
def func_person_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)
|
||||||
|
|
||||||
@ -1665,7 +1597,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[2] == "WIFE":
|
elif matches[2] == "WIFE":
|
||||||
frel = _TYPE_BIRTH
|
frel = _TYPE_BIRTH
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_person_attr(self,attr,level):
|
def parse_person_attr(self,attr,level):
|
||||||
@ -1688,7 +1620,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
"""
|
"""
|
||||||
Called when an undefined token is found
|
Called when an undefined token is found
|
||||||
"""
|
"""
|
||||||
self.barf(level)
|
self.not_recognized(level)
|
||||||
|
|
||||||
def func_person_attr_ignore(self, attr, matches, level):
|
def func_person_attr_ignore(self, attr, matches, level):
|
||||||
"""
|
"""
|
||||||
@ -1721,59 +1653,6 @@ class GedcomParser(UpdateCallback):
|
|||||||
info = self.parse_note(matches,attr,level+1,note)
|
info = self.parse_note(matches,attr,level+1,note)
|
||||||
attr.set_note(info)
|
attr.set_note(info)
|
||||||
|
|
||||||
def parse_family_event(self,event,level):
|
|
||||||
note = ""
|
|
||||||
while True:
|
|
||||||
matches = self.get_next()
|
|
||||||
if int(matches[0]) < level:
|
|
||||||
if note:
|
|
||||||
event.set_note(note)
|
|
||||||
self.backup()
|
|
||||||
break
|
|
||||||
elif matches[1] == TOKEN_TYPE:
|
|
||||||
etype = event.get_type()
|
|
||||||
if etype.is_custom() == RelLib.EventType.CUSTOM:
|
|
||||||
event.set_type((RelLib.EventType.CUSTOM,matches[2]))
|
|
||||||
else:
|
|
||||||
note = 'Status = %s\n' % matches[2]
|
|
||||||
elif matches[1] == TOKEN_DATE:
|
|
||||||
event.set_date_object(self.extract_date(matches[2]))
|
|
||||||
elif matches[1] == TOKEN_CAUS:
|
|
||||||
info = matches[2]
|
|
||||||
event.set_cause(info)
|
|
||||||
self.parse_cause(event,level+1)
|
|
||||||
elif matches[1] in (TOKEN_TIME,TOKEN_IGNORE,TOKEN_ADDR,TOKEN_STAT,
|
|
||||||
TOKEN_TEMP,TOKEN_HUSB,TOKEN_WIFE,TOKEN_OBJE):
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
elif matches[1] == TOKEN_SOUR:
|
|
||||||
event.add_source_reference(self.handle_source(matches,level+1))
|
|
||||||
elif matches[1] == TOKEN_PLAC:
|
|
||||||
val = matches[2]
|
|
||||||
place = self.find_or_create_place(val)
|
|
||||||
place_handle = place.handle
|
|
||||||
place.set_title(matches[2])
|
|
||||||
load_place_values(place,matches[2])
|
|
||||||
event.set_place_handle(place_handle)
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
elif matches[1] == TOKEN_OFFI:
|
|
||||||
if note == "":
|
|
||||||
note = matches[2]
|
|
||||||
else:
|
|
||||||
note = note + "\n" + matches[2]
|
|
||||||
elif matches[1] == TOKEN_NOTE:
|
|
||||||
note = self.parse_note(matches,event,level+1,note)
|
|
||||||
elif matches[1] in (TOKEN__WITN, TOKEN__WTN):
|
|
||||||
pass
|
|
||||||
# if matches[2][0] == "@":
|
|
||||||
# witness_handle = self.find_person_handle(self.map_gid(matches[2][1:-1]))
|
|
||||||
# witness = RelLib.Witness(RelLib.Event.ID,witness_handle)
|
|
||||||
# else:
|
|
||||||
# witness = RelLib.Witness(RelLib.Event.NAME,matches[2])
|
|
||||||
# event.add_witness(witness)
|
|
||||||
self.ignore_sub_junk(level+1)
|
|
||||||
else:
|
|
||||||
self.barf(level+1)
|
|
||||||
|
|
||||||
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 = ""
|
note = ""
|
||||||
@ -1808,7 +1687,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] in (TOKEN_NOTE,TOKEN_TEXT):
|
elif matches[1] in (TOKEN_NOTE,TOKEN_TEXT):
|
||||||
note = self.parse_comment(matches,source,level+1,note)
|
note = self.parse_comment(matches,source,level+1,note)
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
def parse_source_data(self,level):
|
def parse_source_data(self,level):
|
||||||
"""Parses the source data"""
|
"""Parses the source data"""
|
||||||
@ -1824,7 +1703,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_TEXT:
|
elif matches[1] == TOKEN_TEXT:
|
||||||
note = matches[2]
|
note = matches[2]
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_marnm(self,person,text):
|
def parse_marnm(self,person,text):
|
||||||
@ -1901,7 +1780,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_UNKNOWN:
|
elif matches[1] == TOKEN_UNKNOWN:
|
||||||
self.ignore_sub_junk(2)
|
self.ignore_sub_junk(2)
|
||||||
else:
|
else:
|
||||||
self.barf(2)
|
self.not_recognized(2)
|
||||||
|
|
||||||
def parse_subm(self, level):
|
def parse_subm(self, level):
|
||||||
while True:
|
while True:
|
||||||
@ -1927,7 +1806,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_FAM:
|
elif matches[1] == TOKEN_FAM:
|
||||||
self.parse_ftw_fam_schema(level+1)
|
self.parse_ftw_fam_schema(level+1)
|
||||||
else:
|
else:
|
||||||
self.barf(2)
|
self.not_recognized(2)
|
||||||
|
|
||||||
def parse_ftw_indi_schema(self,level):
|
def parse_ftw_indi_schema(self,level):
|
||||||
while True:
|
while True:
|
||||||
@ -1950,7 +1829,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_LABL:
|
elif matches[1] == TOKEN_LABL:
|
||||||
return matches[2]
|
return matches[2]
|
||||||
else:
|
else:
|
||||||
self.barf(2)
|
self.not_recognized(2)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_ftw_fam_schema(self,level):
|
def parse_ftw_fam_schema(self,level):
|
||||||
@ -1993,7 +1872,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
fcn = _place_match.get(item,_empty_func)
|
fcn = _place_match.get(item,_empty_func)
|
||||||
_place_field.append(fcn)
|
_place_field.append(fcn)
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
|
|
||||||
def parse_date(self,level):
|
def parse_date(self,level):
|
||||||
date = DateStruct()
|
date = DateStruct()
|
||||||
@ -2006,7 +1885,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
elif matches[1] == TOKEN_TIME:
|
elif matches[1] == TOKEN_TIME:
|
||||||
date.time = matches[2]
|
date.time = matches[2]
|
||||||
else:
|
else:
|
||||||
self.barf(level+1)
|
self.not_recognized(level+1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def extract_date(self,text):
|
def extract_date(self,text):
|
||||||
@ -2231,7 +2110,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
note = self.parse_note(matches,ref,2,"")
|
note = self.parse_note(matches,ref,2,"")
|
||||||
ref.set_note(note)
|
ref.set_note(note)
|
||||||
else:
|
else:
|
||||||
self.barf(2)
|
self.not_recognized(2)
|
||||||
|
|
||||||
def func_person_alt_name(self,matches,state):
|
def func_person_alt_name(self,matches,state):
|
||||||
"""
|
"""
|
||||||
@ -2262,38 +2141,15 @@ class GedcomParser(UpdateCallback):
|
|||||||
+1 <<NOTE_STRUCTURE>> {0:M}
|
+1 <<NOTE_STRUCTURE>> {0:M}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if matches[2] and matches[2][0] == '@':
|
(form, filename, title, note) = self.parse_obje(state.level+1)
|
||||||
self.barf(2)
|
self.build_media_object(state.person, form, filename, title, note)
|
||||||
else:
|
|
||||||
form = ""
|
|
||||||
filename = ""
|
|
||||||
title = "no title"
|
|
||||||
note = ""
|
|
||||||
while True:
|
|
||||||
matches = self.get_next()
|
|
||||||
if self.level_is_finished(matches, state.level+1):
|
|
||||||
break
|
|
||||||
elif matches[1] == TOKEN_FORM:
|
|
||||||
form = matches[2].lower()
|
|
||||||
elif matches[1] == TOKEN_TITL:
|
|
||||||
title = matches[2]
|
|
||||||
elif matches[1] == TOKEN_FILE:
|
|
||||||
filename = matches[2]
|
|
||||||
elif matches[1] == TOKEN_NOTE:
|
|
||||||
note = matches[2]
|
|
||||||
elif matches[1] == TOKEN_UNKNOWN:
|
|
||||||
self.ignore_sub_junk(state.level+2)
|
|
||||||
else:
|
|
||||||
self.barf(state.level+2)
|
|
||||||
|
|
||||||
self.build_media_object(state, form, filename, title, note)
|
def build_media_object(self, obj, form, filename, title, note):
|
||||||
|
|
||||||
def build_media_object(self, state, form, filename, title, note):
|
|
||||||
if form == "url":
|
if form == "url":
|
||||||
url = RelLib.Url()
|
url = RelLib.Url()
|
||||||
url.set_path(filename)
|
url.set_path(filename)
|
||||||
url.set_description(title)
|
url.set_description(title)
|
||||||
state.person.add_url(url)
|
obj.add_url(url)
|
||||||
else:
|
else:
|
||||||
(ok,path) = self.find_file(filename,self.dir_path)
|
(ok,path) = self.find_file(filename,self.dir_path)
|
||||||
if not ok:
|
if not ok:
|
||||||
@ -2312,7 +2168,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
oref = RelLib.MediaRef()
|
oref = RelLib.MediaRef()
|
||||||
oref.set_reference_handle(photo.handle)
|
oref.set_reference_handle(photo.handle)
|
||||||
oref.set_note(note)
|
oref.set_note(note)
|
||||||
state.person.add_media_reference(oref)
|
obj.add_media_reference(oref)
|
||||||
|
|
||||||
def func_person_note(self,matches,state):
|
def func_person_note(self,matches,state):
|
||||||
self.note = self.parse_note(matches,self.person,1,state.note)
|
self.note = self.parse_note(matches,self.person,1,state.note)
|
||||||
@ -2422,7 +2278,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_TEMP, TOKEN_OBJE, TOKEN_TYPE):
|
TOKEN_TEMP, TOKEN_OBJE, TOKEN_TYPE):
|
||||||
self.ignore_sub_junk(state.level+1)
|
self.ignore_sub_junk(state.level+1)
|
||||||
else:
|
else:
|
||||||
self.barf(state.level+1)
|
self.not_recognized(state.level+1)
|
||||||
|
|
||||||
def func_person_addr(self,matches,state):
|
def func_person_addr(self,matches,state):
|
||||||
"""
|
"""
|
||||||
@ -2452,7 +2308,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
event = RelLib.Event()
|
event = RelLib.Event()
|
||||||
event.set_gramps_id(self.emapper.find_next())
|
event.set_gramps_id(self.emapper.find_next())
|
||||||
event.set_type(RelLib.EventType.BIRTH)
|
event.set_type(RelLib.EventType.BIRTH)
|
||||||
self.parse_person_event(event, self.person_event_map, 2)
|
self.parse_event(event, self.generic_event_map, 2)
|
||||||
|
|
||||||
person_event_name(event,state.person)
|
person_event_name(event,state.person)
|
||||||
self.db.add_event(event, self.trans)
|
self.db.add_event(event, self.trans)
|
||||||
@ -2475,7 +2331,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
event = RelLib.Event()
|
event = RelLib.Event()
|
||||||
event.set_gramps_id(self.emapper.find_next())
|
event.set_gramps_id(self.emapper.find_next())
|
||||||
event.set_type(RelLib.EventType.ADOPT)
|
event.set_type(RelLib.EventType.ADOPT)
|
||||||
self.parse_person_event(event, self.person_adopt_map, 2)
|
self.parse_event(event, self.person_adopt_map, 2)
|
||||||
person_event_name(event,state.person)
|
person_event_name(event,state.person)
|
||||||
self.db.add_event(event, self.trans)
|
self.db.add_event(event, self.trans)
|
||||||
|
|
||||||
@ -2493,7 +2349,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
if matches[2]:
|
if matches[2]:
|
||||||
event.set_description(matches[2])
|
event.set_description(matches[2])
|
||||||
event.type.set(RelLib.EventType.DEATH)
|
event.type.set(RelLib.EventType.DEATH)
|
||||||
self.parse_person_event(event, self.person_event_map, 2)
|
self.parse_event(event, self.generic_event_map, 2)
|
||||||
|
|
||||||
person_event_name(event,state.person)
|
person_event_name(event,state.person)
|
||||||
self.db.add_event(event, self.trans)
|
self.db.add_event(event, self.trans)
|
||||||
@ -2515,7 +2371,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
event.set_gramps_id(self.emapper.find_next())
|
event.set_gramps_id(self.emapper.find_next())
|
||||||
if matches[2]:
|
if matches[2]:
|
||||||
event.set_description(matches[2])
|
event.set_description(matches[2])
|
||||||
self.parse_person_event(event, self.person_event_map, 2)
|
self.parse_event(event, self.generic_event_map, 2)
|
||||||
the_type = event.get_type()
|
the_type = event.get_type()
|
||||||
if int(the_type) == RelLib.EventType.CUSTOM \
|
if int(the_type) == RelLib.EventType.CUSTOM \
|
||||||
and str(the_type) in self.attrs:
|
and str(the_type) in self.attrs:
|
||||||
@ -2574,7 +2430,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
event.set_type((RelLib.EventType.CUSTOM,n))
|
event.set_type((RelLib.EventType.CUSTOM,n))
|
||||||
|
|
||||||
self.parse_person_event(event, self.person_event_map, 2)
|
self.parse_event(event, self.generic_event_map, 2)
|
||||||
if matches[2]:
|
if matches[2]:
|
||||||
event.set_description(matches[2])
|
event.set_description(matches[2])
|
||||||
person_event_name(event,state.person)
|
person_event_name(event,state.person)
|
||||||
@ -2590,7 +2446,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
def func_name_undefined(self,matches,state):
|
def func_name_undefined(self,matches,state):
|
||||||
self.barf(state.level+1)
|
self.not_recognized(state.level+1)
|
||||||
|
|
||||||
def func_name_note(self,matches,state):
|
def func_name_note(self,matches,state):
|
||||||
state.add_to_note(self.parse_note(matches,state.name,
|
state.add_to_note(self.parse_note(matches,state.name,
|
||||||
|
Loading…
Reference in New Issue
Block a user