diff options
author | Darkvater <Darkvater@openttd.org> | 2005-10-30 00:16:48 +0000 |
---|---|---|
committer | Darkvater <Darkvater@openttd.org> | 2005-10-30 00:16:48 +0000 |
commit | ab1a7464e83bd7408f7dc765f650c5016e8341a6 (patch) | |
tree | 6844b87b8ef3d4e7817d6b9a287315913ceb74c4 /strgen | |
parent | 7a09fffa3a783cf408598a09c2237ba44cc84c6c (diff) | |
download | openttd-ab1a7464e83bd7408f7dc765f650c5016e8341a6.tar.xz |
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Diffstat (limited to 'strgen')
-rw-r--r-- | strgen/strgen.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/strgen/strgen.c b/strgen/strgen.c index 431077979..3c07931eb 100644 --- a/strgen/strgen.c +++ b/strgen/strgen.c @@ -54,6 +54,7 @@ typedef struct Case { struct Case *next; } Case; +static bool _masterlang; static const char* _file = "(unknown file)"; static int _cur_line; static int _errors, _warnings; @@ -64,6 +65,7 @@ typedef struct LangString { char *translated; // Translated text uint16 hash_next; // next hash entry uint16 index; + int line; // line of string in source-file Case *english_case; // cases for english Case *translated_case; // cases for foreign } LangString; @@ -320,18 +322,29 @@ static void EmitPlural(char *buf, int value) argidx--; // Parse each string - for(nw=0; nw<5; nw++) { + for (nw = 0; nw < 5; nw++) { words[nw] = ParseWord(&buf); if (!words[nw]) break; } if (nw == 0) - Fatal("No plural words"); + Fatal("%s: No plural words", _cur_ident); if (_plural_form_counts[_lang_pluralform] != nw) - Fatal("%s: Invalid number of plural forms. Expecting %d, found %d.", _cur_ident, - _plural_form_counts[_lang_pluralform], nw); + if (_masterlang) { + Fatal("%s: Invalid number of plural forms. Expecting %d, found %d.", _cur_ident, + _plural_form_counts[_lang_pluralform], nw); + } else { + Warning("'%s' is untranslated. Tweaking english string to allow compilation for plural forms", _cur_ident); + if (nw > _plural_form_counts[_lang_pluralform]) { + nw = _plural_form_counts[_lang_pluralform]; + } else { + for(; nw < _plural_form_counts[_lang_pluralform]; nw++) { + words[nw] = words[nw - 1]; + } + } + } PutByte(0x8D); PutByte(TranslateArgumentIdx(argidx)); @@ -787,6 +800,7 @@ static void HandleString(char *str, bool master) _strings[_next_string_id] = ent; ent->index = _next_string_id++; ent->name = strdup(str); + ent->line = _cur_line; HashAdd(str, ent); } @@ -1120,6 +1134,7 @@ static void WriteLangfile(const char *filename, int show_todo) } _cur_ident = ls->name; + _cur_line = ls->line; // Produce a message if a string doesn't have a translation. if (show_todo && ls->translated == NULL) { @@ -1209,6 +1224,7 @@ int CDECL main(int argc, char* argv[]) if (argc == 1) { + _masterlang = true; // parse master file ParseFile("lang/english.txt", true); MakeHashOfStrings(); @@ -1220,6 +1236,7 @@ int CDECL main(int argc, char* argv[]) WriteStringsH("table/strings.h"); } else if (argc == 2) { + _masterlang = false; ParseFile("lang/english.txt", true); MakeHashOfStrings(); ParseFile(argv[1], false); |