]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
Prevent translatable strings from merging with non-translatable strings.
authorRudolf Polzer <divverent@xonotic.org>
Fri, 19 Jul 2013 11:27:15 +0000 (13:27 +0200)
committerRudolf Polzer <divverent@xonotic.org>
Fri, 19 Jul 2013 11:27:15 +0000 (13:27 +0200)
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

index 8a7cf876948e06119fa1730340f5b0be22e6742b..4fa1d3f7c47372f8523c5c68d7ea5fb926305f3d 100644 (file)
--- 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);