From 3ec4c0f80ce80b946a9fec6e477b0eea377f26f6 Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Sat, 23 Jun 2012 19:43:18 +0000 Subject: [PATCH] GEPS008: Create new module for keyword translation svn: r19905 --- po/POTFILES.in | 1 + src/Utils.py | 82 ------------------------------ src/gen/utils/Makefile.am | 1 + src/gen/utils/keyword.py | 103 ++++++++++++++++++++++++++++++++++++++ src/gui/configure.py | 18 ++++--- src/test/utils_test.py | 9 ++-- 6 files changed, 120 insertions(+), 94 deletions(-) create mode 100644 src/gen/utils/keyword.py diff --git a/po/POTFILES.in b/po/POTFILES.in index a89d42fa3..f80004fef 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -323,6 +323,7 @@ src/gen/simple/_simpletable.py # gen.utils src/gen/utils/alive.py +src/gen/utils/keyword.py src/gen/utils/lds.py src/gen/utils/place.py src/gen/utils/trans.py diff --git a/src/Utils.py b/src/Utils.py index 09c0d74a7..000198f3e 100644 --- a/src/Utils.py +++ b/src/Utils.py @@ -656,88 +656,6 @@ def profile(func, *args): stats.print_stats(100) stats.print_callers(100) -#------------------------------------------------------------------------- -# -# Keyword translation interface -# -#------------------------------------------------------------------------- - -# keyword, code, translated standard, translated upper -# in gen.display.name.py we find: -# 't' : title = title -# 'f' : given = given (first names) -# 'l' : surname = full surname (lastname) -# 'c' : call = callname -# 'x' : common = nick name if existing, otherwise first first name (common name) -# 'i' : initials = initials of the first names -# 'm' : primary = primary surname (main) -# '0m': primary[pre]= prefix primary surname (main) -# '1m': primary[sur]= surname primary surname (main) -# '2m': primary[con]= connector primary surname (main) -# 'y' : patronymic = pa/matronymic surname (father/mother) - assumed unique -# '0y': patronymic[pre] = prefix " -# '1y': patronymic[sur] = surname " -# '2y': patronymic[con] = connector " -# 'o' : notpatronymic = surnames without pa/matronymic and primary -# 'r' : rest = non primary surnames -# 'p' : prefix = list of all prefixes -# 'q' : rawsurnames = surnames without prefixes and connectors -# 's' : suffix = suffix -# 'n' : nickname = nick name -# 'g' : familynick = family nick name - -KEYWORDS = [("title", "t", _("Person|Title"), _("Person|TITLE")), - ("given", "f", _("Given"), _("GIVEN")), - ("surname", "l", _("Surname"), _("SURNAME")), - ("call", "c", _("Name|Call"), _("Name|CALL")), - ("common", "x", _("Name|Common"), _("Name|COMMON")), - ("initials", "i", _("Initials"), _("INITIALS")), - ("suffix", "s", _("Suffix"), _("SUFFIX")), - ("primary", "m", _("Name|Primary"), _("PRIMARY")), - ("primary[pre]", "0m", _("Primary[pre]"), _("PRIMARY[PRE]")), - ("primary[sur]", "1m", _("Primary[sur]"), _("PRIMARY[SUR]")), - ("primary[con]", "2m", _("Primary[con]"), _("PRIMARY[CON]")), - ("patronymic", "y", _("Patronymic"), _("PATRONYMIC")), - ("patronymic[pre]", "0y", _("Patronymic[pre]"), _("PATRONYMIC[PRE]")), - ("patronymic[sur]", "1y", _("Patronymic[sur]"), _("PATRONYMIC[SUR]")), - ("patronymic[con]", "2y", _("Patronymic[con]"), _("PATRONYMIC[CON]")), - ("rawsurnames", "q", _("Rawsurnames"), _("RAWSURNAMES")), - ("notpatronymic", "o", _("Notpatronymic"),_("NOTPATRONYMIC")), - ("prefix", "p", _("Prefix"), _("PREFIX")), - ("nickname", "n", _("Nickname"), _("NICKNAME")), - ("familynick", "g", _("Familynick"), _("FAMILYNICK")), - ] -KEY_TO_TRANS = {} -TRANS_TO_KEY = {} -for (key, code, standard, upper) in KEYWORDS: - KEY_TO_TRANS[key] = standard - KEY_TO_TRANS[key.upper()] = upper - KEY_TO_TRANS["%" + ("%s" % code)] = standard - KEY_TO_TRANS["%" + ("%s" % code.upper())] = upper - TRANS_TO_KEY[standard.lower()] = key - TRANS_TO_KEY[standard] = key - TRANS_TO_KEY[upper] = key.upper() - -def get_translation_from_keyword(keyword): - """ Return the translation of keyword """ - return KEY_TO_TRANS.get(keyword, keyword) - -def get_keyword_from_translation(word): - """ Return the keyword of translation """ - return TRANS_TO_KEY.get(word, word) - -def get_keywords(): - """ Get all keywords, longest to shortest """ - keys = KEY_TO_TRANS.keys() - keys.sort(lambda a,b: -cmp(len(a), len(b))) - return keys - -def get_translations(): - """ Get all translations, longest to shortest """ - trans = TRANS_TO_KEY.keys() - trans.sort(lambda a,b: -cmp(len(a), len(b))) - return trans - #------------------------------------------------------------------------- # # Config-based functions diff --git a/src/gen/utils/Makefile.am b/src/gen/utils/Makefile.am index b469a146b..293fbf2f6 100644 --- a/src/gen/utils/Makefile.am +++ b/src/gen/utils/Makefile.am @@ -14,6 +14,7 @@ pkgpython_PYTHON = \ configmanager.py \ fallback.py \ image.py \ + keyword.py \ lds.py \ mactrans.py \ place.py \ diff --git a/src/gen/utils/keyword.py b/src/gen/utils/keyword.py new file mode 100644 index 000000000..4eeaf7fd7 --- /dev/null +++ b/src/gen/utils/keyword.py @@ -0,0 +1,103 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2000-2007 Donald N. Allingham +# Copyright (C) 2009 Gary Burton +# Copyright (C) 2011 Tim G L Lyons +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + +""" +Keyword translation interface +""" + +# keyword, code, translated standard, translated upper +# in gen.display.name.py we find: +# 't' : title = title +# 'f' : given = given (first names) +# 'l' : surname = full surname (lastname) +# 'c' : call = callname +# 'x' : common = nick name if existing, otherwise first first name (common name) +# 'i' : initials = initials of the first names +# 'm' : primary = primary surname (main) +# '0m': primary[pre]= prefix primary surname (main) +# '1m': primary[sur]= surname primary surname (main) +# '2m': primary[con]= connector primary surname (main) +# 'y' : patronymic = pa/matronymic surname (father/mother) - assumed unique +# '0y': patronymic[pre] = prefix " +# '1y': patronymic[sur] = surname " +# '2y': patronymic[con] = connector " +# 'o' : notpatronymic = surnames without pa/matronymic and primary +# 'r' : rest = non primary surnames +# 'p' : prefix = list of all prefixes +# 'q' : rawsurnames = surnames without prefixes and connectors +# 's' : suffix = suffix +# 'n' : nickname = nick name +# 'g' : familynick = family nick name + +KEYWORDS = [("title", "t", _("Person|Title"), _("Person|TITLE")), + ("given", "f", _("Given"), _("GIVEN")), + ("surname", "l", _("Surname"), _("SURNAME")), + ("call", "c", _("Name|Call"), _("Name|CALL")), + ("common", "x", _("Name|Common"), _("Name|COMMON")), + ("initials", "i", _("Initials"), _("INITIALS")), + ("suffix", "s", _("Suffix"), _("SUFFIX")), + ("primary", "m", _("Name|Primary"), _("PRIMARY")), + ("primary[pre]", "0m", _("Primary[pre]"), _("PRIMARY[PRE]")), + ("primary[sur]", "1m", _("Primary[sur]"), _("PRIMARY[SUR]")), + ("primary[con]", "2m", _("Primary[con]"), _("PRIMARY[CON]")), + ("patronymic", "y", _("Patronymic"), _("PATRONYMIC")), + ("patronymic[pre]", "0y", _("Patronymic[pre]"), _("PATRONYMIC[PRE]")), + ("patronymic[sur]", "1y", _("Patronymic[sur]"), _("PATRONYMIC[SUR]")), + ("patronymic[con]", "2y", _("Patronymic[con]"), _("PATRONYMIC[CON]")), + ("rawsurnames", "q", _("Rawsurnames"), _("RAWSURNAMES")), + ("notpatronymic", "o", _("Notpatronymic"),_("NOTPATRONYMIC")), + ("prefix", "p", _("Prefix"), _("PREFIX")), + ("nickname", "n", _("Nickname"), _("NICKNAME")), + ("familynick", "g", _("Familynick"), _("FAMILYNICK")), + ] +KEY_TO_TRANS = {} +TRANS_TO_KEY = {} +for (key, code, standard, upper) in KEYWORDS: + KEY_TO_TRANS[key] = standard + KEY_TO_TRANS[key.upper()] = upper + KEY_TO_TRANS["%" + ("%s" % code)] = standard + KEY_TO_TRANS["%" + ("%s" % code.upper())] = upper + TRANS_TO_KEY[standard.lower()] = key + TRANS_TO_KEY[standard] = key + TRANS_TO_KEY[upper] = key.upper() + +def get_translation_from_keyword(keyword): + """ Return the translation of keyword """ + return KEY_TO_TRANS.get(keyword, keyword) + +def get_keyword_from_translation(word): + """ Return the keyword of translation """ + return TRANS_TO_KEY.get(word, word) + +def get_keywords(): + """ Get all keywords, longest to shortest """ + keys = KEY_TO_TRANS.keys() + keys.sort(lambda a,b: -cmp(len(a), len(b))) + return keys + +def get_translations(): + """ Get all translations, longest to shortest """ + trans = TRANS_TO_KEY.keys() + trans.sort(lambda a,b: -cmp(len(a), len(b))) + return trans diff --git a/src/gui/configure.py b/src/gui/configure.py index ac37fc4ab..44961f4d5 100644 --- a/src/gui/configure.py +++ b/src/gui/configure.py @@ -51,8 +51,10 @@ import const import gen.datehandler from gen.display.name import displayer as _nd from gen.display.name import NameDisplayError -import Utils +from Utils import get_unicode_path_from_file_chooser from gen.utils.alive import update_constants +from gen.utils.keyword import (get_keywords, get_translation_from_keyword, + get_translations, get_keyword_from_translation) import gen.lib from gen.lib import Name, Surname, NameOriginType from gui.managedwindow import ManagedWindow @@ -528,9 +530,9 @@ class GrampsPreferences(ConfigureDialog): the_index = 0 for num, name, fmt_str, act in _nd.get_name_format(): translation = fmt_str - for key in Utils.get_keywords(): + for key in get_keywords(): if key in translation: - translation = translation.replace(key, Utils.get_translation_from_keyword(key)) + translation = translation.replace(key, get_translation_from_keyword(key)) self.examplename.set_display_as(num) name_format_model.append( row=[num, translation, fmt_str, _nd.display_name(self.examplename)]) @@ -662,9 +664,9 @@ class GrampsPreferences(ConfigureDialog): new_text[-1] == '"'): pass else: - for key in Utils.get_translations(): + for key in get_translations(): if key in pattern: - pattern = pattern.replace(key, Utils.get_keyword_from_translation(key)) + pattern = pattern.replace(key, get_keyword_from_translation(key)) # now build up a proper translation: translation = pattern if (len(new_text) > 2 and @@ -672,9 +674,9 @@ class GrampsPreferences(ConfigureDialog): new_text[-1] == '"'): pass else: - for key in Utils.get_keywords(): + for key in get_keywords(): if key in translation: - translation = translation.replace(key, Utils.get_translation_from_keyword(key)) + translation = translation.replace(key, get_translation_from_keyword(key)) num, name, fmt = self.selected_fmt[COL_NUM:COL_EXPL] node = self.fmt_model.get_iter(path) oldname = self.fmt_model.get_value(node, COL_NAME) @@ -1195,7 +1197,7 @@ class GrampsPreferences(ConfigureDialog): status = f.run() if status == gtk.RESPONSE_OK: - val = Utils.get_unicode_path_from_file_chooser(f.get_filename()) + val = get_unicode_path_from_file_chooser(f.get_filename()) if val: self.path_entry.set_text(val) f.destroy() diff --git a/src/test/utils_test.py b/src/test/utils_test.py index a1568a556..a97ce4482 100644 --- a/src/test/utils_test.py +++ b/src/test/utils_test.py @@ -25,7 +25,8 @@ import unittest from test import test_util test_util.path_append_parent() -import Utils +from gen.utils.keyword import (KEYWORDS, get_translation_from_keyword, + get_keyword_from_translation) class TestCase(unittest.TestCase): count = 1 @@ -38,11 +39,11 @@ class TestCase(unittest.TestCase): def helper(self, *args): method_name, test_type, item1, item2 = args if test_type == "keyword": - result = Utils.get_translation_from_keyword(item1) + result = get_translation_from_keyword(item1) self.assertTrue(result == item2, "get_translation_from_keyword('%s') returned '%s' rather than '%s'" % (item1, result, item2)) elif test_type == "translation": - result = Utils.get_keyword_from_translation(item1) + result = get_keyword_from_translation(item1) self.assertTrue(result == item2, "get_keyword_from_translation('%s') returned '%s' rather than '%s'" % (item1, result, item2)) else: @@ -52,7 +53,7 @@ def suite1(): """ """ suite = unittest.TestSuite() - for line in Utils.KEYWORDS: + for line in KEYWORDS: keyword, code, standard, upper = line suite.addTest(TestCase('keyword-%04d', 'keyword', keyword, standard)) suite.addTest(TestCase('translation-%04d', 'translation', standard, keyword))