From b09fa93eea0cc7728170c9631dde880cf08c0505 Mon Sep 17 00:00:00 2001 From: Gary Burton Date: Fri, 26 Jun 2009 10:25:22 +0000 Subject: [PATCH] Parse address from GEDCOM submitter tag. Bug #3056 svn: r12717 --- src/GrampsDbUtils/_GedcomParse.py | 93 +++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/src/GrampsDbUtils/_GedcomParse.py b/src/GrampsDbUtils/_GedcomParse.py index 3bce8cdf9..5fa5c8c29 100644 --- a/src/GrampsDbUtils/_GedcomParse.py +++ b/src/GrampsDbUtils/_GedcomParse.py @@ -313,6 +313,23 @@ class GedcomParser(UpdateCallback): self.rid2id = {} self.nid2id = {} + # + # Parse table for SUBM tag + # + self.subm_parse_tbl = { + # +1 NAME + TOKEN_NAME : self.__subm_name, + # +1 <> + TOKEN_ADDR : self.__subm_addr, + TOKEN_PHON : self.__subm_phon, + TOKEN_ : self.__subm_phon, + # +1 <> + # +1 LANG + # +1 RFN + # +1 RIN + # +1 <> + } + # # Parse table for INDI tag # @@ -803,7 +820,6 @@ class GedcomParser(UpdateCallback): self.want_parse_warnings = False self.__parse_header_source() self.want_parse_warnings = True - self.__parse_submitter() if self.use_def_src: self.dbase.add_source(self.def_src, self.trans) self.__parse_record() @@ -1099,24 +1115,25 @@ class GedcomParser(UpdateCallback): except TypeError: return - def __parse_submitter(self): + def __parse_submitter(self, line): """ Parses the submitter data + + n @@ SUBM + +1 NAME + +1 <> + +1 <> + +1 LANG + +1 RFN + +1 RIN + +1 <> """ - line = self.__get_next_line() - if line.data != "SUBM": - self._backup() - return - else: - while True: - line = self.__get_next_line() - if self.__level_is_finished(line, 1): - break - elif line.token == TOKEN_NAME: - if self.use_def_src: - self.def_src.set_author(line.data) - elif line.token == TOKEN_ADDR: - self.__skip_subordinate_levels(2) + researcher = gen.lib.Researcher() + state = GedcomUtils.CurrentState() + state.res = researcher + state.level = 1 + self.__parse_level(state, self.subm_parse_tbl, self.__undefined) + self.dbase.set_researcher(state.res) def __parse_record(self): """ @@ -1138,7 +1155,9 @@ class GedcomParser(UpdateCallback): self.__parse_obje(line) elif key in ("REPO", "REPOSITORY"): self.__parse_repo(line) - elif key in ("SUBM", "SUBN", "SUBMITTER"): + elif key in ("SUBM", "SUBMITTER"): + self.__parse_submitter(line) + elif key in ("SUBN"): self.__skip_subordinate_levels(1) elif line.token in (TOKEN_SUBM, TOKEN_SUBN, TOKEN_IGNORE): self.__skip_subordinate_levels(1) @@ -4276,4 +4295,44 @@ class GedcomParser(UpdateCallback): sref.set_reference_handle(self.def_src.handle) obj.add_source_reference(sref) + def __subm_name(self, line, state): + """ + @param line: The current line in GedLine format + @type line: GedLine + @param state: The current state + @type state: CurrentState + """ + state.res.set_name(line.data) + + def __subm_addr(self, line, state): + """ + @param line: The current line in GedLine format + @type line: GedLine + @param state: The current state + @type state: CurrentState + """ + sub_state = GedcomUtils.CurrentState(level=state.level + 1) + sub_state.location = gen.lib.Location() + sub_state.location.set_street(line.data) + + self.__parse_level(sub_state, self.parse_loc_tbl, self.__undefined) + + location = sub_state.location + state.res.set_address(location.get_street()) + state.res.set_city(location.get_city()) + state.res.set_state(location.get_state()) + state.res.set_country(location.get_country()) + state.res.set_postal_code(location.get_postal_code()) + + def __subm_phon(self, line, state): + """ + n PHON {0:3} + + @param line: The current line in GedLine format + @type line: GedLine + @param state: The current state + @type state: CurrentState + """ + state.res.set_phone(line.data) + #===eof===