From b40ddaeaa15122959dab65c4204fa985f18cf549 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 16 Jun 2014 20:41:08 -0700 Subject: [PATCH] add test for keyword aliases, add keyword to strings for reverse lookup --- src/kernel/jsonconf.c | 4 ++++ src/kernel/jsonconf.test.c | 5 ++++- src/kernel/order.c | 2 +- src/util/parser.c | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index a6b684a08..cd11c8826 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -278,11 +278,15 @@ static void json_keyword(cJSON *json, struct locale *lang) { if (kwd!=NOKEYWORD) { if (child->type==cJSON_String) { init_keyword(lang, kwd, child->valuestring); + locale_setstring(lang, mkname("keyword", keywords[kwd]), child->valuestring); } else if (child->type==cJSON_Array) { cJSON *entry; for (entry=child->child;entry;entry=entry->next) { init_keyword(lang, kwd, entry->valuestring); + if ((entry==child->child)) { + locale_setstring(lang, mkname("keyword", keywords[kwd]), entry->valuestring); + } } } else { log_error_n("invalid type %d for keyword `%s`", child->type, child->string); diff --git a/src/kernel/jsonconf.test.c b/src/kernel/jsonconf.test.c index aaa3ef6d2..25312ab6e 100644 --- a/src/kernel/jsonconf.test.c +++ b/src/kernel/jsonconf.test.c @@ -169,7 +169,7 @@ static void test_directions(CuTest * tc) static void test_keywords(CuTest * tc) { - const char * data = "{\"keywords\": { \"de\" : { \"move\" : \"nach\", \"study\" : \"lernen\" }}}"; + const char * data = "{\"keywords\": { \"de\" : { \"move\" : \"NACH\", \"study\" : [ \"LERNEN\", \"STUDIEREN\" ] }}}"; const struct locale * lang; cJSON *json = cJSON_Parse(data); @@ -180,9 +180,12 @@ static void test_keywords(CuTest * tc) CuAssertIntEquals(tc, NOKEYWORD, get_keyword("potato", lang)); json_config(json); + CuAssertIntEquals(tc, K_STUDY, get_keyword("studiere", lang)); CuAssertIntEquals(tc, K_STUDY, get_keyword("lerne", lang)); CuAssertIntEquals(tc, K_MOVE, get_keyword("nach", lang)); + CuAssertStrEquals(tc, "LERNEN", locale_string(lang, "keyword::study")); + test_cleanup(); } diff --git a/src/kernel/order.c b/src/kernel/order.c index 62eea2093..6a0d9c954 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -105,7 +105,7 @@ static char* get_command(const order *ord, char *sbuffer, size_t size) { if (kwd != NOKEYWORD) { const struct locale *lang = ORD_LOCALE(ord); if (size > 0) { - const char *str = (const char *)LOC(lang, keywords[kwd]); + const char *str = (const char *)LOC(lang, mkname("keyword", keywords[kwd])); assert(str); if (text) --size; bytes = (int)strlcpy(bufp, str, size); diff --git a/src/util/parser.c b/src/util/parser.c index 4e95be50a..d5b2b9ed8 100644 --- a/src/util/parser.c +++ b/src/util/parser.c @@ -53,8 +53,9 @@ void init_tokens_str(const char *initstr, char *cmd) { if (states == NULL) { states = malloc(sizeof(parser_state)); - } else if (states->current_cmd) + } else if (states->current_cmd) { free(states->current_cmd); + } states->current_cmd = cmd; states->current_token = initstr; }