X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/374ca955a76ecab1204ca8bfa63ff9238d998416..a01113dcd0f39d5da295ef82785beff9ed86fe38:/icuSources/tools/genbrk/genbrk.cpp diff --git a/icuSources/tools/genbrk/genbrk.cpp b/icuSources/tools/genbrk/genbrk.cpp index 2ca7a4df..0a4ec3c9 100644 --- a/icuSources/tools/genbrk/genbrk.cpp +++ b/icuSources/tools/genbrk/genbrk.cpp @@ -1,6 +1,8 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -37,12 +39,14 @@ #include "uoptions.h" #include "unewdata.h" #include "ucmndata.h" +#include "rbbidata.h" +#include "cmemory.h" #include #include #include -#define DATA_TYPE "brk" +U_NAMESPACE_USE static char *progName; static UOption options[]={ @@ -54,6 +58,7 @@ static UOption options[]={ UOPTION_ICUDATADIR, /* 5 */ UOPTION_DESTDIR, /* 6 */ UOPTION_COPYRIGHT, /* 7 */ + UOPTION_QUIET, /* 8 */ }; void usageAndDie(int retCode) { @@ -64,6 +69,7 @@ void usageAndDie(int retCode) { "\t-V or --version show a version message\n" "\t-c or --copyright include a copyright notice\n" "\t-v or --verbose turn on verbose output\n" + "\t-q or --quiet do not display warnings and progress\n" "\t-i or --icudatadir directory for locating any needed intermediate data files,\n" "\t followed by path, defaults to %s\n" "\t-d or --destdir destination directory, followed by the path\n", @@ -72,7 +78,7 @@ void usageAndDie(int retCode) { } -#if UCONFIG_NO_BREAK_ITERATION +#if UCONFIG_NO_BREAK_ITERATION || UCONFIG_NO_FILE_IO /* dummy UDataInfo cf. udata.h */ static UDataInfo dummyDataInfo = { @@ -108,8 +114,10 @@ DataHeader dh ={ 0, // reserved { 0x42, 0x72, 0x6b, 0x20 }, // dataFormat="Brk " - { 3, 0, 0, 0 }, // formatVersion - { 4, 0, 0, 0 } // dataVersion (Unicode version) + { 0xff, 0, 0, 0 }, // formatVersion. Filled in later with values + // from the RBBI rule builder. The values declared + // here should never appear in any real RBBI data. + { 4, 1, 0, 0 } // dataVersion (Unicode version) }}; #endif @@ -132,7 +140,7 @@ int main(int argc, char **argv) { // U_MAIN_INIT_ARGS(argc, argv); progName = argv[0]; - argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); + argc=u_parseArgs(argc, argv, UPRV_LENGTHOF(options), options); if(argc<0) { // Unrecognized option fprintf(stderr, "error in command line argument \"%s\"\n", argv[-argc]); @@ -155,13 +163,6 @@ int main(int argc, char **argv) { u_setDataDirectory(options[5].value); } - /* Initialize ICU */ - u_init(&status); - if (U_FAILURE(status)) { - fprintf(stderr, "%s: can not initialize ICU. status = %s\n", - argv[0], u_errorName(status)); - exit(1); - } status = U_ZERO_ERROR; /* Combine the directory with the file name */ @@ -172,43 +173,30 @@ int main(int argc, char **argv) { copyright = U_COPYRIGHT_STRING; } -#if UCONFIG_NO_BREAK_ITERATION +#if UCONFIG_NO_BREAK_ITERATION || UCONFIG_NO_FILE_IO UNewDataMemory *pData; - char msg[2048], folder[2048], name[32]; - char *basename; - int length; - - /* split the outFileName into folder + name + type */ - strcpy(folder, outFileName); - basename = strrchr(folder, U_FILE_SEP_CHAR); - if(basename == NULL) { - basename = folder; - } else { - ++basename; - } - - /* copy the data name and remove it from the folder */ - strcpy(name, basename); - *basename = 0; + char msg[1024]; /* write message with just the name */ - sprintf(msg, "genbrk writes dummy %s because of UCONFIG_NO_BREAK_ITERATION, see uconfig.h", name); + sprintf(msg, "genbrk writes dummy %s because of UCONFIG_NO_BREAK_ITERATION and/or UCONFIG_NO_FILE_IO, see uconfig.h", outFileName); fprintf(stderr, "%s\n", msg); - /* remove the type suffix (hardcode to DATA_TYPE) */ - length = strlen(name); - if(length > 4 && name[length - 4] == '.') { - name[length - 4] = 0; - } - /* write the dummy data file */ - pData = udata_create(folder, DATA_TYPE, name, &dummyDataInfo, NULL, &status); + pData = udata_create(outDir, NULL, outFileName, &dummyDataInfo, NULL, &status); udata_writeBlock(pData, msg, strlen(msg)); udata_finish(pData, &status); return (int)status; #else + /* Initialize ICU */ + u_init(&status); + if (U_FAILURE(status)) { + fprintf(stderr, "%s: can not initialize ICU. status = %s\n", + argv[0], u_errorName(status)); + exit(1); + } + status = U_ZERO_ERROR; // // Read in the rule source file @@ -318,6 +306,8 @@ int main(int argc, char **argv) { const uint8_t *outData; outData = bi->getBinaryRules(outDataSize); + // Copy the data format version numbers from the RBBI data header into the UDataMemory header. + uprv_memcpy(dh.info.formatVersion, ((RBBIDataHeader *)outData)->fFormatVersion, sizeof(dh.info.formatVersion)); // // Create the output file @@ -330,6 +320,8 @@ int main(int argc, char **argv) { outFileName, u_errorName(status)); exit(status); } + + // Write the data itself. udata_writeBlock(pData, outData, outDataSize); // finish up @@ -350,7 +342,9 @@ int main(int argc, char **argv) { u_cleanup(); - printf("genbrk: tool completed successfully.\n"); + if(!options[8].doesOccur) { + printf("genbrk: tool completed successfully.\n"); + } return 0; #endif /* #if !UCONFIG_NO_BREAK_ITERATION */