REFN changes for GEDCOM import

svn: r802
This commit is contained in:
Don Allingham 2002-02-27 01:18:49 +00:00
parent e466d17c79
commit 42cfd52db4
5 changed files with 55 additions and 9 deletions

View File

@ -34,6 +34,7 @@ intl22.so: intl.c
install: install:
${INSTALL} -d ${datadir} ${INSTALL} -d ${datadir}
(cd ${datadir} ;rm -f *.py *.pyo *.pyc *.glade *.xpm *.so)
${INSTALL} *.py *.jpg *.pyo *.png *.glade *.xpm *.so ${datadir} ${INSTALL} *.py *.jpg *.pyo *.png *.glade *.xpm *.so ${datadir}
${INSTALL} -d ${prefix}/share/pixmaps ${INSTALL} -d ${prefix}/share/pixmaps
${INSTALL} gramps.png ${prefix}/share/pixmaps ${INSTALL} gramps.png ${prefix}/share/pixmaps

View File

@ -1701,8 +1701,8 @@ class GrampsDB:
for p in self.personMap.values(): for p in self.personMap.values():
p.MainFamily = None p.MainFamily = None
p.AltFamilyList = None p.AltFamilyList = []
p.FamilyList = None p.FamilyList = []
self.personMap = {} self.personMap = {}
self.sourceMap = {} self.sourceMap = {}

View File

@ -229,8 +229,6 @@ class OpenOfficeDoc(TextDoc):
image = ImgManip.ImgManip(name) image = ImgManip.ImgManip(name)
(x,y) = image.size() (x,y) = image.size()
aspect_ratio = float(x)/float(y)
ratio = float(x_cm)*float(y)/(float(y_cm)*float(x)) ratio = float(x_cm)*float(y)/(float(y_cm)*float(x))
if ratio < 1: if ratio < 1:

View File

@ -520,7 +520,7 @@ class Gramps:
if val == 1: if val == 1:
return return
self.clear_database() self.clear_database()
DbPrompter.DbPrompter(self.database,1) DbPrompter.DbPrompter(self,1)
def clear_database(self): def clear_database(self):
"""Clear out the database if permission was granted""" """Clear out the database if permission was granted"""
@ -1146,6 +1146,14 @@ class Gramps:
file = self.database.getSavePath() file = self.database.getSavePath()
self.database.new() self.database.new()
self.active_person = None
self.active_father = None
self.active_family = None
self.active_mother = None
self.active_child = None
self.active_spouse = None
self.id2col = {}
self.alt2col = {}
self.read_file(file) self.read_file(file)
Utils.clearModified() Utils.clearModified()
Utils.clear_timer() Utils.clear_timer()

View File

@ -67,6 +67,7 @@ for val in const.familyConstantEvents.keys():
if key != "": if key != "":
ged2fam[key] = val ged2fam[key] = val
intRE = re.compile(r"\s*(\d+)\s*$")
lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$") lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$")
headRE = re.compile(r"\s*(\d+)\s+HEAD") headRE = re.compile(r"\s*(\d+)\s+HEAD")
nameRegexp= re.compile(r"/?([^/]*)(/([^/]*)(/([^/]*))?)?") nameRegexp= re.compile(r"/?([^/]*)(/([^/]*)(/([^/]*))?)?")
@ -108,6 +109,7 @@ def importData(database, filename):
return return
g.parse_gedcom_file() g.parse_gedcom_file()
g.resolve_refns()
statusTop.get_widget("close").set_sensitive(1) statusTop.get_widget("close").set_sensitive(1)
@ -142,6 +144,8 @@ class GedcomParser:
self.fmap = {} self.fmap = {}
self.smap = {} self.smap = {}
self.nmap = {} self.nmap = {}
self.refn = {}
self.added = []
self.gedmap = GedcomInfoDB() self.gedmap = GedcomInfoDB()
self.gedsource = None self.gedsource = None
self.dir_path = os.path.dirname(file) self.dir_path = os.path.dirname(file)
@ -367,6 +371,7 @@ class GedcomParser:
self.update(self.people_obj,str(self.indi_count)) self.update(self.people_obj,str(self.indi_count))
self.indi_count = self.indi_count + 1 self.indi_count = self.indi_count + 1
self.person = self.db.findPerson(matches[1],self.pmap) self.person = self.db.findPerson(matches[1],self.pmap)
self.added.append(self.person)
self.parse_individual() self.parse_individual()
elif matches[2] in ["SUBM","SUBN"]: elif matches[2] in ["SUBM","SUBN"]:
self.ignore_sub_junk(1) self.ignore_sub_junk(1)
@ -701,10 +706,8 @@ class GedcomParser:
self.parse_source_reference(source_ref,2) self.parse_source_reference(source_ref,2)
self.person.getPrimaryName().addSourceRef(source_ref) self.person.getPrimaryName().addSourceRef(source_ref)
elif matches[1] == "REFN": elif matches[1] == "REFN":
attr = Attribute() if intRE.match(matches[2]):
attr.setType("Reference Number") self.refn[self.person] = int(matches[2])
attr.setValue(matches[2])
self.person.addAttribute(attr)
elif matches[1] in ["AFN","CHAN","REFN","ASSO"]: elif matches[1] in ["AFN","CHAN","REFN","ASSO"]:
self.ignore_sub_junk(2) self.ignore_sub_junk(2)
elif matches[1] in ["ANCI","DESI","RIN","RFN"]: elif matches[1] in ["ANCI","DESI","RIN","RFN"]:
@ -1635,6 +1638,42 @@ class GedcomParser:
return dateobj return dateobj
def resolve_refns(self):
prefix = self.db.iprefix
pmap = self.db.getPersonMap()
renamed = []
new_pmax = self.db.pmapIndex
for person in self.added:
if self.refn.has_key(person):
val = self.refn[person]
new_key = prefix % val
new_pmax = max(new_pmax,val)
# new ID is not used
if not pmap.has_key(new_key):
del pmap[person.getId()]
pmap[new_key] = person
person.setId(new_key)
else:
tp = pmap[new_key]
# same person, just change it
if person == tp:
del pmap[person.getId()]
pmap[new_key] = person
person.setId(new_key)
# person currently using it was just added, change it
elif tp in self.added:
if not self.refn.has_key(tp):
renamed.append(tp)
del pmap[person.getId()]
pmap[new_key] = person
person.setId(new_key)
self.db.pmapIndex = new_pmax
for person in renamed:
del pmap[person]
self.db.addPerson(person)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# #