From: Rudolf Polzer Date: Fri, 19 Jul 2013 11:27:15 +0000 (+0200) Subject: Prevent translatable strings from merging with non-translatable strings. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d55ae43097da8005245be7ce45e6af7efbeae14d;p=xonotic%2Fgmqcc.git Prevent translatable strings from merging with non-translatable strings. Fixes quit function in Xonotic when the selected language is not English (as both the internal window title and the visible identiifer are "Quit", only the latter of which is translatable). --- diff --git a/parser.c b/parser.c index 8a7cf87..4fa1d3f 100644 --- a/parser.c +++ b/parser.c @@ -49,6 +49,7 @@ typedef struct parser_s { size_t translated; ht ht_imm_string; + ht ht_imm_string_dotranslate; /* must be deleted first, they reference immediates and values */ ast_value **accessors; @@ -262,15 +263,11 @@ static ast_value* parser_const_string(parser_t *parser, const char *str, bool do { size_t hash = util_hthash(parser->ht_imm_string, str); ast_value *out; - if ( (out = (ast_value*)util_htgeth(parser->ht_imm_string, str, hash)) ) { - if (dotranslate && out->name[0] == '#') { - char name[32]; - util_snprintf(name, sizeof(name), "dotranslate_%lu", (unsigned long)(parser->translated++)); - ast_value_set_name(out, name); - out->expression.flags |= AST_FLAG_INCLUDE_DEF; - } + hash_table_t *ht_string = + dotranslate ? parser->ht_imm_string_dotranslate : parser->ht_imm_string; + + if ( (out = (ast_value*)util_htgeth(ht_string, str, hash)) ) return out; - } /* for (i = 0; i < vec_size(parser->imm_string); ++i) { if (!strcmp(parser->imm_string[i]->constval.vstring, str)) @@ -289,7 +286,7 @@ static ast_value* parser_const_string(parser_t *parser, const char *str, bool do out->isimm = true; out->constval.vstring = parser_strdup(str); vec_push(parser->imm_string, out); - util_htseth(parser->ht_imm_string, str, hash, out); + util_htseth(ht_string, str, hash, out); return out; } @@ -6117,6 +6114,7 @@ parser_t *parser_create() parser->aliases = util_htnew(PARSER_HT_SIZE); parser->ht_imm_string = util_htnew(512); + parser->ht_imm_string_dotranslate = util_htnew(512); /* corrector */ vec_push(parser->correct_variables, correct_trie_new()); @@ -6233,6 +6231,7 @@ static void parser_remove_ast(parser_t *parser) vec_free(parser->functions); vec_free(parser->imm_vector); vec_free(parser->imm_string); + util_htdel(parser->ht_imm_string_dotranslate); util_htdel(parser->ht_imm_string); vec_free(parser->imm_float); vec_free(parser->globals);