Suport FTM 2017 Gedcom tags on import
Bug #10285 FTM adds subordinate PLAC and OBJE data to INDI.ADDR which is non-standard. So treat it as a Residence Event, instead of an Address. FTM puts _DATE and _TEXT tags subordinate to OBJE, also non-standard.
This commit is contained in:
parent
a339e68877
commit
5490ff0b84
@ -274,6 +274,8 @@ TOKEN__PHOTO = 132
|
|||||||
TOKEN__LINK = 133
|
TOKEN__LINK = 133
|
||||||
TOKEN__PRIM = 134
|
TOKEN__PRIM = 134
|
||||||
TOKEN__JUST = 135
|
TOKEN__JUST = 135
|
||||||
|
TOKEN__TEXT = 136
|
||||||
|
TOKEN__DATE = 137
|
||||||
|
|
||||||
TOKENS = {
|
TOKENS = {
|
||||||
"HEAD" : TOKEN_HEAD, "MEDI" : TOKEN_MEDI,
|
"HEAD" : TOKEN_HEAD, "MEDI" : TOKEN_MEDI,
|
||||||
@ -365,7 +367,7 @@ TOKENS = {
|
|||||||
"_WITN" : TOKEN__WITN, "_WTN" : TOKEN__WTN,
|
"_WITN" : TOKEN__WITN, "_WTN" : TOKEN__WTN,
|
||||||
"_CHUR" : TOKEN_IGNORE,"RELA" : TOKEN_RELA,
|
"_CHUR" : TOKEN_IGNORE,"RELA" : TOKEN_RELA,
|
||||||
"_DETAIL" : TOKEN_IGNORE,"_PREF" : TOKEN__PRIMARY,
|
"_DETAIL" : TOKEN_IGNORE,"_PREF" : TOKEN__PRIMARY,
|
||||||
"_LKD" : TOKEN__LKD, "_DATE" : TOKEN_IGNORE,
|
"_LKD" : TOKEN__LKD, "_DATE" : TOKEN__DATE,
|
||||||
"_SCBK" : TOKEN_IGNORE,"_TYPE" : TOKEN_TYPE,
|
"_SCBK" : TOKEN_IGNORE,"_TYPE" : TOKEN_TYPE,
|
||||||
"_PRIM" : TOKEN__PRIM, "_SSHOW" : TOKEN_IGNORE,
|
"_PRIM" : TOKEN__PRIM, "_SSHOW" : TOKEN_IGNORE,
|
||||||
"_PAREN" : TOKEN_IGNORE,"BLOB" : TOKEN_BLOB,
|
"_PAREN" : TOKEN_IGNORE,"BLOB" : TOKEN_BLOB,
|
||||||
@ -383,7 +385,7 @@ TOKENS = {
|
|||||||
"_ADPN" : TOKEN__ADPN, "_FSFTID" : TOKEN__FSFTID,
|
"_ADPN" : TOKEN__ADPN, "_FSFTID" : TOKEN__FSFTID,
|
||||||
"_LINK" : TOKEN__LINK, "_PHOTO" : TOKEN__PHOTO,
|
"_LINK" : TOKEN__LINK, "_PHOTO" : TOKEN__PHOTO,
|
||||||
"_JUST" : TOKEN__JUST, # FTM Citation Quality Justification
|
"_JUST" : TOKEN__JUST, # FTM Citation Quality Justification
|
||||||
"FAX" : TOKEN_FAX,
|
"FAX" : TOKEN_FAX, "_TEXT" : TOKEN__TEXT,
|
||||||
}
|
}
|
||||||
|
|
||||||
ADOPT_NONE = 0
|
ADOPT_NONE = 0
|
||||||
@ -1059,6 +1061,7 @@ class GedLine:
|
|||||||
_MAP_DATA = {
|
_MAP_DATA = {
|
||||||
TOKEN_UNKNOWN : GedLine.calc_unknown,
|
TOKEN_UNKNOWN : GedLine.calc_unknown,
|
||||||
TOKEN_DATE : GedLine.calc_date,
|
TOKEN_DATE : GedLine.calc_date,
|
||||||
|
TOKEN__DATE : GedLine.calc_date,
|
||||||
TOKEN_SEX : GedLine.calc_sex,
|
TOKEN_SEX : GedLine.calc_sex,
|
||||||
TOKEN_NOTE : GedLine.calc_note,
|
TOKEN_NOTE : GedLine.calc_note,
|
||||||
TOKEN_NCHI : GedLine.calc_nchi,
|
TOKEN_NCHI : GedLine.calc_nchi,
|
||||||
@ -2550,7 +2553,9 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_TITL : self.__obje_title,
|
TOKEN_TITL : self.__obje_title,
|
||||||
TOKEN_FILE : self.__obje_file, # de-facto extension
|
TOKEN_FILE : self.__obje_file, # de-facto extension
|
||||||
TOKEN_TEXT : self.__obje_text, # FTM extension
|
TOKEN_TEXT : self.__obje_text, # FTM extension
|
||||||
|
TOKEN__TEXT : self.__obje_text, # FTM 2017 extension
|
||||||
TOKEN_DATE : self.__obje_date, # FTM extension
|
TOKEN_DATE : self.__obje_date, # FTM extension
|
||||||
|
TOKEN__DATE : self.__obje_date, # FTM 2017 extension
|
||||||
TOKEN_NOTE : self.__obje_note,
|
TOKEN_NOTE : self.__obje_note,
|
||||||
TOKEN_RNOTE : self.__obje_note,
|
TOKEN_RNOTE : self.__obje_note,
|
||||||
TOKEN_SOUR : self.__obje_sour,
|
TOKEN_SOUR : self.__obje_sour,
|
||||||
@ -4122,6 +4127,9 @@ class GedcomParser(UpdateCallback):
|
|||||||
@param state: The current state
|
@param state: The current state
|
||||||
@type state: CurrentState
|
@type state: CurrentState
|
||||||
"""
|
"""
|
||||||
|
if self.is_ftw:
|
||||||
|
self.__person_resi(line, state)
|
||||||
|
return
|
||||||
free_form = line.data
|
free_form = line.data
|
||||||
|
|
||||||
sub_state = CurrentState(level=state.level + 1)
|
sub_state = CurrentState(level=state.level + 1)
|
||||||
@ -4133,6 +4141,26 @@ class GedcomParser(UpdateCallback):
|
|||||||
self.__merge_address(free_form, sub_state.addr, line, state)
|
self.__merge_address(free_form, sub_state.addr, line, state)
|
||||||
state.person.add_address(sub_state.addr)
|
state.person.add_address(sub_state.addr)
|
||||||
|
|
||||||
|
def __person_resi(self, line, state):
|
||||||
|
"""
|
||||||
|
Parses GEDCOM ADDR tag, subordinate to the INDI tag, when sourced by
|
||||||
|
FTM. We treat this as a RESI event, because FTM puts standard event
|
||||||
|
details below the ADDR line.
|
||||||
|
|
||||||
|
n ADDR <ADDRESS_LINE> {0:1}
|
||||||
|
+1 <<EVENT_DETAIL>> {0:1} p.*
|
||||||
|
|
||||||
|
@param line: The current line in GedLine format
|
||||||
|
@type line: GedLine
|
||||||
|
@param state: The current state
|
||||||
|
@type state: CurrentState
|
||||||
|
"""
|
||||||
|
self.backoff = True # reprocess the current ADDR line
|
||||||
|
line.level += 1 # as if it was next level down
|
||||||
|
event_ref = self.__build_event_pair(state, EventType.RESIDENCE,
|
||||||
|
self.event_parse_tbl, '')
|
||||||
|
state.person.add_event_ref(event_ref)
|
||||||
|
|
||||||
def __person_phon(self, line, state):
|
def __person_phon(self, line, state):
|
||||||
"""
|
"""
|
||||||
n PHON <PHONE_NUMBER> {0:3}
|
n PHON <PHONE_NUMBER> {0:3}
|
||||||
|
Loading…
Reference in New Issue
Block a user