1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru* Copyright (C) 2003-2009, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: testidn.cpp 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: 2003-02-06 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Ram Viswanadha 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* This program reads the rfc3454_*.txt files, 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* parses them, and extracts the data for Nameprep conformance. 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* It then preprocesses it and writes a binary file for efficient use 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* in various IDNA conversion processes. 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_IDNA && !UCONFIG_NO_TRANSLITERATION 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define USPREP_TYPE_NAMES_ARRAY 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udata.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unewdata.h" 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uoptions.h" 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uparse.h" 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "utrie.h" 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "umutex.h" 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "sprpimpl.h" 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "testidna.h" 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "punyref.h" 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool beVerbose=FALSE, haveCopyright=TRUE; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* prototypes --------------------------------------------------------------- */ 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruparseMappings(const char *filename, UBool reportError,TestIDNA& test, UErrorCode *pErrorCode); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerucompareMapping(uint32_t codepoint, uint32_t* mapping, int32_t mapLength, 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType option); 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerucompareFlagsForRange(uint32_t start, uint32_t end,UStringPrepType option); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerutestAllCodepoints(TestIDNA& test); 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic TestIDNA* pTestIDNA =NULL; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* fileNames[] = { 64b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "rfc3491.txt" 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UTrie *idnTrie = NULL; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t *indexes = NULL; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const uint16_t *mappingData = NULL; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* -------------------------------------------------------------------------- */ 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* file definitions */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define DATA_TYPE "icu" 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define SPREP_DIR "sprep" 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruextern int 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerutestData(TestIDNA& test) { 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *basename=NULL; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode=U_ZERO_ERROR; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *saveBasename =NULL; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUStringPrepProfilePointer profile(usprep_openByType(USPREP_RFC3491_NAMEPREP, &errorCode)); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)){ 846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru test.errcheckln(errorCode, "Failed to load IDNA data file. " + UnicodeString(u_errorName(errorCode))); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return errorCode; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* filename = (char*) malloc(strlen(IntlTest::pathToDataDirectory())*1024); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //TODO get the srcDir dynamically 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *srcDir=IntlTest::pathToDataDirectory(); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru idnTrie = &profile->sprepTrie; 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru indexes = profile->indexes; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mappingData = profile->mappingData; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //initialize 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA = &test; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* prepare the filename beginning with the source dir */ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strchr(srcDir,U_FILE_SEP_CHAR) == NULL){ 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru filename[0] = 0x2E; 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru filename[1] = U_FILE_SEP_CHAR; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(filename+2,srcDir); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(filename, srcDir); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru basename=filename+uprv_strlen(filename); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(basename>filename && *(basename-1)!=U_FILE_SEP_CHAR) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *basename++=U_FILE_SEP_CHAR; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* process unassigned */ 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru basename=filename+uprv_strlen(filename); 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(basename>filename && *(basename-1)!=U_FILE_SEP_CHAR) { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *basename++=U_FILE_SEP_CHAR; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* first copy misc directory */ 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru saveBasename = basename; 120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uprv_strcpy(basename,SPREP_DIR); 121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru basename = basename + uprv_strlen(SPREP_DIR); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *basename++=U_FILE_SEP_CHAR; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* process unassigned */ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_strcpy(basename,fileNames[0]); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseMappings(filename,TRUE, test,&errorCode); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.errln( "Could not open file %s for reading \n", filename); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return errorCode; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAllCodepoints(test); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA = NULL; 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(filename); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return errorCode; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void U_CALLCONV 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerustrprepProfileLineFn(void * /*context*/, 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *fields[][2], int32_t fieldCount, 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode *pErrorCode) { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t mapping[40]; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *end, *map; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t code; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*UBool* mapWithNorm = (UBool*) context;*/ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* typeName; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t rangeStart=0,rangeEnd =0; 151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *s; 152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru s = u_skipWhitespace(fields[0][0]); 154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (*s == '@') { 155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* a special directive introduced in 4.2 */ 156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fieldCount != 3){ 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pErrorCode = U_INVALID_FORMAT_ERROR; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru typeName = fields[2][0]; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru map = fields[1][0]; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(uprv_strstr(typeName, usprepTypeNames[USPREP_UNASSIGNED])!=NULL){ 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_parseCodePointRange(s, &rangeStart,&rangeEnd, pErrorCode); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* store the range */ 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru compareFlagsForRange(rangeStart,rangeEnd,USPREP_UNASSIGNED); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if(uprv_strstr(typeName, usprepTypeNames[USPREP_PROHIBITED])!=NULL){ 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_parseCodePointRange(s, &rangeStart,&rangeEnd, pErrorCode); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* store the range */ 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru compareFlagsForRange(rangeStart,rangeEnd,USPREP_PROHIBITED); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if(uprv_strstr(typeName, usprepTypeNames[USPREP_MAP])!=NULL){ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* get the character code, field 0 */ 183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru code=(uint32_t)uprv_strtoul(s, &end, 16); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* parse the mapping string */ 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_parseCodePoints(map, mapping, sizeof(mapping)/4, pErrorCode); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* store the mapping */ 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru compareMapping(code,mapping, length,USPREP_MAP); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pErrorCode = U_INVALID_FORMAT_ERROR; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruparseMappings(const char *filename,UBool reportError, TestIDNA& test, UErrorCode *pErrorCode) { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *fields[3][2]; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_parseDelimitedFile(filename, ';', fields, 3, strprepProfileLineFn, (void*)filename, pErrorCode); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //fprintf(stdout,"Number of code points that have mappings with length >1 : %i\n",len); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(*pErrorCode) && (reportError || *pErrorCode!=U_FILE_ACCESS_ERROR)) { 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.errln( "testidn error: u_parseDelimitedFile(\"%s\") failed - %s\n", filename, u_errorName(*pErrorCode)); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic inline UStringPrepType 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerugetValues(uint32_t result, int32_t& value, UBool& isIndex){ 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType type; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result == 0){ 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Initial value stored in the mapping table 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * just return USPREP_TYPE_LIMIT .. so that 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the source codepoint is copied to the destination 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = USPREP_TYPE_LIMIT; 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isIndex =FALSE; 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = 0; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if(result >= _SPREP_TYPE_THRESHOLD){ 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = (UStringPrepType) (result - _SPREP_TYPE_THRESHOLD); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isIndex =FALSE; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = 0; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* get the state */ 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = USPREP_MAP; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* ascertain if the value is index or delta */ 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result & 0x02){ 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isIndex = TRUE; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = result >> 2; //mask off the lower 2 bits and shift 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isIndex = FALSE; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = (int16_t)result; 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = (value >> 2); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((result>>2) == _SPREP_MAX_INDEX_VALUE){ 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = USPREP_DELETE; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isIndex =FALSE; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value = 0; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return type; 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerutestAllCodepoints(TestIDNA& test){ 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar str[19] = { 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774, 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x070F,//prohibited 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t in[19] = {0}; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t inLength=0, outLength=100; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char output[100] = {0}; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru punycode_status error; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strToUTF32((UChar32*)in,19,&inLength,str,19,&status); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error= punycode_encode(inLength, in, NULL, (uint32_t*)&outLength, output); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru printf(output); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t i = 0; 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t unassigned = 0; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t prohibited = 0; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mappedWithNorm = 0; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mapped = 0; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t noValueInTrie = 0; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType type; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value; 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isIndex = FALSE; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<=0x10FFFF;i++){ 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t result = 0; 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UTRIE_GET16(idnTrie,i, result); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru type = getValues(result,value, isIndex); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type != USPREP_TYPE_LIMIT ){ 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type == USPREP_UNASSIGNED){ 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unassigned++; 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type == USPREP_PROHIBITED){ 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru prohibited++; 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type == USPREP_MAP){ 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mapped++; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru noValueInTrie++; 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result > 0){ 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.errln("The return value for 0x%06X is wrong. %i\n",i,result); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.logln("Number of Unassinged code points : %i \n",unassigned); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.logln("Number of Prohibited code points : %i \n",prohibited); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.logln("Number of Mapped code points : %i \n",mapped); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.logln("Number of Mapped with NFKC code points : %i \n",mappedWithNorm); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test.logln("Number of code points that have no value in Trie: %i \n",noValueInTrie); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerucompareMapping(uint32_t codepoint, uint32_t* mapping,int32_t mapLength, 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType type){ 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t result = 0; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UTRIE_GET16(idnTrie,codepoint, result); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length=0; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isIndex; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType retType; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value, index=0, delta=0; 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retType = getValues(result,value,isIndex); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type != retType && retType != USPREP_DELETE){ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln( "Did not get the assigned type for codepoint 0x%08X. Expected: %i Got: %i\n",codepoint, USPREP_MAP, type); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isIndex){ 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index = value; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(index >= indexes[_SPREP_ONE_UCHAR_MAPPING_INDEX_START] && 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index < indexes[_SPREP_TWO_UCHARS_MAPPING_INDEX_START]){ 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = 1; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if(index >= indexes[_SPREP_TWO_UCHARS_MAPPING_INDEX_START] && 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index < indexes[_SPREP_THREE_UCHARS_MAPPING_INDEX_START]){ 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = 2; 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else if(index >= indexes[_SPREP_THREE_UCHARS_MAPPING_INDEX_START] && 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index < indexes[_SPREP_FOUR_UCHARS_MAPPING_INDEX_START]){ 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = 3; 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = mappingData[index++]; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delta = value; 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = (retType == USPREP_DELETE)? 0 : 1; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t realLength =0; 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* figure out the real length */ 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t j=0; j<mapLength; j++){ 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(mapping[j] > 0xFFFF){ 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru realLength +=2; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru realLength++; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(realLength != length){ 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln( "Did not get the expected length. Expected: %i Got: %i\n", mapLength, length); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isIndex){ 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int8_t i =0; i< mapLength; i++){ 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(mapping[i] <= 0xFFFF){ 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(mappingData[index+i] != (uint16_t)mapping[i]){ 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln("Did not get the expected result. Expected: 0x%04X Got: 0x%04X \n", mapping[i], mappingData[index+i]); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar lead = UTF16_LEAD(mapping[i]); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar trail = UTF16_TRAIL(mapping[i]); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(mappingData[index+i] != lead || 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mappingData[index+i+1] != trail){ 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln( "Did not get the expected result. Expected: 0x%04X 0x%04X Got: 0x%04X 0x%04X", lead, trail, mappingData[index+i], mappingData[index+i+1]); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(retType!=USPREP_DELETE && (codepoint-delta) != (uint16_t)mapping[0]){ 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln("Did not get the expected result. Expected: 0x%04X Got: 0x%04X \n", mapping[0],(codepoint-delta)); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QuerucompareFlagsForRange(uint32_t start, uint32_t end, 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType type){ 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t result =0 ; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringPrepType retType; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isIndex=FALSE; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value=0; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // supplementary code point 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar __lead16=UTF16_LEAD(0x2323E); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t __offset; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // get data for lead surrogate 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (result)=_UTRIE_GET_RAW((&idnTrie), index, 0, (__lead16)); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru __offset=(&idnTrie)->getFoldingOffset(result); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // get the real data from the folded lead/trail units 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(__offset>0) { 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (result)=_UTRIE_GET_RAW((&idnTrie), index, __offset, (0x2323E)&0x3ff); 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (result)=(uint32_t)((&idnTrie)->initialValue); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UTRIE_GET16(&idnTrie,0x2323E, result); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while(start < end+1){ 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UTRIE_GET16(idnTrie,start, result); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retType = getValues(result,value,isIndex); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result > _SPREP_TYPE_THRESHOLD){ 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(retType != type){ 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln( "FAIL: Did not get the expected type for 0x%06X. Expected: %s Got: %s\n",start,usprepTypeNames[type], usprepTypeNames[retType]); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(type == USPREP_PROHIBITED && ((result & 0x01) != 0x01)){ 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pTestIDNA->errln( "FAIL: Did not get the expected type for 0x%06X. Expected: %s Got: %s\n",start,usprepTypeNames[type], usprepTypeNames[retType]); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru start++; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_IDNA */ 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Hey, Emacs, please set the following: 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Local Variables: 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indent-tabs-mode: nil 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * End: 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 455