[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3333 - in trunk/pingus: . src src/tinygettext
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3333 - in trunk/pingus: . src src/tinygettext |
Date: |
Sat, 27 Oct 2007 06:52:22 +0200 |
Author: grumbel
Date: 2007-10-27 06:52:21 +0200 (Sat, 27 Oct 2007)
New Revision: 3333
Modified:
trunk/pingus/TODO
trunk/pingus/src/pingus_main.cpp
trunk/pingus/src/tinygettext/dictionary.cpp
trunk/pingus/src/tinygettext/dictionary.hpp
trunk/pingus/src/tinygettext/dictionary_manager.cpp
trunk/pingus/src/tinygettext/dictionary_manager.hpp
trunk/pingus/src/tinygettext/language_def.cpp
trunk/pingus/src/tinygettext/language_def.hpp
Log:
- cleaned up language handling a bit, pt_BR now works
Modified: trunk/pingus/TODO
===================================================================
--- trunk/pingus/TODO 2007-10-27 03:55:17 UTC (rev 3332)
+++ trunk/pingus/TODO 2007-10-27 04:52:21 UTC (rev 3333)
@@ -99,18 +99,21 @@
- Levels: All levels lack name and description
- check all entrances are properly done
-halloween1-grumbel.pingus - gfx test only, not playable
-halloween2-grumbel.pingus - rescue by jump - finished - needs testing
-halloween3-grumbel.pingus - digg tunnel - finished - needs testing
-halloween4-grumbel.pingus - wall bomb - finished - needs testing
-halloween5-grumbel.pingus - join-jump - not playable
-halloween6-grumbel.pingus - jump high - finished - needs testing
-halloween7-grumbel.pingus - rescue - finished - needs testing - number of
pingus wrong
+- check that number of pingus and number to save are adjusted
+- check that actions are limited
+- add name and descriptions
+halloween1-grumbel.pingus - circle save - finished - needs testing (easy)
+halloween2-grumbel.pingus - rescue by jump - finished - needs testing (easy)
+halloween3-grumbel.pingus - digg tunnel - finished - needs testing (medium)
+halloween4-grumbel.pingus - wall bomb - finished - needs testing (easy/medium)
+halloween5-grumbel.pingus - join-jump - finished - needs testing (hard++)
+halloween6-grumbel.pingus - jump high - finished - needs testing (easy)
+halloween7-grumbel.pingus - rescue - finished - needs testing - number of
pingus wrong (hard--)
+halloween8-plouj.pingus - bridge broken - (hard+)
+
- jumper dies sometimes in data/levels/tutorial/snow11-grumbel.scm when
hitting the ground
-- fix pt_BR.po support, currently pt.po is loaded instead
-
- implement option menu
- make auto-scroll disableable in fullscreen
Modified: trunk/pingus/src/pingus_main.cpp
===================================================================
--- trunk/pingus/src/pingus_main.cpp 2007-10-27 03:55:17 UTC (rev 3332)
+++ trunk/pingus/src/pingus_main.cpp 2007-10-27 04:52:21 UTC (rev 3333)
@@ -186,7 +186,7 @@
std::cout << "========================" << std::endl;
std::set<std::string> lst = dictionary_manager.get_languages();
for (std::set<std::string>::iterator i = lst.begin(); i != lst.end();
++i)
- std::cout << TinyGetText::get_language_def(*i).name << " (" << *i <<
")" << std::endl;
+ std::cout << TinyGetText::get_language_def(*i)->name << " (" << *i <<
")" << std::endl;
std::cout << "\nLanguages can be used via:\n\n pingus --language
de\n" << std::endl;
@@ -218,7 +218,7 @@
// Misc
if (options.language.is_set())
- dictionary_manager.set_language(options.language.get());
+ dictionary_manager.set_current_dictionary(options.language.get());
if (options.auto_scrolling.is_set())
auto_scrolling = options.auto_scrolling.get();
@@ -627,7 +627,12 @@
std::cout << std::endl;
std::cout << "data path: " << path_manager.get_base_path() <<
std::endl;
- std::cout << "language: " <<
dictionary_manager.get_dictionary().get_language().name << std::endl;
+ std::cout << "language: "
+ << dictionary_manager.get_dictionary().get_language()->name
+ << " ("
+ << dictionary_manager.get_dictionary().get_language()->code
+ << ")"
+ << std::endl;
Fonts::encoding =
StringUtil::to_lower(dictionary_manager.get_dictionary().get_charset());
std::cout << "font encoding: " << Fonts::encoding << std::endl;
Modified: trunk/pingus/src/tinygettext/dictionary.cpp
===================================================================
--- trunk/pingus/src/tinygettext/dictionary.cpp 2007-10-27 03:55:17 UTC (rev
3332)
+++ trunk/pingus/src/tinygettext/dictionary.cpp 2007-10-27 04:52:21 UTC (rev
3333)
@@ -21,13 +21,15 @@
namespace TinyGetText {
-Dictionary::Dictionary(const LanguageDef& language_, const std::string&
charset_)
- : language(language_), charset(charset_)
+Dictionary::Dictionary(LanguageDef* language_, const std::string& charset_)
+ : language(language_),
+ charset(charset_)
{
}
Dictionary::Dictionary()
- : language(lang_en), charset("ISO-8859-1")
+ : language(&lang_en),
+ charset("ISO-8859-1")
{
}
@@ -44,7 +46,7 @@
}
void
-Dictionary::set_language(const LanguageDef& lang)
+Dictionary::set_language(LanguageDef* lang)
{
language = lang;
}
@@ -57,7 +59,7 @@
if (i != plural_entries.end() && !msgstrs.empty())
{
- int g = language.plural(num);
+ int g = language->plural(num);
std::map<int, std::string>::iterator j = msgstrs.find(g);
if (j != msgstrs.end())
{
Modified: trunk/pingus/src/tinygettext/dictionary.hpp
===================================================================
--- trunk/pingus/src/tinygettext/dictionary.hpp 2007-10-27 03:55:17 UTC (rev
3332)
+++ trunk/pingus/src/tinygettext/dictionary.hpp 2007-10-27 04:52:21 UTC (rev
3333)
@@ -39,11 +39,11 @@
typedef std::map<std::string, std::map<int, std::string> > PluralEntries;
PluralEntries plural_entries;
- LanguageDef language;
- std::string charset;
+ LanguageDef* language;
+ std::string charset;
public:
/** */
- Dictionary(const LanguageDef& language_, const std::string& charset = "");
+ Dictionary(LanguageDef* language_, const std::string& charset = "");
Dictionary();
@@ -55,9 +55,9 @@
/** Set the language that is used for this dictionary, this is
mainly needed to evaluate plural forms */
- void set_language(const LanguageDef& lang);
+ void set_language(LanguageDef* lang);
- LanguageDef get_language() const { return language; }
+ LanguageDef* get_language() const { return language; }
/** Translate the string \a msgid to its correct plural form, based
on the number of items given by \a num. \a msgid2 is \a msgid in
Modified: trunk/pingus/src/tinygettext/dictionary_manager.cpp
===================================================================
--- trunk/pingus/src/tinygettext/dictionary_manager.cpp 2007-10-27 03:55:17 UTC
(rev 3332)
+++ trunk/pingus/src/tinygettext/dictionary_manager.cpp 2007-10-27 04:52:21 UTC
(rev 3333)
@@ -41,19 +41,23 @@
}
DictionaryManager::DictionaryManager()
- : empty_dict(lang_en, "ISO-8859-1"),
- current_dict(&empty_dict)
+ : empty_dict(&lang_en, "ISO-8859-1"),
+ current_dict(&empty_dict),
+ language(&lang_en)
{
+#ifndef WIN32
parseLocaleAliases();
+#endif
+
// setup language from environment vars
const char* lang = getenv("LC_ALL");
- if(!lang)
+ if (!lang)
lang = getenv("LC_MESSAGES");
- if(!lang)
+ if (!lang)
lang = getenv("LANG");
- if(lang)
- set_language(lang);
+ if (lang)
+ set_current_dictionary(lang);
}
void
@@ -80,23 +84,23 @@
}
while(isspace(c) && !in.eof())
in.get(c);
- std::string language;
+ std::string lang;
while(!isspace(c) && !in.eof()) {
- language += c;
+ lang += c;
in.get(c);
}
if(in.eof())
break;
- set_language_alias(alias, language);
+
+ set_language_alias(alias, lang);
}
}
Dictionary&
-DictionaryManager::get_dictionary(const std::string& spec)
+DictionaryManager::get_dictionary(LanguageDef* lang)
{
- std::string lang = get_language_from_spec(spec);
- Dictionaries::iterator i = dictionaries.find(get_language_from_spec(lang));
+ Dictionaries::iterator i = dictionaries.find(lang);
if (i != dictionaries.end())
{
return i->second;
@@ -105,9 +109,9 @@
{
Dictionary& dict = dictionaries[lang];
- dict.set_language(get_language_def(lang));
+ dict.set_language(lang);
- for (SearchPath::iterator p = search_path.begin(); p !=
search_path.end(); ++p)
+ for(SearchPath::iterator p = search_path.begin(); p !=
search_path.end(); ++p)
{
DIR* dir = opendir(p->c_str());
if (!dir)
@@ -119,7 +123,7 @@
struct dirent* ent;
while((ent = readdir(dir)))
{
- if (std::string(ent->d_name) == lang + ".po")
+ if (std::string(ent->d_name) == std::string(lang->code) +
".po")
{
std::string pofile = *p + "/" + ent->d_name;
std::ifstream in(pofile.c_str());
@@ -171,10 +175,20 @@
}
void
-DictionaryManager::set_language(const std::string& lang)
+DictionaryManager::set_current_dictionary(const std::string& lang)
{
- language = get_language_from_spec(lang);
- current_dict = & (get_dictionary(language));
+ LanguageDef* new_lang = get_canonical_language(lang);
+ if (!new_lang)
+ {
+ std::cout << "Error: DictionaryManager: Couldn't find LanguageDef for '"
<< lang
+ << "', leaving current dictionary unchanged" << std::endl;
+ }
+ else
+ {
+ language = new_lang;
+ // std::cout << "Language: supplied: '" << lang << "' -> canonical: '"
<< language->code << "'" << std::endl;
+ current_dict = &(get_dictionary(language));
+ }
}
void
@@ -184,20 +198,29 @@
language_aliases.insert(std::make_pair(alias, language));
}
-std::string
-DictionaryManager::get_language_from_spec(const std::string& spec)
+LanguageDef*
+DictionaryManager::get_canonical_language(const std::string& spec)
{
- std::string lang = spec;
- Aliases::iterator i = language_aliases.find(lang);
- if(i != language_aliases.end()) {
- lang = i->second;
- }
-
- std::string::size_type s = lang.find_first_of("_.");
- if(s == std::string::npos)
- return lang;
+ std::string lang_code = spec;
- return std::string(lang, 0, s);
+ // Check for language aliases
+ Aliases::iterator i = language_aliases.find(spec);
+ if(i != language_aliases.end())
+ lang_code = i->second;
+
+ // Cut away any specification of the codeset (i.e. de_DE.ISO-8859-1)
+ std::string::size_type s = lang_code.find_first_of(".");
+
+ if (s != std::string::npos)
+ lang_code = std::string(spec, 0, s);
+
+ LanguageDef* lang_def = get_language_def(lang_code);
+ if (lang_def)
+ return lang_def;
+ else if (lang_code.length() == 5) // 'en_EN' failed, try 'en'
+ return get_language_def(lang_code.substr(0, 2));
+ else
+ return 0;
}
void
@@ -205,7 +228,7 @@
{
dictionaries.clear(); // adding directories invalidates cache
search_path.push_back(pathname);
- set_language(language);
+ current_dict = &(get_dictionary(language));
}
} // namespace TinyGetText
Modified: trunk/pingus/src/tinygettext/dictionary_manager.hpp
===================================================================
--- trunk/pingus/src/tinygettext/dictionary_manager.hpp 2007-10-27 03:55:17 UTC
(rev 3332)
+++ trunk/pingus/src/tinygettext/dictionary_manager.hpp 2007-10-27 04:52:21 UTC
(rev 3333)
@@ -34,14 +34,15 @@
private:
Dictionary empty_dict;
- typedef std::map<std::string, Dictionary> Dictionaries;
+ typedef std::map<LanguageDef*, Dictionary> Dictionaries;
Dictionaries dictionaries;
typedef std::vector<std::string> SearchPath;
SearchPath search_path;
typedef std::map<std::string, std::string> Aliases;
Aliases language_aliases;
- std::string language;
- Dictionary* current_dict;
+ // The two (de) or five letter (de_DE) language code
+ LanguageDef* language;
+ Dictionary* current_dict;
public:
DictionaryManager();
@@ -51,11 +52,11 @@
Dictionary& get_dictionary()
{ return *current_dict; }
- /** Get dictionary for lang */
- Dictionary& get_dictionary(const std::string& langspec);
+ /** Get dictionary for the given lang_code */
+ Dictionary& get_dictionary(LanguageDef* lang);
/** Set a language based on a four? letter country code */
- void set_language(const std::string& langspec);
+ void set_current_dictionary(const std::string& langspec);
/** Define an alias for a language */
void set_language_alias(const std::string& alias, const std::string& lang);
@@ -68,8 +69,9 @@
private:
void parseLocaleAliases();
- /// returns the language part in a language spec (like de_DE.UTF-8 -> de)
- std::string get_language_from_spec(const std::string& spec);
+
+ // de_DE.ISO-8859-1 -> de_DE, german -> de_DE, etc.
+ LanguageDef* get_canonical_language(const std::string& language);
};
} // namespace TinyGetText
Modified: trunk/pingus/src/tinygettext/language_def.cpp
===================================================================
--- trunk/pingus/src/tinygettext/language_def.cpp 2007-10-27 03:55:17 UTC
(rev 3332)
+++ trunk/pingus/src/tinygettext/language_def.cpp 2007-10-27 04:52:21 UTC
(rev 3333)
@@ -69,43 +69,43 @@
LanguageDef lang_sl("sl", "Slovenian", 3, plural3_sl); // "nplurals=4;
plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
//*}
-LanguageDef&
+LanguageDef*
get_language_def(const std::string& name)
{
- if (name == "hu") return lang_hu;
- else if (name == "ja") return lang_ja;
- else if (name == "ko") return lang_ko;
- else if (name == "tr") return lang_tr;
- else if (name == "da") return lang_da;
- else if (name == "nl") return lang_nl;
- else if (name == "en") return lang_en;
- else if (name == "fo") return lang_fo;
- else if (name == "de") return lang_de;
- else if (name == "nb") return lang_nb;
- else if (name == "no") return lang_no;
- else if (name == "nn") return lang_nn;
- else if (name == "sv") return lang_sv;
- else if (name == "et") return lang_et;
- else if (name == "fi") return lang_fi;
- else if (name == "el") return lang_el;
- else if (name == "he") return lang_he;
- else if (name == "it") return lang_it;
- else if (name == "pt") return lang_pt;
- else if (name == "es") return lang_es;
- else if (name == "eo") return lang_eo;
- else if (name == "fr") return lang_fr;
- else if (name == "pt_BR") return lang_pt_BR;
- else if (name == "lv") return lang_lv;
- else if (name == "ga") return lang_ga;
- else if (name == "lt") return lang_lt;
- else if (name == "hr") return lang_hr;
- else if (name == "cs") return lang_cs;
- else if (name == "ru") return lang_ru;
- else if (name == "uk") return lang_uk;
- else if (name == "sk") return lang_sk;
- else if (name == "pl") return lang_pl;
- else if (name == "sl") return lang_sl;
- else return lang_en;
+ if (name == "hu") return &lang_hu;
+ else if (name == "ja") return &lang_ja;
+ else if (name == "ko") return &lang_ko;
+ else if (name == "tr") return &lang_tr;
+ else if (name == "da") return &lang_da;
+ else if (name == "nl") return &lang_nl;
+ else if (name == "en") return &lang_en;
+ else if (name == "fo") return &lang_fo;
+ else if (name == "de") return &lang_de;
+ else if (name == "nb") return &lang_nb;
+ else if (name == "no") return &lang_no;
+ else if (name == "nn") return &lang_nn;
+ else if (name == "sv") return &lang_sv;
+ else if (name == "et") return &lang_et;
+ else if (name == "fi") return &lang_fi;
+ else if (name == "el") return &lang_el;
+ else if (name == "he") return &lang_he;
+ else if (name == "it") return &lang_it;
+ else if (name == "pt") return &lang_pt;
+ else if (name == "es") return &lang_es;
+ else if (name == "eo") return &lang_eo;
+ else if (name == "fr") return &lang_fr;
+ else if (name == "pt_BR") return &lang_pt_BR;
+ else if (name == "lv") return &lang_lv;
+ else if (name == "ga") return &lang_ga;
+ else if (name == "lt") return &lang_lt;
+ else if (name == "hr") return &lang_hr;
+ else if (name == "cs") return &lang_cs;
+ else if (name == "ru") return &lang_ru;
+ else if (name == "uk") return &lang_uk;
+ else if (name == "sk") return &lang_sk;
+ else if (name == "pl") return &lang_pl;
+ else if (name == "sl") return &lang_sl;
+ else return 0;
}
} // namespace TinyGetText
Modified: trunk/pingus/src/tinygettext/language_def.hpp
===================================================================
--- trunk/pingus/src/tinygettext/language_def.hpp 2007-10-27 03:55:17 UTC
(rev 3332)
+++ trunk/pingus/src/tinygettext/language_def.hpp 2007-10-27 04:52:21 UTC
(rev 3333)
@@ -39,7 +39,7 @@
/** Read the content of the .po file given as \a in into the
dictionary given as \a dict */
-LanguageDef& get_language_def(const std::string& name);
+LanguageDef* get_language_def(const std::string& name);
extern LanguageDef lang_hu;
extern LanguageDef lang_ja;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3333 - in trunk/pingus: . src src/tinygettext,
grumbel at BerliOS <=