1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 459d709d503bab6e2b61931737e662dd293b40578ccornelius* Copyright (C) 1999-2013, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: derb.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2000sep6 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Vladimir Weinstein as an ICU workshop example 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* maintained by: Yves Arrouye <yves@realnames.com> 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucnv.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 2159d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/ustdio.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uresimp.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uoptions.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "toolutil.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ustrfmt.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3059d709d503bab6e2b61931737e662dd293b40578ccornelius#if !UCONFIG_NO_FORMATTING 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3259d709d503bab6e2b61931737e662dd293b40578ccornelius#define DERB_VERSION "1.1" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DERB_DEFAULT_TRUNC 80 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t indentsize = 4; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t truncsize = DERB_DEFAULT_TRUNC; 388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic UBool opt_truncate = FALSE; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *getEncodingName(const char *encoding); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void reportError(const char *pname, UErrorCode *status, const char *when); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar *quotedString(const UChar *string); 4359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printOutBundle(UFILE *out, UConverter *converter, UResourceBundle *resource, int32_t indent, const char *pname, UErrorCode *status); 4459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printString(UFILE *out, UConverter *converter, const UChar *str, int32_t len); 4559d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printCString(UFILE *out, UConverter *converter, const char *str, int32_t len); 4659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printIndent(UFILE *out, UConverter *converter, int32_t indent); 4759d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printHex(UFILE *out, UConverter *converter, uint8_t what); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UOption options[]={ 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UOPTION_HELP_H, 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UOPTION_HELP_QUESTION_MARK, 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2 */ UOPTION_ENCODING, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 3 */ { "to-stdout", NULL, NULL, NULL, 'c', UOPT_NO_ARG, 0 } , 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 4 */ { "truncate", NULL, NULL, NULL, 't', UOPT_OPTIONAL_ARG, 0 }, 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 5 */ UOPTION_VERBOSE, 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 6 */ UOPTION_DESTDIR, 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 7 */ UOPTION_SOURCEDIR, 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 8 */ { "bom", NULL, NULL, NULL, 0, UOPT_NO_ARG, 0 }, 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 9 */ UOPTION_ICUDATADIR, 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 10 */ UOPTION_VERSION, 6159d709d503bab6e2b61931737e662dd293b40578ccornelius/* 11 */ { "suppressAliases", NULL, NULL, NULL, 'A', UOPT_NO_ARG, 0 }, 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool verbose = FALSE; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool suppressAliases = FALSE; 6659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic UFILE *ustderr = NULL; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruextern int 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querumain(int argc, char* argv[]) { 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *encoding = NULL; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *outputDir = NULL; /* NULL = no output directory, use current */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *inputDir = "."; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int tostdout = 0; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int prbom = 0; 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *pname; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *bundle = NULL; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8259d709d503bab6e2b61931737e662dd293b40578ccornelius UConverter *converter = NULL; // not used 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* arg; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Get the name of tool. */ 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pname = uprv_strrchr(*argv, U_FILE_SEP_CHAR); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!pname) { 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pname = uprv_strrchr(*argv, U_FILE_ALT_SEP_CHAR); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!pname) { 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pname = *argv; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++pname; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* error handling, printing usage message */ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* error handling, printing usage message */ 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(argc<0) { 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "%s: error in command line argument \"%s\"\n", pname, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru argv[-argc]); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(argc<0 || options[0].doesOccur || options[1].doesOccur) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(argc < 0 ? stderr : stdout, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "%csage: %s [ -h, -?, --help ] [ -V, --version ]\n" 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " [ -v, --verbose ] [ -e, --encoding encoding ] [ --bom ]\n" 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " [ -t, --truncate [ size ] ]\n" 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " [ -s, --sourcedir source ] [ -d, --destdir destination ]\n" 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " [ -i, --icudatadir directory ] [ -c, --to-stdout ]\n" 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " [ -A, --suppressAliases]\n" 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " bundle ...\n", argc < 0 ? 'u' : 'U', 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pname); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[10].doesOccur) { 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(stderr, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "%s version %s (ICU version %s).\n" 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "%s\n", 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pname, DERB_VERSION, U_ICU_VERSION, U_COPYRIGHT_STRING); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return U_ZERO_ERROR; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[2].doesOccur) { 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru encoding = options[2].value; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (options[3].doesOccur) { 13359d709d503bab6e2b61931737e662dd293b40578ccornelius if(options[2].doesOccur) { 13459d709d503bab6e2b61931737e662dd293b40578ccornelius fprintf(stderr, "%s: Error: don't specify an encoding (-e) when writing to stdout (-c).\n", pname); 13559d709d503bab6e2b61931737e662dd293b40578ccornelius return 3; 13659d709d503bab6e2b61931737e662dd293b40578ccornelius } 13759d709d503bab6e2b61931737e662dd293b40578ccornelius tostdout = 1; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[4].doesOccur) { 1418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius opt_truncate = TRUE; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[4].value != NULL) { 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru truncsize = atoi(options[4].value); /* user defined printable size */ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru truncsize = DERB_DEFAULT_TRUNC; /* we'll use default omitting size */ 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius opt_truncate = FALSE; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[5].doesOccur) { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verbose = TRUE; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (options[6].doesOccur) { 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru outputDir = options[6].value; 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options[7].doesOccur) { 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inputDir = options[7].value; /* we'll use users resources */ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (options[8].doesOccur) { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru prbom = 1; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (options[9].doesOccur) { 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_setDataDirectory(options[9].value); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (options[11].doesOccur) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru suppressAliases = TRUE; 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17559d709d503bab6e2b61931737e662dd293b40578ccornelius fflush(stderr); // use ustderr now. 17659d709d503bab6e2b61931737e662dd293b40578ccornelius ustderr = u_finit(stderr, NULL, NULL); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 1; i < argc; ++i) { 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar sp[] = { 0x0020 }; /* " " */ 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char infile[4096]; /* XXX Sloppy. */ 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char locale[64]; 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *thename = 0, *p, *q; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fromICUData = FALSE; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru arg = getLongPathname(argv[i]); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (verbose) { 18859d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(ustderr, "processing bundle \"%s\"\n", argv[i]); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p = uprv_strrchr(arg, U_FILE_SEP_CHAR); 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (p == NULL) { 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!p) { 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p = arg; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p++; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru q = uprv_strrchr(p, '.'); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!q) { 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (q = p; *q; ++q) 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strncpy(locale, p, q - p); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale[q - p] = 0; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(fromICUData = !uprv_strcmp(inputDir, "-"))) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool absfilename = *arg == U_FILE_SEP_CHAR; 212103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_HAS_WIN32_API 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!absfilename) { 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru absfilename = (uprv_strlen(arg) > 2 && isalpha(arg[0]) 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru && arg[1] == ':' && arg[2] == U_FILE_SEP_CHAR); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (absfilename) { 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thename = arg; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru q = uprv_strrchr(arg, U_FILE_SEP_CHAR); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (q == NULL) { 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru q = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(infile, inputDir); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(q != NULL) { 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcat(infile, U_FILE_SEP_STRING); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strncat(infile, arg, q-arg); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru thename = infile; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (thename) { 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bundle = ures_openDirect(thename, locale, &status); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bundle = ures_open(fromICUData ? 0 : inputDir, locale, &status); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status == U_ZERO_ERROR) { 24259d709d503bab6e2b61931737e662dd293b40578ccornelius UFILE *out = NULL; 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *filename = 0; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *ext = 0; 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24727f654740f2a26ad62a5c155af9199af9e69b889claireho if (!locale[0] || !tostdout) { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru filename = uprv_strrchr(arg, U_FILE_SEP_CHAR); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!filename) { 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru filename = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!filename) { 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru filename = arg; 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++filename; 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ext = uprv_strrchr(arg, '.'); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ext) { 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ext = filename + uprv_strlen(filename); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tostdout) { 26759d709d503bab6e2b61931737e662dd293b40578ccornelius out = u_get_stdout(); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char thefile[4096], *tp; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (outputDir) { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(thefile, outputDir); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcat(thefile, U_FILE_SEP_STRING); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *thefile = 0; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcat(thefile, filename); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tp = thefile + uprv_strlen(thefile); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = (int32_t)uprv_strlen(ext); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (len) { 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tp -= len - 1; 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *tp++ = '.'; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(tp, "txt"); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28859d709d503bab6e2b61931737e662dd293b40578ccornelius out = u_fopen(thefile, "w", NULL, encoding); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!out) { 29059d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(ustderr, "%s: couldn't create %s\n", pname, thefile); 29159d709d503bab6e2b61931737e662dd293b40578ccornelius u_fclose(ustderr); 29259d709d503bab6e2b61931737e662dd293b40578ccornelius return 4; 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29659d709d503bab6e2b61931737e662dd293b40578ccornelius // now, set the callback. 29759d709d503bab6e2b61931737e662dd293b40578ccornelius ucnv_setFromUCallBack(u_fgetConverter(out), UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_C, 0, 0, &status); 29859d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 29959d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(ustderr, "%s: couldn't configure converter for encoding\n", pname); 30059d709d503bab6e2b61931737e662dd293b40578ccornelius u_fclose(ustderr); 30159d709d503bab6e2b61931737e662dd293b40578ccornelius if(!tostdout) { 30259d709d503bab6e2b61931737e662dd293b40578ccornelius u_fclose(out); 30359d709d503bab6e2b61931737e662dd293b40578ccornelius } 30459d709d503bab6e2b61931737e662dd293b40578ccornelius return 3; 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30759d709d503bab6e2b61931737e662dd293b40578ccornelius if (prbom) { /* XXX: Should be done only for UTFs */ 30859d709d503bab6e2b61931737e662dd293b40578ccornelius u_fputc(0xFEFF, out); 30959d709d503bab6e2b61931737e662dd293b40578ccornelius } 31059d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "// -*- Coding: %s; -*-\n//\n", encoding ? encoding : getEncodingName(ucnv_getDefaultName())); 31159d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "// This file was dumped by derb(8) from "); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (thename) { 31359d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "%s", thename); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (fromICUData) { 31559d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "the ICU internal %s locale", locale); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31859d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "\n// derb(8) by Vladimir Weinstein and Yves Arrouye\n\n"); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32027f654740f2a26ad62a5c155af9199af9e69b889claireho if (locale[0]) { 32159d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "%s", locale); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 32359d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "%.*s%.*S", (int32_t)(ext - filename), filename, (int32_t)(sizeof(sp)/sizeof(*sp)), sp); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printOutBundle(out, converter, bundle, 0, pname, &status); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32759d709d503bab6e2b61931737e662dd293b40578ccornelius if (!tostdout) { 32859d709d503bab6e2b61931737e662dd293b40578ccornelius u_fclose(out); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, &status, "opening resource file"); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(bundle); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucnv_close(converter); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar *quotedString(const UChar *string) { 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int len = u_strlen(string); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int alen = len; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *sp; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *newstr, *np; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (sp = string; *sp; ++sp) { 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (*sp) { 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case '\n': 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0x0022: 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++alen; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newstr = (UChar *) uprv_malloc((1 + alen) * sizeof(*newstr)); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (sp = string, np = newstr; *sp; ++sp) { 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (*sp) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case '\n': 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *np++ = 0x005C; 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *np++ = 0x006E; 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0x0022: 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *np++ = 0x005C; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *np++ = *sp; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *np = 0; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return newstr; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38059d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printString(UFILE *out, UConverter *converter, const UChar *str, int32_t len) { 38159d709d503bab6e2b61931737e662dd293b40578ccornelius u_file_write(str, len, out); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printCString(UFILE *out, UConverter *converter, const char *str, int32_t len) { 38559d709d503bab6e2b61931737e662dd293b40578ccornelius if(len==-1) { 38659d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "%s", str); 38759d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 38859d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(out, "%.*s", len, str); 38959d709d503bab6e2b61931737e662dd293b40578ccornelius } 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39259d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printIndent(UFILE *out, UConverter *converter, int32_t indent) { 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar inchar[256]; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<indent; i++) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inchar[i] = 0x0020; 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inchar[indent] = 0; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, inchar, indent); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printHex(UFILE *out, UConverter *converter, uint8_t what) { 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char map[] = "0123456789ABCDEF"; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar hex[2]; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hex[0] = map[what >> 4]; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hex[1] = map[what & 0xf]; 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, hex, (int32_t)(sizeof(hex)/sizeof(*hex))); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printOutAlias(UFILE *out, UConverter *converter, UResourceBundle *parent, Resource r, const char *key, int32_t indent, const char *pname, UErrorCode *status) { 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar cr[] = { '\n' }; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = 0; 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UChar* thestr = res_getAlias(&(parent->fResData), r, &len); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *string = quotedString(thestr); 4188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(opt_truncate && len > truncsize) { 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char msg[128]; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n", 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (long)len, (long)truncsize/2); 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, msg, -1); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = truncsize; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(*status)) { 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x003A, 0x0061, 0x006C, 0x0069, 0x0061, 0x0073, 0x0020, 0x007B, 0x0020, 0x0022 }; /* ":alias { \"" */ 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0022, 0x0020, 0x007D, 0x0020 }; /* "\" } " */ 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, -1); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, string, len); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, " // ALIAS", -1); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, status, "getting binary value"); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(string); 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void printOutBundle(UFILE *out, UConverter *converter, UResourceBundle *resource, int32_t indent, const char *pname, UErrorCode *status) 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar cr[] = { '\n' }; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* int32_t noOfElements = ures_getSize(resource);*/ 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *key = ures_getKey(resource); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(ures_getType(resource)) { 45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_STRING : 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len=0; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar* thestr = ures_getString(resource, &len, status); 459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar *string = quotedString(thestr); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: String truncation */ 4628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(opt_truncate && len > truncsize) { 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char msg[128]; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n", 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (long)len, (long)(truncsize/2)); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, msg, -1); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = truncsize/2; 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x0020, 0x007B, 0x0020, 0x0022 }; /* " { \"" */ 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0022, 0x0020, 0x007D }; /* "\" }" */ 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, (int32_t)uprv_strlen(key)); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr)/sizeof(*openStr))); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, string, len); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x0022 }; /* "\"" */ 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0022, 0x002C }; /* "\"," */ 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, string, (int32_t)(u_strlen(string))); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, "// STRING", -1); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_free(string); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_INT : 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x003A, 0x0069, 0x006E, 0x0074, 0x0020, 0x007B, 0x0020 }; /* ":int { " */ 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0020, 0x007D }; /* " }" */ 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar num[20]; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, -1); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_itou(num, 20, ures_getInt(resource, status), 10, 0); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, num, u_strlen(num)); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, "// INT", -1); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 51750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_BINARY : 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = 0; 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const int8_t *data = (const int8_t *)ures_getBinary(resource, &len, status); 5218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(opt_truncate && len > truncsize) { 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char msg[128]; 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(msg, "// WARNING: this resource, size %li is truncated to %li\n", 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (long)len, (long)(truncsize/2)); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, msg, -1); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = truncsize; 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(*status)) { 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x003A, 0x0062, 0x0069, 0x006E, 0x0061, 0x0072, 0x0079, 0x0020, 0x007B, 0x0020 }; /* ":binary { " */ 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0020, 0x007D, 0x0020 }; /* " } " */ 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, -1); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<len; i++) { 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printHex(out, converter, *data++); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, " // BINARY", -1); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, status, "getting binary value"); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 55050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_INT_VECTOR : 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = 0; 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const int32_t *data = ures_getIntVector(resource, &len, status); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(*status)) { 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x003A, 0x0069, 0x006E, 0x0074, 0x0076, 0x0065, 0x0063, 0x0074, 0x006F, 0x0072, 0x0020, 0x007B, 0x0020 }; /* ":intvector { " */ 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x0020, 0x007D, 0x0020 }; /* " } " */ 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar num[20]; 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, -1); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < len - 1; i++) { 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numLen = uprv_itou(num, 20, data[i], 10, 0); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru num[numLen++] = 0x002C; /* ',' */ 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru num[numLen++] = 0x0020; /* ' ' */ 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru num[numLen] = 0; 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, num, u_strlen(num)); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(len > 0) { 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_itou(num, 20, data[len - 1], 10, 0); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, num, u_strlen(num)); 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, "// INTVECTOR", -1); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, status, "getting int vector"); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_TABLE : 58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case URES_ARRAY : 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar openStr[] = { 0x007B }; /* "{" */ 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar closeStr[] = { 0x007D, '\n' }; /* "}\n" */ 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UResourceBundle *t = NULL; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_resetIterator(resource); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(key != NULL) { 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, key, -1); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, openStr, (int32_t)(sizeof(openStr) / sizeof(*openStr))); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(verbose) { 59950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(ures_getType(resource) == URES_TABLE) { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, "// TABLE", -1); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printCString(out, converter, "// ARRAY", -1); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, cr, (int32_t)(sizeof(cr) / sizeof(*cr))); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(suppressAliases == FALSE) { 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while(U_SUCCESS(*status) && ures_hasNext(resource)) { 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t = ures_getNextResource(resource, t, status); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(*status)) { 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printOutBundle(out, converter, t, indent+indentsize, pname, status); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, status, "While processing table"); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *status = U_ZERO_ERROR; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { /* we have to use low level access to do this */ 61850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Resource r; 61950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t resSize = ures_getSize(resource); 62050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool isTable = (UBool)(ures_getType(resource) == URES_TABLE); 62150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for(i = 0; i < resSize; i++) { 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* need to know if it's an alias */ 62350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(isTable) { 62450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho r = res_getTableItemByIndex(&resource->fResData, resource->fRes, i, &key); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 62650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho r = res_getArrayItem(&resource->fResData, resource->fRes, i); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(*status)) { 62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(res_getPublicType(r) == URES_ALIAS) { 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printOutAlias(out, converter, resource, r, key, indent+indentsize, pname, status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t = ures_getByIndex(resource, i, t, status); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printOutBundle(out, converter, t, indent+indentsize, pname, status); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru reportError(pname, status, "While processing table"); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *status = U_ZERO_ERROR; 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printIndent(out, converter, indent); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printString(out, converter, closeStr, (int32_t)(sizeof(closeStr) / sizeof(*closeStr))); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ures_close(t); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *getEncodingName(const char *encoding) { 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode err; 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *enc; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_ZERO_ERROR; 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(enc = ucnv_getStandardName(encoding, "MIME", &err))) { 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err = U_ZERO_ERROR; 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(enc = ucnv_getStandardName(encoding, "IANA", &err))) { 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return enc; 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void reportError(const char *pname, UErrorCode *status, const char *when) { 66959d709d503bab6e2b61931737e662dd293b40578ccornelius u_fprintf(ustderr, "%s: error %d while %s: %s\n", pname, *status, when, u_errorName(*status)); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67259d709d503bab6e2b61931737e662dd293b40578ccornelius#else 67359d709d503bab6e2b61931737e662dd293b40578ccorneliusextern int 67459d709d503bab6e2b61931737e662dd293b40578ccorneliusmain(int argc, char* argv[]) { 67559d709d503bab6e2b61931737e662dd293b40578ccornelius /* Changing stdio.h ustdio.h requires that formatting not be disabled. */ 67659d709d503bab6e2b61931737e662dd293b40578ccornelius return 3; 67759d709d503bab6e2b61931737e662dd293b40578ccornelius} 67859d709d503bab6e2b61931737e662dd293b40578ccornelius#endif /* !UCONFIG_NO_FORMATTING */ 67959d709d503bab6e2b61931737e662dd293b40578ccornelius 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Local Variables: 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indent-tabs-mode: nil 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * End: 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 685