X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fyaz-icu.c;h=30d9048765c7f99c1ab52981f320530c9c453466;hb=394286df42e6e2c01e5b1b446ae1cf8d0b117f35;hp=f41b93c529a91e5bd08b7674763e6694cd1511a1;hpb=e089d89f38b4fc61fce16eb03150776844b053f8;p=yaz-moved-to-github.git diff --git a/util/yaz-icu.c b/util/yaz-icu.c index f41b93c..30d9048 100644 --- a/util/yaz-icu.c +++ b/util/yaz-icu.c @@ -1,8 +1,6 @@ -/* - * Copyright (C) 1995-2007, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2008 Index Data * See the file LICENSE for details. - * - * $Id: yaz-icu.c,v 1.11 2007-11-08 13:35:14 adam Exp $ */ #if HAVE_CONFIG_H @@ -16,7 +14,6 @@ #include - #if YAZ_HAVE_ICU #include @@ -26,6 +23,7 @@ #include #include +#include /* commando line and config parameters */ static struct config_t { @@ -54,10 +52,10 @@ void print_option_error(const struct config_t *p_config) "./yaz-icu -p t -x\n" "\n" "Example ICU chain XML configuration file:\n" - "\n" - " \n" + "\n" + " \n" " \n" - " \n" + " \n" " \n" "\n" ); @@ -139,7 +137,8 @@ static void print_icu_converters(const struct config_t *p_config) ucnv_getDefaultName()); } - for(i=0;ixmloutput) fprintf(config.outfile, "\n", ucnv_getAvailableName(i)); @@ -156,7 +155,7 @@ static void print_icu_converters(const struct config_t *p_config) static void print_icu_transliterators(const struct config_t *p_config) { int32_t buf_cap = 128; - char buf[buf_cap]; + char buf[128]; int32_t i; int32_t count = utrans_countAvailableIDs(); @@ -174,7 +173,8 @@ static void print_icu_transliterators(const struct config_t *p_config) fprintf(config.outfile, " %s", buf); } - if (p_config->xmloutput){ + if (p_config->xmloutput) + { fprintf(config.outfile, "\n"); } else @@ -271,8 +271,8 @@ static void print_icu_xml_locales(const struct config_t *p_config) count = uloc_countAvailable() ; - if (p_config->xmloutput){ - + if (p_config->xmloutput) + { fprintf(config.outfile, "\n", count, uloc_getDefault(), ucol_countAvailable()); } @@ -346,7 +346,8 @@ static void print_icu_xml_locales(const struct config_t *p_config) &status); - if (p_config->xmloutput){ + if (p_config->xmloutput) + { fprintf(config.outfile, "\n"); } - else if (1 == p_config->xmloutput){ + else if (1 == p_config->xmloutput) + { fprintf(config.outfile, "%s", uloc_getAvailable(i)); fprintf(config.outfile, " | "); if (strlen(name_str)) @@ -388,7 +390,8 @@ static void print_icu_xml_locales(const struct config_t *p_config) else fprintf(config.outfile, "\n"); - if(U_FAILURE(status)) { + if(U_FAILURE(status)) + { fprintf(stderr, "ICU Error: %d %s\n", status, u_errorName(status)); exit(status); } @@ -435,13 +438,14 @@ static void process_text_file(const struct config_t *p_config) UErrorCode status = U_ZERO_ERROR; int success = 0; - if (! xml_node) { + if (! xml_node) + { printf("Could not parse XML config file '%s' \n", config.conffile); exit (1); } - config.chain = icu_chain_xml_config(xml_node, 0, &status); + config.chain = icu_chain_xml_config(xml_node, 1, &status); if (config.chain && U_SUCCESS(status)) success = 1; @@ -450,8 +454,6 @@ static void process_text_file(const struct config_t *p_config) config.conffile); exit (1); } - - if (p_config->xmloutput) fprintf(config.outfile, @@ -465,26 +467,37 @@ static void process_text_file(const struct config_t *p_config) success = icu_chain_assign_cstr(config.chain, line, &status); line_count++; - while (success && icu_chain_next_token(config.chain, &status)){ + while (success && icu_chain_next_token(config.chain, &status)) + { + WRBUF sw = wrbuf_alloc(); if (U_FAILURE(status)) success = 0; else { + const char *sortkey = icu_chain_token_sortkey(config.chain); + wrbuf_rewind(sw); + wrbuf_puts_escaped(sw, sortkey); token_count++; if (p_config->xmloutput) + { + /* should XML encode this. Bug #1902 */ fprintf(config.outfile, - "\n", + "\n", token_count, line_count, icu_chain_token_norm(config.chain), - icu_chain_token_display(config.chain)); + icu_chain_token_display(config.chain), + wrbuf_cstr(sw)); + } else - fprintf(config.outfile, "%lu %lu '%s' '%s'\n", + fprintf(config.outfile, "%lu %lu '%s' '%s' '%s'\n", token_count, line_count, icu_chain_token_norm(config.chain), - icu_chain_token_display(config.chain)); + icu_chain_token_display(config.chain), + wrbuf_cstr(sw)); } + wrbuf_destroy(sw); } }