From d55ae43097da8005245be7ce45e6af7efbeae14d Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 19 Jul 2013 13:27:15 +0200 Subject: [PATCH] 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). --- parser.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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); -- 2.39.2