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 <SUBMITTER_NAME> + TOKEN_NAME : self.__subm_name, + # +1 <<ADDRESS_STRUCTURE>> + TOKEN_ADDR : self.__subm_addr, + TOKEN_PHON : self.__subm_phon, + TOKEN_ : self.__subm_phon, + # +1 <<MULTIMEDIA_LINK>> + # +1 LANG <LANGUAGE_PREFERENCE> + # +1 RFN <SUBMITTER_REGISTERED_RFN> + # +1 RIN <AUTOMATED_RECORD_ID> + # +1 <<CHANGE_DATE>> + } + # # 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 @<XREF:SUBM>@ SUBM + +1 NAME <SUBMITTER_NAME> + +1 <<ADDRESS_STRUCTURE>> + +1 <<MULTIMEDIA_LINK>> + +1 LANG <LANGUAGE_PREFERENCE> + +1 RFN <SUBMITTER_REGISTERED_RFN> + +1 RIN <AUTOMATED_RECORD_ID> + +1 <<CHANGE_DATE>> """ - 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 <PHONE_NUMBER> {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===