From 7739f1951db8534ecc5db0baa0271d9e694cd0fa Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 24 Apr 2013 17:54:43 +0000 Subject: [PATCH] (svn r25204) [1.3] -Backport from trunk: - Change: [strgen] Allow any number of colour codes in translations (r25193, r25192, r25191) - Feature: Faroese and Scottish Gaelic translations (r25198, r25176) - Feature: Plural form to be used by Scottish Gaelic (1,11; 2,12; 3..10, 13..19; other) (r25078) --- src/strgen/strgen.cpp | 26 ++++++++----------------- src/strings.cpp | 5 +++++ src/table/strgen_tables.h | 40 ++++++++++++++++++--------------------- 3 files changed, 31 insertions(+), 40 deletions(-) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 8e5ee4df55..909427b562 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -434,24 +434,14 @@ int CDECL main(int argc, char *argv[]) printf("args\tflags\tcommand\treplacement\n"); for (const CmdStruct *cs = _cmd_structs; cs < endof(_cmd_structs); cs++) { char flags; - switch (cs->value) { - case 0x200E: case 0x200F: // Implicit BIDI controls - case 0x202A: case 0x202B: case 0x202C: case 0x202D: case 0x202E: // Explicit BIDI controls - case 0xA0: // Non breaking space - case '\n': // Newlines may be added too - case '{': // This special - /* This command may be in the translation when it is not in base */ - flags = 'i'; - break; - - default: - if (cs->proc == EmitGender) { - flags = 'g'; // Command needs number of parameters defined by number of genders - } else if (cs->proc == EmitPlural) { - flags = 'p'; // Command needs number of parameters defined by plural value - } else { - flags = '0'; // Command needs no parameters - } + if (cs->proc == EmitGender) { + flags = 'g'; // Command needs number of parameters defined by number of genders + } else if (cs->proc == EmitPlural) { + flags = 'p'; // Command needs number of parameters defined by plural value + } else if (cs->flags & C_DONTCOUNT) { + flags = 'i'; // Command may be in the translation when it is not in base + } else { + flags = '0'; // Command needs no parameters } printf("%i\t%c\t\"%s\"\t\"%s\"\n", cs->consumes, flags, cs->cmd, strstr(cs->cmd, "STRING") ? "STRING" : cs->cmd); } diff --git a/src/strings.cpp b/src/strings.cpp index 94de57f6f5..054ebb5ca7 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -617,6 +617,11 @@ static int DeterminePluralForm(int64 count, int plural_form) * Maltese */ case 12: return (n == 1 ? 0 : n == 0 || (n % 100 > 1 && n % 100 < 11) ? 1 : (n % 100 > 10 && n % 100 < 20) ? 2 : 3); + /* Four forms: special cases for 1 and 11, 2 and 12, 3 .. 10 and 13 .. 19, other + * Used in: + * Scottish Gaelic */ + case 13: + return ((n == 1 || n == 11) ? 0 : (n == 2 || n == 12) ? 1 : ((n > 2 && n < 11) || (n > 12 && n < 20)) ? 2 : 3); } } diff --git a/src/table/strgen_tables.h b/src/table/strgen_tables.h index ed405aa48b..811a8ffdae 100644 --- a/src/table/strgen_tables.h +++ b/src/table/strgen_tables.h @@ -40,23 +40,23 @@ static const CmdStruct _cmd_structs[] = { {"BIG_FONT", EmitSingleChar, SCC_BIGFONT, 0, C_NONE}, /* Colours */ - {"BLUE", EmitSingleChar, SCC_BLUE, 0, C_NONE}, - {"SILVER", EmitSingleChar, SCC_SILVER, 0, C_NONE}, - {"GOLD", EmitSingleChar, SCC_GOLD, 0, C_NONE}, - {"RED", EmitSingleChar, SCC_RED, 0, C_NONE}, - {"PURPLE", EmitSingleChar, SCC_PURPLE, 0, C_NONE}, - {"LTBROWN", EmitSingleChar, SCC_LTBROWN, 0, C_NONE}, - {"ORANGE", EmitSingleChar, SCC_ORANGE, 0, C_NONE}, - {"GREEN", EmitSingleChar, SCC_GREEN, 0, C_NONE}, - {"YELLOW", EmitSingleChar, SCC_YELLOW, 0, C_NONE}, - {"DKGREEN", EmitSingleChar, SCC_DKGREEN, 0, C_NONE}, - {"CREAM", EmitSingleChar, SCC_CREAM, 0, C_NONE}, - {"BROWN", EmitSingleChar, SCC_BROWN, 0, C_NONE}, - {"WHITE", EmitSingleChar, SCC_WHITE, 0, C_NONE}, - {"LTBLUE", EmitSingleChar, SCC_LTBLUE, 0, C_NONE}, - {"GRAY", EmitSingleChar, SCC_GRAY, 0, C_NONE}, - {"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, C_NONE}, - {"BLACK", EmitSingleChar, SCC_BLACK, 0, C_NONE}, + {"BLUE", EmitSingleChar, SCC_BLUE, 0, C_DONTCOUNT}, + {"SILVER", EmitSingleChar, SCC_SILVER, 0, C_DONTCOUNT}, + {"GOLD", EmitSingleChar, SCC_GOLD, 0, C_DONTCOUNT}, + {"RED", EmitSingleChar, SCC_RED, 0, C_DONTCOUNT}, + {"PURPLE", EmitSingleChar, SCC_PURPLE, 0, C_DONTCOUNT}, + {"LTBROWN", EmitSingleChar, SCC_LTBROWN, 0, C_DONTCOUNT}, + {"ORANGE", EmitSingleChar, SCC_ORANGE, 0, C_DONTCOUNT}, + {"GREEN", EmitSingleChar, SCC_GREEN, 0, C_DONTCOUNT}, + {"YELLOW", EmitSingleChar, SCC_YELLOW, 0, C_DONTCOUNT}, + {"DKGREEN", EmitSingleChar, SCC_DKGREEN, 0, C_DONTCOUNT}, + {"CREAM", EmitSingleChar, SCC_CREAM, 0, C_DONTCOUNT}, + {"BROWN", EmitSingleChar, SCC_BROWN, 0, C_DONTCOUNT}, + {"WHITE", EmitSingleChar, SCC_WHITE, 0, C_DONTCOUNT}, + {"LTBLUE", EmitSingleChar, SCC_LTBLUE, 0, C_DONTCOUNT}, + {"GRAY", EmitSingleChar, SCC_GRAY, 0, C_DONTCOUNT}, + {"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, C_DONTCOUNT}, + {"BLACK", EmitSingleChar, SCC_BLACK, 0, C_DONTCOUNT}, {"REV", EmitSingleChar, SCC_REVISION, 0, C_NONE}, // openttd revision string @@ -128,15 +128,10 @@ static const CmdStruct _cmd_structs[] = { {"PLANE", EmitSingleChar, SCC_PLANE, 0, C_DONTCOUNT}, {"SHIP", EmitSingleChar, SCC_SHIP, 0, C_DONTCOUNT}, {"NBSP", EmitSingleChar, 0xA0, 0, C_DONTCOUNT}, - {"CENT", EmitSingleChar, 0xA2, 0, C_DONTCOUNT}, - {"POUND_SIGN", EmitSingleChar, 0xA3, 0, C_DONTCOUNT}, - {"EURO", EmitSingleChar, 0x20AC, 0, C_DONTCOUNT}, - {"YEN_SIGN", EmitSingleChar, 0xA5, 0, C_DONTCOUNT}, {"COPYRIGHT", EmitSingleChar, 0xA9, 0, C_DONTCOUNT}, {"DOWN_ARROW", EmitSingleChar, SCC_DOWN_ARROW, 0, C_DONTCOUNT}, {"CHECKMARK", EmitSingleChar, SCC_CHECKMARK, 0, C_DONTCOUNT}, {"CROSS", EmitSingleChar, SCC_CROSS, 0, C_DONTCOUNT}, - {"REGISTERED", EmitSingleChar, 0xAE, 0, C_DONTCOUNT}, {"RIGHT_ARROW", EmitSingleChar, SCC_RIGHT_ARROW, 0, C_DONTCOUNT}, {"SMALL_LEFT_ARROW", EmitSingleChar, SCC_LESS_THAN, 0, C_DONTCOUNT}, {"SMALL_RIGHT_ARROW", EmitSingleChar, SCC_GREATER_THAN, 0, C_DONTCOUNT}, @@ -174,6 +169,7 @@ static const PluralForm _plural_forms[] = { { 3, "Three forms: special cases for 1, and 2 to 4.", "\"1\" \"2..4\" \"other\"" }, { 2, "Two forms: cases for numbers ending with a consonant, and with a vowel.", "\"yeong,il,sam,yuk,chil,pal\" \"i,sa,o,gu\"" }, { 4, "Four forms: special cases for 1, 0 and numbers ending in 02 to 10, and numbers ending in 11 to 19.", "\"1\" \"0,2..10,102..110,202..210,...\" \"11..19,111..119,211..219,...\" \"other\"" }, + { 4, "Four forms: special cases for 1 and 11, 2 and 12, 3..10 and 13..19.", "\"1,11\" \"2,12\" \"3..10,13..19\" \"other\"" }, }; /* Flags: