16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2003-2012, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: gensprep.c 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created on: 2003-02-06 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created by: Ram Viswanadha 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* This program reads the Profile.txt files, 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* parses them, and extracts the data for StringPrep profile. 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* It then preprocesses it and writes a binary file for efficient use 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* in various StringPrep conversion processes. 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USPREP_TYPE_NAMES_ARRAY 1 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unewdata.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uoptions.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uparse.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "sprpimpl.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uclean.h" 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udata.h" 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/putil.h" 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "gensprep.h" 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool beVerbose=FALSE, haveCopyright=TRUE; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NORM_CORRECTIONS_FILE_NAME "NormalizationCorrections.txt" 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NORMALIZE_DIRECTIVE "normalize" 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NORMALIZE_DIRECTIVE_LEN 9 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BIDI_DIRECTIVE "check-bidi" 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BIDI_DIRECTIVE_LEN 10 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* prototypes --------------------------------------------------------------- */ 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseMappings(const char *filename, UBool reportError, UErrorCode *pErrorCode); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseNormalizationCorrections(const char *filename, UErrorCode *pErrorCode); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* -------------------------------------------------------------------------- */ 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UOption options[]={ 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_HELP_H, 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_HELP_QUESTION_MARK, 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_VERBOSE, 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_COPYRIGHT, 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_DESTDIR, 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_SOURCEDIR, 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_ICUDATADIR, 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UOPTION_BUNDLE_NAME, 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "normalization", NULL, NULL, NULL, 'n', UOPT_REQUIRES_ARG, 0 }, 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "norm-correction", NULL, NULL, NULL, 'm', UOPT_REQUIRES_ARG, 0 }, 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "check-bidi", NULL, NULL, NULL, 'k', UOPT_NO_ARG, 0}, 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "unicode", NULL, NULL, NULL, 'u', UOPT_REQUIRES_ARG, 0 }, 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum{ 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HELP, 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HELP_QUESTION_MARK, 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VERBOSE, 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org COPYRIGHT, 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DESTDIR, 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SOURCEDIR, 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ICUDATADIR, 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BUNDLE_NAME, 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NORMALIZE, 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NORM_CORRECTION_DIR, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BIDI, 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNICODE_VERSION 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int printHelp(int argc, char* argv[]){ 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Broken into chucks because the C89 standard says the minimum 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * required supported string length is 509 bytes. 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Usage: %s [-options] [file_name]\n" 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\n" 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Read the files specified and\n" 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "create a binary file [package-name]_[bundle-name]." DATA_TYPE " with the StringPrep profile data\n" 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\n", 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org argv[0]); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Options:\n" 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-h or -? or --help print this usage text\n" 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-v or --verbose verbose output\n" 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-c or --copyright include a copyright notice\n"); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-d or --destdir destination directory, followed by the path\n" 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-s or --sourcedir source directory of ICU data, followed by the path\n" 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-b or --bundle-name generate the ouput data file with the name specified\n" 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-i or --icudatadir directory for locating any needed intermediate data files,\n" 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t followed by path, defaults to %s\n", 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getDataDirectory()); 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-n or --normalize turn on the option for normalization and include mappings\n" 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t from NormalizationCorrections.txt from the given path,\n" 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t e.g: /test/icu/source/data/unidata\n"); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-m or --norm-correction use NormalizationCorrections.txt from the given path\n" 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t when the input file contains a normalization directive.\n" 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t unlike -n/--normalize, this option does not force the\n" 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t normalization.\n"); 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-k or --check-bidi turn on the option for checking for BiDi in the profile\n" 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\t-u or --unicode version of Unicode to be used with this profile followed by the version\n" 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern int 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmain(int argc, char* argv[]) { 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_IDNA 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char* filename = NULL; 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *srcDir=NULL, *destDir=NULL, *icuUniDataDir=NULL; 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *bundleName=NULL, *inputFileName = NULL; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *basename=NULL; 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t sprepOptions = 0; 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode=U_ZERO_ERROR; 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_MAIN_INIT_ARGS(argc, argv); 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preset then read command line options */ 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[DESTDIR].value=u_getDataDirectory(); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[SOURCEDIR].value=""; 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[UNICODE_VERSION].value="0"; /* don't assume the unicode version */ 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[BUNDLE_NAME].value = DATA_NAME; 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[NORMALIZE].value = ""; 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* error handling, printing usage message */ 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(argc<0) { 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "error in command line argument \"%s\"\n", 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org argv[-argc]); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(argc<0 || options[HELP].doesOccur || options[HELP_QUESTION_MARK].doesOccur) { 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return printHelp(argc, argv); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the options values */ 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org beVerbose=options[VERBOSE].doesOccur; 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org haveCopyright=options[COPYRIGHT].doesOccur; 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcDir=options[SOURCEDIR].value; 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destDir=options[DESTDIR].value; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bundleName = options[BUNDLE_NAME].value; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[NORMALIZE].doesOccur) { 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org icuUniDataDir = options[NORMALIZE].value; 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org icuUniDataDir = options[NORM_CORRECTION_DIR].value; 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(argc<2) { 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* print the help message */ 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return printHelp(argc, argv); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org inputFileName = argv[1]; 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!options[UNICODE_VERSION].doesOccur){ 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return printHelp(argc, argv); 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[ICUDATADIR].doesOccur) { 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_setDataDirectory(options[ICUDATADIR].value); 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_NO_IDNA 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "gensprep writes dummy " U_ICUDATA_NAME "_" DATA_NAME "." DATA_TYPE 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " because UCONFIG_NO_IDNA is set, \n" 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "see icu/source/common/unicode/uconfig.h\n"); 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org generateData(destDir, bundleName); 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setUnicodeVersion(options[UNICODE_VERSION].value); 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org filename = (char* ) uprv_malloc(uprv_strlen(srcDir) + 300); /* hopefully this should be enough */ 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* prepare the filename beginning with the source dir */ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uprv_strchr(srcDir,U_FILE_SEP_CHAR) == NULL && uprv_strchr(srcDir,U_FILE_ALT_SEP_CHAR) == NULL){ 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org filename[0] = '.'; 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org filename[1] = U_FILE_SEP_CHAR; 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strcpy(filename+2,srcDir); 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else{ 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strcpy(filename, srcDir); 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org basename=filename+uprv_strlen(filename); 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(basename>filename && *(basename-1)!=U_FILE_SEP_CHAR) { 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *basename++=U_FILE_SEP_CHAR; 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* initialize */ 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org init(); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* process the file */ 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strcpy(basename,inputFileName); 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseMappings(filename,FALSE, &errorCode); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "Could not open file %s for reading. Error: %s \n", filename, u_errorName(errorCode)); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return errorCode; 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[NORMALIZE].doesOccur){ /* this option might be set by @normalize;; in the source file */ 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* set up directory for NormalizationCorrections.txt */ 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strcpy(filename,icuUniDataDir); 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org basename=filename+uprv_strlen(filename); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(basename>filename && *(basename-1)!=U_FILE_SEP_CHAR) { 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *basename++=U_FILE_SEP_CHAR; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *basename++=U_FILE_SEP_CHAR; 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strcpy(basename,NORM_CORRECTIONS_FILE_NAME); 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseNormalizationCorrections(filename,&errorCode); 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)){ 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr,"Could not open file %s for reading \n", filename); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return errorCode; 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sprepOptions |= _SPREP_NORMALIZATION_ON; 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[CHECK_BIDI].doesOccur){ /* this option might be set by @check-bidi;; in the source file */ 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sprepOptions |= _SPREP_CHECK_BIDI_ON; 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setOptions(sprepOptions); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* process parsed data */ 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* write the data file */ 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org generateData(destDir, bundleName); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cleanUpData(); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_free(filename); 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_cleanup(); 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return errorCode; 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_IDNA 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void U_CALLCONV 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnormalizationCorrectionsLineFn(void *context, 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[][2], int32_t fieldCount, 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) { 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t mapping[40]; 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *end, *s; 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t code; 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo version; 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo thisVersion; 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the character code, field 0 */ 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org code=(uint32_t)uprv_strtoul(fields[0][0], &end, 16); 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep: error parsing NormalizationCorrections.txt mapping at %s\n", fields[0][0]); 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(*pErrorCode); 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Original (erroneous) decomposition */ 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s = fields[1][0]; 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* parse the mapping string */ 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_parseCodePoints(s, mapping, sizeof(mapping)/4, pErrorCode); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* ignore corrected decomposition */ 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_versionFromString(version,fields[3][0] ); 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_versionFromString(thisVersion, "3.2.0"); 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep error parsing NormalizationCorrections.txt of U+%04lx - %s\n", 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)code, u_errorName(*pErrorCode)); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(*pErrorCode); 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* store the mapping */ 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( version[0] > thisVersion[0] || 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((version[0]==thisVersion[0]) && (version[1] > thisVersion[1])) 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ){ 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org storeMapping(code,mapping, length, USPREP_MAP, pErrorCode); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setUnicodeVersionNC(version); 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseNormalizationCorrections(const char *filename, UErrorCode *pErrorCode) { 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[4][2]; 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseDelimitedFile(filename, ';', fields, 4, normalizationCorrectionsLineFn, NULL, pErrorCode); 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* fprintf(stdout,"Number of code points that have NormalizationCorrections mapping with length >1 : %i\n",len); */ 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode) && ( *pErrorCode!=U_FILE_ACCESS_ERROR)) { 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep error: u_parseDelimitedFile(\"%s\") failed - %s\n", filename, u_errorName(*pErrorCode)); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(*pErrorCode); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void U_CALLCONV 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstrprepProfileLineFn(void *context, 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[][2], int32_t fieldCount, 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) { 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t mapping[40]; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *end, *map; 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t code; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*UBool* mapWithNorm = (UBool*) context;*/ 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* typeName; 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t rangeStart=0,rangeEnd =0; 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* filename = (const char*) context; 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *s; 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s = u_skipWhitespace(fields[0][0]); 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*s == '@') { 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* special directive */ 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s++; 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length = fields[0][1] - s; 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (length >= NORMALIZE_DIRECTIVE_LEN 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && uprv_strncmp(s, NORMALIZE_DIRECTIVE, NORMALIZE_DIRECTIVE_LEN) == 0) { 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[NORMALIZE].doesOccur = TRUE; 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (length >= CHECK_BIDI_DIRECTIVE_LEN 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && uprv_strncmp(s, CHECK_BIDI_DIRECTIVE, CHECK_BIDI_DIRECTIVE_LEN) == 0) { 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org options[CHECK_BIDI].doesOccur = TRUE; 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep error parsing a directive %s.", fields[0][0]); 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org typeName = fields[2][0]; 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org map = fields[1][0]; 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uprv_strstr(typeName, usprepTypeNames[USPREP_UNASSIGNED])!=NULL){ 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseCodePointRange(s, &rangeStart,&rangeEnd, pErrorCode); 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)){ 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "Could not parse code point range. Error: %s\n",u_errorName(*pErrorCode)); 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* store the range */ 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org storeRange(rangeStart,rangeEnd,USPREP_UNASSIGNED, pErrorCode); 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else if(uprv_strstr(typeName, usprepTypeNames[USPREP_PROHIBITED])!=NULL){ 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseCodePointRange(s, &rangeStart,&rangeEnd, pErrorCode); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)){ 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "Could not parse code point range. Error: %s\n",u_errorName(*pErrorCode)); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* store the range */ 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org storeRange(rangeStart,rangeEnd,USPREP_PROHIBITED, pErrorCode); 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else if(uprv_strstr(typeName, usprepTypeNames[USPREP_MAP])!=NULL){ 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the character code, field 0 */ 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org code=(uint32_t)uprv_strtoul(s, &end, 16); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end<=s || end!=fields[0][1]) { 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep: syntax error in field 0 at %s\n", fields[0][0]); 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pErrorCode=U_PARSE_ERROR; 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(U_PARSE_ERROR); 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* parse the mapping string */ 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_parseCodePoints(map, mapping, sizeof(mapping)/4, pErrorCode); 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* store the mapping */ 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org storeMapping(code,mapping, length,USPREP_MAP, pErrorCode); 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else{ 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pErrorCode = U_INVALID_FORMAT_ERROR; 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep error parsing %s line %s at %s. Error: %s\n",filename, 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0][0],fields[2][0],u_errorName(*pErrorCode)); 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(*pErrorCode); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseMappings(const char *filename, UBool reportError, UErrorCode *pErrorCode) { 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[3][2]; 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseDelimitedFile(filename, ';', fields, 3, strprepProfileLineFn, (void*)filename, pErrorCode); 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*fprintf(stdout,"Number of code points that have mappings with length >1 : %i\n",len);*/ 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode) && (reportError || *pErrorCode!=U_FILE_ACCESS_ERROR)) { 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "gensprep error: u_parseDelimitedFile(\"%s\") failed - %s\n", filename, u_errorName(*pErrorCode)); 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(*pErrorCode); 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_IDNA */ 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Hey, Emacs, please set the following: 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Local Variables: 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * indent-tabs-mode: nil 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * End: 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 454