4910: when no surname known, Narweb picks up the patronymic as Main surnames

svn: r17606
This commit is contained in:
Benny Malengier 2011-05-28 15:49:57 +00:00
parent a5d04fe010
commit 607d06f901
4 changed files with 66 additions and 9 deletions

View File

@ -274,6 +274,7 @@ register('preferences.hide-ep-msg', False)
register('preferences.invalid-date-format', "<b>%s</b>") register('preferences.invalid-date-format', "<b>%s</b>")
register('preferences.iprefix', 'I%04d') register('preferences.iprefix', 'I%04d')
register('preferences.name-format', 1) register('preferences.name-format', 1)
register('preferences.patronimic-surname', False)
register('preferences.no-given-text', "[%s]" % _("Missing Given Name")) register('preferences.no-given-text', "[%s]" % _("Missing Given Name"))
register('preferences.no-record-text', "[%s]" % _("Missing Record")) register('preferences.no-record-text', "[%s]" % _("Missing Record"))
register('preferences.no-surname-text', "[%s]" % _("Missing Surname")) register('preferences.no-surname-text', "[%s]" % _("Missing Surname"))

View File

@ -103,6 +103,8 @@ _F_ACT = 2 # if the format is active
_F_FN = 3 # name format function _F_FN = 3 # name format function
_F_RAWFN = 4 # name format raw function _F_RAWFN = 4 # name format raw function
PAT_AS_SURN = False
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Local functions # Local functions
@ -148,6 +150,7 @@ def _raw_full_surname(raw_surn_data_list):
def _raw_primary_surname(raw_surn_data_list): def _raw_primary_surname(raw_surn_data_list):
"""method for the 'm' symbol: primary surname""" """method for the 'm' symbol: primary surname"""
global PAT_AS_SURN
nrsur = len(raw_surn_data_list) nrsur = len(raw_surn_data_list)
for raw_surn_data in raw_surn_data_list: for raw_surn_data in raw_surn_data_list:
if raw_surn_data[_PRIMARY_IN_LIST]: if raw_surn_data[_PRIMARY_IN_LIST]:
@ -155,7 +158,8 @@ def _raw_primary_surname(raw_surn_data_list):
#is only one surname, then primary has little meaning, and we #is only one surname, then primary has little meaning, and we
#assume a pa/matronymic should not be given as primary as it #assume a pa/matronymic should not be given as primary as it
#normally is defined independently #normally is defined independently
if nrsur == 1 and (raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO if not PAT_AS_SURN and nrsur == 1 and \
(raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO
or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO): or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO):
return '' return ''
else: else:
@ -168,10 +172,12 @@ def _raw_primary_surname(raw_surn_data_list):
def _raw_primary_surname_only(raw_surn_data_list): def _raw_primary_surname_only(raw_surn_data_list):
"""method to obtain the raw primary surname data, so this returns a string """method to obtain the raw primary surname data, so this returns a string
""" """
global PAT_AS_SURN
nrsur = len(raw_surn_data_list) nrsur = len(raw_surn_data_list)
for raw_surn_data in raw_surn_data_list: for raw_surn_data in raw_surn_data_list:
if raw_surn_data[_PRIMARY_IN_LIST]: if raw_surn_data[_PRIMARY_IN_LIST]:
if nrsur == 1 and (raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO if not PAT_AS_SURN and nrsur == 1 and \
(raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO
or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO): or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO):
return '' return ''
else: else:
@ -180,10 +186,12 @@ def _raw_primary_surname_only(raw_surn_data_list):
def _raw_primary_prefix_only(raw_surn_data_list): def _raw_primary_prefix_only(raw_surn_data_list):
"""method to obtain the raw primary surname data""" """method to obtain the raw primary surname data"""
global PAT_AS_SURN
nrsur = len(raw_surn_data_list) nrsur = len(raw_surn_data_list)
for raw_surn_data in raw_surn_data_list: for raw_surn_data in raw_surn_data_list:
if raw_surn_data[_PRIMARY_IN_LIST]: if raw_surn_data[_PRIMARY_IN_LIST]:
if nrsur == 1 and (raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO if not PAT_AS_SURN and nrsur == 1 and \
(raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO
or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO): or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO):
return '' return ''
else: else:
@ -192,10 +200,12 @@ def _raw_primary_prefix_only(raw_surn_data_list):
def _raw_primary_conn_only(raw_surn_data_list): def _raw_primary_conn_only(raw_surn_data_list):
"""method to obtain the raw primary surname data""" """method to obtain the raw primary surname data"""
global PAT_AS_SURN
nrsur = len(raw_surn_data_list) nrsur = len(raw_surn_data_list)
for raw_surn_data in raw_surn_data_list: for raw_surn_data in raw_surn_data_list:
if raw_surn_data[_PRIMARY_IN_LIST]: if raw_surn_data[_PRIMARY_IN_LIST]:
if nrsur == 1 and (raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO if not PAT_AS_SURN and nrsur == 1 and \
(raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINPATRO
or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO): or raw_surn_data[_TYPE_IN_LIST][0] == _ORIGINMATRO):
return '' return ''
else: else:
@ -301,6 +311,11 @@ def cleanup_name(namestring):
class NameDisplay(object): class NameDisplay(object):
""" """
Base class for displaying of Name instances. Base class for displaying of Name instances.
property:
* default_format: the default name format to use
* pas_as_surn : if only one surname, see if pa/ma should be considered as
'the' surname.
""" """
format_funcs = {} format_funcs = {}
@ -321,6 +336,7 @@ class NameDisplay(object):
def __init__(self): def __init__(self):
global WITH_GRAMP_CONFIG global WITH_GRAMP_CONFIG
global PAT_AS_SURN
self.name_formats = {} self.name_formats = {}
if WITH_GRAMPS_CONFIG: if WITH_GRAMPS_CONFIG:
@ -328,13 +344,27 @@ class NameDisplay(object):
if self.default_format == 0: if self.default_format == 0:
self.default_format = Name.LNFN self.default_format = Name.LNFN
config.set('preferences.name-format', self.default_format) config.set('preferences.name-format', self.default_format)
#if only one surname, see if pa/ma should be considered as
# 'the' surname.
PAT_AS_SURN = config.get('preferences.patronimic-surname')
config.connect('preferences.patronimic-surname', self.change_pa_sur)
else: else:
self.default_format = Name.LNFN self.default_format = Name.LNFN
PAT_AS_SURN = False
#preinit the name formats, this should be updated with the data #preinit the name formats, this should be updated with the data
#in the database once a database is loaded #in the database once a database is loaded
self.set_name_format(self.STANDARD_FORMATS) self.set_name_format(self.STANDARD_FORMATS)
def change_pa_sur(self, *args):
""" How to handle single patronymic as surname is changed"""
global PAT_AS_SURN
PAT_AS_SURN = config.get('preferences.patronimic-surname')
def get_pat_as_surn(self):
global PAT_AS_SURN
return PAT_AS_SURN
def _format_fn(self, fmt_str): def _format_fn(self, fmt_str):
return lambda x: self.format_str(x, fmt_str) return lambda x: self.format_str(x, fmt_str)
@ -719,8 +749,18 @@ class NameDisplay(object):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def primary_surname(self, name):
global PAT_AS_SURN
nrsur = len(name.surname_list)
sur = name.get_primary_surname()
if not PAT_AS_SURN and nrsur <= 1 and \
(sur.get_origintype().value == _ORIGINPATRO
or sur.get_origintype().value == _ORIGINMATRO):
return ''
return sur.get_surname()
def sort_string(self, name): def sort_string(self, name):
return u"%-25s%-30s%s" % (name.get_primary_surname().get_surname(), return u"%-25s%-30s%s" % (self.primary_surname(name),
name.first_name, name.suffix) name.first_name, name.suffix)
def sorted(self, person): def sorted(self, person):

View File

@ -250,12 +250,14 @@ class ConfigureDialog(ManagedWindow.ManagedWindow):
self.__config.set(constant, int(obj.get_value())) self.__config.set(constant, int(obj.get_value()))
def add_checkbox(self, table, label, index, constant, start=1, stop=9, def add_checkbox(self, table, label, index, constant, start=1, stop=9,
config=None): config=None, extra_callback=None):
if not config: if not config:
config = self.__config config = self.__config
checkbox = gtk.CheckButton(label) checkbox = gtk.CheckButton(label)
checkbox.set_active(config.get(constant)) checkbox.set_active(config.get(constant))
checkbox.connect('toggled', self.update_checkbox, constant, config) checkbox.connect('toggled', self.update_checkbox, constant, config)
if extra_callback:
checkbox.connect('toggled', extra_callback)
table.attach(checkbox, start, stop, index, index+1, yoptions=0) table.attach(checkbox, start, stop, index, index+1, yoptions=0)
def add_radiobox(self, table, label, index, constant, group, column, def add_radiobox(self, table, label, index, constant, group, column,
@ -757,7 +759,14 @@ class GrampsPreferences(ConfigureDialog):
config.set('preferences.name-format', new_idx) config.set('preferences.name-format', new_idx)
_nd.set_default_format(new_idx) _nd.set_default_format(new_idx)
self.uistate.emit('nameformat-changed') self.uistate.emit('nameformat-changed')
def cb_pa_sur_changed(self,*args):
"""
checkbox patronymic as surname changed, propagate to namedisplayer
"""
_nd.change_pa_sur()
self.uistate.emit('nameformat-changed')
def cb_format_tree_select(self, tree_selection): def cb_format_tree_select(self, tree_selection):
""" """
Name format editor TreeView callback Name format editor TreeView callback
@ -843,6 +852,13 @@ class GrampsPreferences(ConfigureDialog):
table.attach(lwidget, 0, 1, row, row+1, yoptions=0) table.attach(lwidget, 0, 1, row, row+1, yoptions=0)
table.attach(hbox, 1, 3, row, row+1, yoptions=0) table.attach(hbox, 1, 3, row, row+1, yoptions=0)
row += 1 row += 1
# Pa/Matronymic surname handling
self.add_checkbox(table,
_("Consider single pa/matronimic as surname"),
row, 'preferences.patronimic-surname', stop=3,
extra_callback=self.cb_pa_sur_changed)
row += 1
# Date format: # Date format:
obox = gtk.combo_box_new_text() obox = gtk.combo_box_new_text()

View File

@ -6800,7 +6800,7 @@ def sort_people(db, handle_list):
surname = primary_name.group_as surname = primary_name.group_as
else: else:
surname = db.get_name_group_mapping( surname = db.get_name_group_mapping(
primary_name.get_primary_surname().get_surname()) _nd.primary_surname(primary_name))
sortnames[person_handle] = _nd.sort_string(primary_name) sortnames[person_handle] = _nd.sort_string(primary_name)
sname_sub[surname].append(person_handle) sname_sub[surname].append(person_handle)
@ -6855,7 +6855,7 @@ def _get_short_name(gender, name):
def __get_person_keyname(db, handle): def __get_person_keyname(db, handle):
""" .... """ """ .... """
person = db.get_person_from_handle(handle) person = db.get_person_from_handle(handle)
return person.get_primary_name().get_surname() return _nd.sort_string(person.get_primary_name())
def __get_place_keyname(db, handle): def __get_place_keyname(db, handle):
""" ... """ """ ... """