diff --git a/gramps2/src/EditPerson.py b/gramps2/src/EditPerson.py index 7d647bb25..e719161a4 100644 --- a/gramps2/src/EditPerson.py +++ b/gramps2/src/EditPerson.py @@ -179,10 +179,12 @@ class EditPerson: self.alt_last_field = self.get_widget("alt_last") self.alt_title_field = self.get_widget("alt_title") self.alt_suffix_field = self.get_widget("alt_suffix") + self.alt_prefix_field = self.get_widget("alt_prefix") self.name_type_field = self.get_widget("name_type") self.surname_field = self.get_widget("surname") self.ntype_field = self.get_widget("ntype") self.suffix = self.get_widget("suffix") + self.prefix = self.get_widget("prefix") self.given = self.get_widget("givenName") self.nick = self.get_widget("nickname") self.title = self.get_widget("title") @@ -774,6 +776,7 @@ class EditPerson: surname = self.surname_field.get_text() ntype = self.ntype_field.entry.get_text() suffix = self.suffix.get_text() + prefix = self.prefix.get_text() given = self.given.get_text() nick = self.nick.get_text() title = self.title.get_text() @@ -791,6 +794,8 @@ class EditPerson: changed = 1 if suffix != name.getSuffix(): changed = 1 + if prefix != name.getSurnamePrefix(): + changed = 1 if surname != name.getSurname(): changed = 1 if ntype != name.getType(): @@ -995,6 +1000,7 @@ class EditPerson: self.alt_title_field.set_text(name.getTitle()) self.alt_last_field.set_text(name.getSurname()) self.alt_suffix_field.set_text(name.getSuffix()) + self.alt_prefix_field.set_text(name.getSurnamePrefix()) self.name_type_field.set_text(name.getType()) if len(name.getSourceRefList()) > 0: psrc = name.getSourceRefList()[0] @@ -1010,6 +1016,7 @@ class EditPerson: self.alt_title_field.set_text('') self.alt_last_field.set_text('') self.alt_suffix_field.set_text('') + self.alt_prefix_field.set_text('') self.name_type_field.set_text('') self.name_src_field.set_text('') self.name_conf_field.set_text('') @@ -1104,6 +1111,7 @@ class EditPerson: surname = self.surname_field.get_text() suffix = self.suffix.get_text() + prefix = self.prefix.get_text() ntype = self.ntype_field.entry.get_text() given = self.given.get_text() nick = self.nick.get_text() @@ -1131,6 +1139,9 @@ class EditPerson: if suffix != name.getSuffix(): name.setSuffix(suffix) + if prefix != name.getSurnamePrefix(): + name.setSurnamePrefix(prefix) + if const.NameTypesMap.has_key(ntype): ntype = const.NameTypesMap[ntype] else: @@ -1382,6 +1393,7 @@ class EditPerson: name = GrampsCfg.nameof(self.person) self.get_widget("activepersonTitle").set_text(name) self.suffix.set_text(self.pname.getSuffix()) + self.prefix.set_text(self.pname.getSurnamePrefix()) self.surname_field.set_text(self.pname.getSurname()) self.given.set_text(self.pname.getFirstName()) diff --git a/gramps2/src/GedcomInfo.py b/gramps2/src/GedcomInfo.py index a2bb202b0..9b9a3cb4c 100644 --- a/gramps2/src/GedcomInfo.py +++ b/gramps2/src/GedcomInfo.py @@ -38,6 +38,8 @@ CALENDAR_NO = 0 CALENDAR_YES = 1 OBJE_NO = 0 OBJE_YES = 1 +PREFIX_NO = 0 +PREFIX_YES = 1 RESIDENCE_ADDR = 0 RESIDENCE_PLAC = 1 @@ -60,7 +62,8 @@ class GedcomDescription: self.resi = RESIDENCE_ADDR self.gramps2tag_map = {} self.tag2gramps_map = {} - + self.prefix = PREFIX_YES + def set_dest(self,val): self.dest = val @@ -73,6 +76,12 @@ class GedcomDescription: def get_adopt(self): return self.adopt + def set_prefix(self,val): + self.prefix=val + + def get_prefix(self): + return self.prefix + def set_conc(self,val): self.conc = val @@ -212,6 +221,9 @@ class GedInfoParser: elif tag == "object_support": if attrs['val'] == 'no': self.current.set_obje(OBJE_NO) + elif tag == "prefix": + if attrs['val'] == 'no': + self.current.set_obje(PREFIX_NO) elif tag == "residence": if attrs['val'] == 'place': self.current.set_resi(RESIDENCE_PLAC) diff --git a/gramps2/src/GrampsParser.py b/gramps2/src/GrampsParser.py index fa692f7e7..8ef5e6afd 100644 --- a/gramps2/src/GrampsParser.py +++ b/gramps2/src/GrampsParser.py @@ -303,6 +303,10 @@ class GrampsParser: self.name.conf = 2 if attrs.has_key("priv"): self.name.private = int(attrs["priv"]) + + def start_last(self,attrs): + if attrs.has_key('prefix'): + self.name.Prefix = attrs['prefix'] def start_note(self,attrs): self.in_note = 1 @@ -746,7 +750,7 @@ class GrampsParser: "first" : (None, stop_first), "gender" : (None, stop_gender), "header" : (None, None), - "last" : (None, stop_last), + "last" : (start_last, stop_last), "mother" : (start_mother,None), "name" : (start_name, stop_name), "nick" : (None, stop_nick), diff --git a/gramps2/src/ListModel.py b/gramps2/src/ListModel.py index 00fca8bcc..93719e276 100644 --- a/gramps2/src/ListModel.py +++ b/gramps2/src/ListModel.py @@ -74,6 +74,11 @@ class ListModel: def connect_model(self): self.tree.set_model(self.model) self.model.set_sort_column_id(0,gtk.SORT_ASCENDING) + + def sort(self): + val = self.model.get_sort_column_id() + self.model.set_sort_column_id(val[0],val[1]) + self.model.sort_column_changed() def get_selected(self): return self.selection.get_selected() diff --git a/gramps2/src/RelLib.py b/gramps2/src/RelLib.py index 7d037608a..cb4485712 100644 --- a/gramps2/src/RelLib.py +++ b/gramps2/src/RelLib.py @@ -821,12 +821,20 @@ class Name(DataObj): self.Suffix = source.Suffix self.Title = source.Title self.type = source.type + self.Prefix = source.Prefix else: self.FirstName = "" self.Surname = "" self.Suffix = "" self.Title = "" self.type = "" + self.Prefix = "" + + def getSurnamePrefix(self): + return self.Prefix + + def setSurnamePrefix(self,val): + self.Prefix = val def setType(self,type): """sets the type of the Name instance""" @@ -872,10 +880,16 @@ class Name(DataObj): """returns a name string built from the components of the Name instance, in the form of Surname, Firstname""" - if (self.Suffix == ""): - return "%s, %s" % (self.Surname, self.FirstName) + if self.Suffix: + if self.Prefix: + return "%s %s, %s %s" % (self.Prefix, self.Surname, self.FirstName, self.Suffix) + else: + return "%s, %s %s" % (self.Surname, self.FirstName, self.Suffix) else: - return "%s, %s %s" % (self.Surname, self.FirstName, self.Suffix) + if self.Prefix: + return "%s %s, %s" % (self.Prefix,self.Surname, self.FirstName) + else: + return "%s, %s" % (self.Surname, self.FirstName) def getRegularName(self): """returns a name string built from the components of the Name diff --git a/gramps2/src/WriteXML.py b/gramps2/src/WriteXML.py index 3da4442d6..17bfdad6e 100644 --- a/gramps2/src/WriteXML.py +++ b/gramps2/src/WriteXML.py @@ -437,6 +437,14 @@ class XmlWriter: else: self.g.write('>\n') + def write_last(self,name,indent=1): + p = name.Prefix + n = name.Surname + if p: + self.g.write('%s%s\n' % (' '*indent,p,self.fix(n))) + else: + self.g.write('%s%s\n' % (' '*indent,self.fix(n))) + def write_line(self,label,value,indent=1): if value: self.g.write('%s<%s>%s\n' % (' '*indent,label,self.fix(value),label)) @@ -486,7 +494,7 @@ class XmlWriter: else: self.g.write('%s<%s%s>\n' % (sp,label,conf_priv(name))) self.write_line("first",name.getFirstName(),index+1) - self.write_line("last",name.getSurname(),index+1) + self.write_last(name,index+1) self.write_line("suffix",name.getSuffix(),index+1) self.write_line("title",name.getTitle(),index+1) if name.getNote() != "": diff --git a/gramps2/src/data/gedcom.xml b/gramps2/src/data/gedcom.xml index 53923950f..1f55efb03 100644 --- a/gramps2/src/data/gedcom.xml +++ b/gramps2/src/data/gedcom.xml @@ -5,6 +5,7 @@ + @@ -16,6 +17,7 @@ + @@ -27,6 +29,7 @@ + @@ -42,6 +45,7 @@ + @@ -53,6 +57,7 @@ + @@ -63,6 +68,7 @@ + @@ -75,6 +81,7 @@ + @@ -86,6 +93,7 @@ + @@ -97,6 +105,7 @@ + @@ -108,6 +117,7 @@ + diff --git a/gramps2/src/dialog.glade b/gramps2/src/dialog.glade index 2c33bb13c..124c31218 100644 --- a/gramps2/src/dialog.glade +++ b/gramps2/src/dialog.glade @@ -2546,7 +2546,7 @@ True - 6 + 7 2 False 0 @@ -2617,8 +2617,8 @@ 0 1 - 2 - 3 + 3 + 4 fill @@ -2639,8 +2639,8 @@ 1 2 - 2 - 3 + 3 + 4 3 3 @@ -2751,8 +2751,8 @@ 0 1 - 4 - 5 + 5 + 6 fill @@ -2857,8 +2857,8 @@ 1 2 - 4 - 5 + 5 + 6 3 3 @@ -2882,8 +2882,8 @@ 0 1 - 3 - 4 + 4 + 5 fill @@ -2904,8 +2904,8 @@ 1 2 - 3 - 4 + 4 + 5 3 3 @@ -2926,12 +2926,59 @@ 1 2 - 5 - 6 + 6 + 7 fill + + + + True + Surname Prefix + False + False + GTK_JUSTIFY_CENTER + False + False + 1 + 0.5 + 5 + 8 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 2 + 2 + 3 + 3 + 3 + + + False diff --git a/gramps2/src/edit_person.glade b/gramps2/src/edit_person.glade index f06bf7a7c..3ef1a8920 100644 --- a/gramps2/src/edit_person.glade +++ b/gramps2/src/edit_person.glade @@ -729,7 +729,7 @@ True - 6 + 7 3 False 0 @@ -778,8 +778,8 @@ 0 1 - 2 - 3 + 3 + 4 5 5 fill @@ -804,8 +804,8 @@ 0 1 - 3 - 4 + 4 + 5 5 5 fill @@ -830,8 +830,8 @@ 0 1 - 4 - 5 + 5 + 6 5 5 fill @@ -880,8 +880,8 @@ 1 3 - 4 - 5 + 5 + 6 3 3 @@ -927,8 +927,8 @@ 1 2 - 2 - 3 + 3 + 4 3 3 @@ -948,8 +948,8 @@ 2 3 - 2 - 3 + 3 + 4 3 3 @@ -972,8 +972,8 @@ 1 2 - 3 - 4 + 4 + 5 3 3 @@ -993,8 +993,8 @@ 2 3 - 3 - 4 + 4 + 5 3 3 fill @@ -1019,8 +1019,8 @@ 0 1 - 5 - 6 + 6 + 7 5 5 fill @@ -1105,8 +1105,8 @@ 1 3 - 5 - 6 + 6 + 7 3 3 @@ -1153,6 +1153,55 @@ + + + + True + Surname Prefix + False + False + GTK_JUSTIFY_CENTER + False + False + 1 + 0.5 + 0 + 0 + + + 0 + 1 + 2 + 3 + 5 + 5 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 3 + 2 + 3 + 3 + 3 + + + @@ -1194,6 +1243,7 @@ + 275 True 0.5 0.5 diff --git a/gramps2/src/gramps_main.py b/gramps2/src/gramps_main.py index d558ff3d8..e82607f03 100755 --- a/gramps2/src/gramps_main.py +++ b/gramps2/src/gramps_main.py @@ -1217,6 +1217,7 @@ class Gramps: if change: self.change_active_person(person) self.goto_active_person() + model.sort() def redisplay_person_list(self,person): self.add_to_person_list(person,1) diff --git a/gramps2/src/plugins/ReadGedcom.py b/gramps2/src/plugins/ReadGedcom.py index ee4e0eeea..c519fe47a 100644 --- a/gramps2/src/plugins/ReadGedcom.py +++ b/gramps2/src/plugins/ReadGedcom.py @@ -1339,7 +1339,7 @@ class GedcomParser: elif matches[1] == "GIVN": name.setFirstName(matches[2]) elif matches[1] == "SPFX": - pass + name.setSurnamePrefix(matches[2]) elif matches[1] == "SURN": name.setSurname(matches[2]) self.db.addSurname(matches[2]) diff --git a/gramps2/src/plugins/WriteGedcom.py b/gramps2/src/plugins/WriteGedcom.py index 6872efe62..6eda24a14 100644 --- a/gramps2/src/plugins/WriteGedcom.py +++ b/gramps2/src/plugins/WriteGedcom.py @@ -379,7 +379,8 @@ class GedcomWriter: self.cal = self.target_ged.get_alt_calendar() self.obje = self.target_ged.get_obje() self.resi = self.target_ged.get_resi() - + self.prefix = self.target_ged.get_prefix() + if self.topDialog.get_widget("ansel").get_active(): self.cnvtxt = latin_to_ansel else: @@ -892,17 +893,33 @@ class GedcomWriter: def write_person_name(self,name,nick): firstName = self.cnvtxt(name.getFirstName()) surName = self.cnvtxt(name.getSurname()) + surPref = self.cnvtxt(name.getSurnamePrefix()) suffix = self.cnvtxt(name.getSuffix()) title = self.cnvtxt(name.getTitle()) if suffix == "": - self.g.write("1 NAME %s /%s/\n" % (firstName,surName)) + if surPref: + self.g.write("1 NAME %s /%s/\n" % (firstName,surName)) + else: + self.g.write("1 NAME %s /%s %s/\n" % (firstName,surPref,surName)) else: - self.g.write("1 NAME %s /%s/, %s\n" % (firstName,surName, suffix)) + if surPref: + self.g.write("1 NAME %s /%s %s/, %s\n" % (firstName,surPref,surName,suffix)) + else: + self.g.write("1 NAME %s /%s/, %s\n" % (firstName,surName,suffix)) if name.getFirstName() != "": self.g.write("2 GIVN %s\n" % firstName) - if name.getSurname() != "": - self.g.write("2 SURN %s\n" % surName) + if self.prefix: + if surPref: + self.g.write('2 SPFX %s\n' % surPref) + if surName != "": + self.g.write("2 SURN %s\n" % surName) + else: + if surPref: + self.g.write("2 SURN %s %s\n" % (surPref,surName)) + else if surName: + self.g.write("2 SURN %s\n" % surName) + if name.getSuffix() != "": self.g.write("2 NSFX %s\n" % suffix) if name.getTitle() != "": diff --git a/gramps2/src/sort.py b/gramps2/src/sort.py index 02974f24e..3d7ef49a5 100644 --- a/gramps2/src/sort.py +++ b/gramps2/src/sort.py @@ -39,8 +39,6 @@ import Date #------------------------------------------------------------------------- su = string.upper -sp = string.split - _plist = [ 'de', 'van', 'von', 'la', 'di', 'le', 'du' ] @@ -52,14 +50,10 @@ def build_sort_name(n): """Builds a name from a RelLib.Name instance that is suitable for use as a sort key in a GtkCList. The name is converted to upper case to provide for case-insenstive sorting""" - l = string.split(n.Surname) - if len(l) > 1 and _prefix.has_key(l[0].lower()): - return "%-25s%-30s%s" % (su(l[1]),su(n.FirstName),su(n.Suffix)) + if n.Surname: + return "%-25s%-30s%s" % (su(n.Surname),su(n.FirstName),su(n.Suffix)) else: - if n.Surname: - return "%-25s%-30s%s" % (su(n.Surname),su(n.FirstName),su(n.Suffix)) - else: - return "%s" % chr(255) + return "%s" % chr(255) def build_sort_date(n):