X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b75a7d8f3b4adbae880cab104ce2c6a50eee4db2..ba6d6ed23dec08b1cd5700a128c0752491c10ac9:/icuSources/tools/genrb/wrtjava.c?ds=inline diff --git a/icuSources/tools/genrb/wrtjava.c b/icuSources/tools/genrb/wrtjava.c index 8ec3709a..ff6f63b0 100644 --- a/icuSources/tools/genrb/wrtjava.c +++ b/icuSources/tools/genrb/wrtjava.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2012, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -11,7 +11,9 @@ * Modification History: * * Date Name Description -* 01/11/02 Ram Creation. +* 01/11/02 Ram Creation. +* 02/12/08 Spieth Fix errant 'new Object[][]{' insertion +* 02/19/08 Spieth Removed ICUListResourceBundle dependancy ******************************************************************************* */ @@ -25,7 +27,6 @@ #include "unicode/ucnv.h" #include "genrb.h" #include "rle.h" -#include "ucol_tok.h" #include "uhash.h" #include "uresimp.h" #include "unicode/ustring.h" @@ -33,7 +34,7 @@ void res_write_java(struct SResource *res,UErrorCode *status); -static const char copyRight[] = +static const char copyRight[] = "/* \n" " *******************************************************************************\n" " *\n" @@ -46,7 +47,7 @@ static const char copyRight[] = " * $" "Revision: $ \n" " *******************************************************************************\n" " */\n\n"; -static const char warningMsg[] = +static const char warningMsg[] = "/*********************************************************************\n" "######################################################################\n" "\n" @@ -61,23 +62,22 @@ static const char* openBrace="{\n"; static const char* closeClass=" };\n" "}\n"; -static const char* javaClass = "import java.util.ListResourceBundle;\n" - "import com.ibm.icu.impl.ICUListResourceBundle;\n\n" +static const char* javaClass = "import java.util.ListResourceBundle;\n\n" "public class "; - -static const char* javaClass1= " extends ICUListResourceBundle {\n\n" + +static const char* javaClass1= " extends ListResourceBundle {\n\n" " /**\n" " * Overrides ListResourceBundle \n" " */\n" " public final Object[][] getContents() { \n" " return contents;\n" - " }\n" + " }\n\n" " private static Object[][] contents = {\n"; -static const char* javaClassICU= " extends ICUListResourceBundle {\n\n" +/*static const char* javaClassICU= " extends ListResourceBundle {\n\n" " public %s () {\n" " super.contents = data;\n" " }\n" - " static final Object[][] data = new Object[][] { \n"; + " static final Object[][] data = new Object[][] { \n";*/ static int tabCount = 3; static FileStream* out=NULL; @@ -93,10 +93,13 @@ static void write_tabs(FileStream* os){ T_FileStream_write(os," ",4); } } + +#define ZERO 0x30 + static const char* enc =""; static UConverter* conv = NULL; -static int32_t +static int32_t uCharsToChars( char* target,int32_t targetLen, UChar* source, int32_t sourceLen,UErrorCode* status){ int i=0, j=0; char str[30]={'\0'}; @@ -119,7 +122,7 @@ uCharsToChars( char* target,int32_t targetLen, UChar* source, int32_t sourceLen, } j+=2; }else if(source[i-1]!='\\'){ - + if(j+2= source){ @@ -226,26 +229,27 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s uint32_t length = srcLen*8; uint32_t bufLen = 0; + uint32_t columnCount; char* buf = (char*) malloc(sizeof(char)*length); - - uint32_t columnCount = getColumnCount(srcLen); - /* test for NULL */ if(buf == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return; } - + + columnCount = getColumnCount(srcLen); memset(buf,0,length); - + bufLen = uCharsToChars(buf,length,src,srcLen,status); - if(printEndLine) write_tabs(out); + if(printEndLine) + write_tabs(out); if(U_FAILURE(*status)){ + uprv_free(buf); return; } - + if(bufLen+(tabCount*4) > columnCount ){ uint32_t len = 0; char* current = buf; @@ -254,11 +258,11 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s add = columnCount-(tabCount*4)-5/* for ", +\n */; current = buf +len; if (add < (bufLen-len)) { - uint32_t index = strrch(current,add,'\\'); - if (index > add) { - index = add; + uint32_t idx = strrch(current,add,'\\'); + if (idx > add) { + idx = add; } else { - int32_t num =index-1; + int32_t num =idx-1; uint32_t seqLen; while(num>0){ if(current[num]=='\\'){ @@ -267,12 +271,12 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s break; } } - if ((index-num)%2==0) { - index--; + if ((idx-num)%2==0) { + idx--; } - seqLen = (current[index+1]=='u') ? 6 : 2; - if ((add-index) < seqLen) { - add = index + seqLen; + seqLen = (current[idx+1]=='u') ? 6 : 2; + if ((add-idx) < seqLen) { + add = idx + seqLen; } } } @@ -295,96 +299,32 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s }else{ T_FileStream_write(out,"\"",1); } + uprv_free(buf); } /* Writing Functions */ -static void -string_write_java(struct SResource *res,UErrorCode *status) { - if(uprv_strcmp(srBundle->fKeys+res->fKey,"%%UCARULES")==0 ){ - char fileName[1024] ={0}; - const char* file = "UCARules.utf8"; - FileStream* datFile = NULL; - const char* type = "new ICUListResourceBundle.ResourceString("; - char* dest = (char*) uprv_malloc( 8 * res->u.fString.fLength); - int32_t len = 0; - if(outDir){ - uprv_strcat(fileName,outDir); - if(outDir[uprv_strlen(outDir)-1]!=U_FILE_SEP_CHAR){ - uprv_strcat(fileName,U_FILE_SEP_STRING); - } - } - uprv_strcat(fileName,file);/* UCARULES.utf8 UTF-8 file */ - - write_tabs(out); - - T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); - T_FileStream_write(out, "\"", 1); - T_FileStream_write(out, file, (int32_t)uprv_strlen(file)); - T_FileStream_write(out, "\")\n", 3); - datFile=T_FileStream_open(fileName,"w"); - - if(!dest){ - *status=U_MEMORY_ALLOCATION_ERROR; - } - - u_strToUTF8(dest,8*res->u.fString.fLength,&len,res->u.fString.fChars,res->u.fString.fLength,status); - if(U_FAILURE(*status)){ - T_FileStream_close(datFile); - uprv_free(dest); - return; - } - T_FileStream_write(datFile,dest,len); - T_FileStream_close(datFile); - uprv_free(dest); - - }else{ - str_write_java(res->u.fString.fChars,res->u.fString.fLength,TRUE,status); +static void +string_write_java(struct SResource *res,UErrorCode *status) { + char resKeyBuffer[8]; + const char *resname = res_getKeyString(srBundle, res, resKeyBuffer); - if(uprv_strcmp(srBundle->fKeys+res->fKey,"Rule")==0){ - UChar* buf = (UChar*) uprv_malloc(sizeof(UChar)*res->u.fString.fLength); - uprv_memcpy(buf,res->u.fString.fChars,res->u.fString.fLength); - uprv_free(buf); - } + str_write_java(res->u.fString.fChars,res->u.fString.fLength,TRUE,status); + + if(resname != NULL && uprv_strcmp(resname,"Rule")==0) + { + UChar* buf = (UChar*) uprv_malloc(sizeof(UChar)*res->u.fString.fLength); + uprv_memcpy(buf,res->u.fString.fChars,res->u.fString.fLength); + uprv_free(buf); } } -static void -alias_write_java(struct SResource *res,UErrorCode *status) { - static const char str[] = "new ICUListResourceBundle.Alias("; - write_tabs(out); - T_FileStream_write(out,str,uprv_strlen(str)); - - /*str_write_java(res->u.fString.fChars,res->u.fString.fLength,FALSE,status);*/ - /*if(*res->u.fString.fChars == RES_PATH_SEPARATOR) {*/ - /* there is a path included - locale = u_strchr(res->u.fString.fChars +1, RES_PATH_SEPARATOR); - *locale = 0; - locale++; - - T_FileStream_write(out,"\"/",2); - T_FileStream_write(out,apName,(int32_t)uprv_strlen(apName)); - T_FileStream_write(out,"/",1); - T_FileStream_write(out,abName,(int32_t)uprv_strlen(abName)); - T_FileStream_write(out,"/\"+",3); - str_write_java(locale,res->u.fString.fLength-(locale-res->u.fString.fChars),FALSE,status); - } else { - str_write_java(res->u.fString.fChars,res->u.fString.fLength,FALSE,status); - }*/ - - str_write_java(res->u.fString.fChars,res->u.fString.fLength,FALSE,status); - - T_FileStream_write(out,"),\n",3); -} - -static void +static void array_write_java( struct SResource *res, UErrorCode *status) { uint32_t i = 0; const char* arr ="new String[] { \n"; struct SResource *current = NULL; - struct SResource *first =NULL; - UBool decrementTabs = FALSE; UBool allStrings = TRUE; if (U_FAILURE(*status)) { @@ -409,13 +349,11 @@ array_write_java( struct SResource *res, UErrorCode *status) { write_tabs(out); T_FileStream_write(out, object, (int32_t)uprv_strlen(object)); tabCount++; - decrementTabs = TRUE; }else{ write_tabs(out); T_FileStream_write(out, arr, (int32_t)uprv_strlen(arr)); tabCount++; } - first=current; while (current != NULL) { /*if(current->fType==URES_STRING){ write_tabs(out); @@ -435,24 +373,26 @@ array_write_java( struct SResource *res, UErrorCode *status) { } else { write_tabs(out); - T_FileStream_write(out,arr,uprv_strlen(arr)); + T_FileStream_write(out,arr,(int32_t)uprv_strlen(arr)); write_tabs(out); T_FileStream_write(out,"},\n",3); } } -static void +static void intvector_write_java( struct SResource *res, UErrorCode *status) { uint32_t i = 0; - const char* intArr = "new Integer[] {\n"; - const char* intC = "new Integer("; - const char* stringArr = "new String[]{\n"; + const char* intArr = "new int[] {\n"; + /* const char* intC = "new Integer("; */ + const char* stringArr = "new String[]{\n"; + char resKeyBuffer[8]; + const char *resname = res_getKeyString(srBundle, res, resKeyBuffer); char buf[100]; int len =0; buf[0]=0; write_tabs(out); - if(uprv_strcmp(srBundle->fKeys+res->fKey,"DateTimeElements")==0){ + if(resname != NULL && uprv_strcmp(resname,"DateTimeElements")==0){ T_FileStream_write(out, stringArr, (int32_t)uprv_strlen(stringArr)); tabCount++; for(i = 0; iu.fIntVector.fCount; i++) { @@ -468,11 +408,12 @@ intvector_write_java( struct SResource *res, UErrorCode *status) { tabCount++; for(i = 0; iu.fIntVector.fCount; i++) { write_tabs(out); - T_FileStream_write(out, intC, (int32_t)uprv_strlen(intC)); + /* T_FileStream_write(out, intC, (int32_t)uprv_strlen(intC)); */ len=itostr(buf,res->u.fIntVector.fArray[i],10,0); T_FileStream_write(out,buf,len); - T_FileStream_write(out,"),",2); - T_FileStream_write(out,"\n",1); + /* T_FileStream_write(out,"),",2); */ + /* T_FileStream_write(out,"\n",1); */ + T_FileStream_write(out,",\n",2); } } tabCount--; @@ -480,7 +421,7 @@ intvector_write_java( struct SResource *res, UErrorCode *status) { T_FileStream_write(out,"},\n",3); } -static void +static void int_write_java(struct SResource *res,UErrorCode *status) { const char* intC = "new Integer("; char buf[100]; @@ -496,138 +437,82 @@ int_write_java(struct SResource *res,UErrorCode *status) { } -static void -bin_write_java( struct SResource *res, UErrorCode *status) { - const char* type = "new ICUListResourceBundle.CompressedBinary("; - const char* ext; +static void +bytes_write_java( struct SResource *res, UErrorCode *status) { + const char* type = "new byte[] {"; + const char* byteDecl = "%i, "; + char byteBuffer[100] = { 0 }; + uint8_t* byteArray = NULL; + int byteIterator = 0; + int32_t srcLen=res->u.fBinaryValue.fLength; + + if(srcLen>0 ) + { + byteArray = res->u.fBinaryValue.fData; - if(srcLen>0 ){ - uint16_t* target=NULL; - uint16_t* saveTarget = NULL; - int32_t tgtLen = 0; - - if(uprv_strcmp(srBundle->fKeys+res->fKey,"%%CollationBin")==0 || uprv_strcmp(srBundle->fKeys+res->fKey,"BreakDictionaryData")==0){ - char fileName[1024] ={0}; - char fn[1024] = {0}; - FileStream* datFile = NULL; - if(uprv_strcmp(srBundle->fKeys+res->fKey,"BreakDictionaryData")==0){ - uprv_strcat(fileName,"BreakDictionaryData"); - ext = ".brk"; - }else{ - uprv_strcat(fileName,"CollationElements"); - ext=".col"; - } - if(uprv_strcmp(srBundle->fLocale,"root")!=0){ - uprv_strcat(fileName,"_"); - uprv_strcat(fileName,srBundle->fLocale); - } - - uprv_strcat(fileName,ext); - if(outDir ){ - uprv_strcat(fn,outDir); - if(outDir[uprv_strlen(outDir)-1]!=U_FILE_SEP_CHAR){ - uprv_strcat(fn,U_FILE_SEP_STRING); - } - } - uprv_strcat(fn,fileName); - type = "new ICUListResourceBundle.ResourceBinary("; - write_tabs(out); - T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); - T_FileStream_write(out, "\"", 1); - T_FileStream_write(out, fileName, (int32_t)uprv_strlen(fileName)); - T_FileStream_write(out, "\"),\n", 4); - - datFile=T_FileStream_open(fn,"w"); - T_FileStream_write(datFile, res->u.fBinaryValue.fData, res->u.fBinaryValue.fLength); - T_FileStream_close(datFile); - - }else{ - - srcLen = res->u.fBinaryValue.fLength; - tgtLen = srcLen * 2; - target = (uint16_t*)malloc(sizeof(uint16_t) * tgtLen); - saveTarget = target; - if(target){ - tgtLen = byteArrayToRLEString(res->u.fBinaryValue.fData, - srcLen,target, tgtLen,status); - if(U_FAILURE(*status)){ - printf("Could not encode got error : %s \n", u_errorName(*status)); - return; - } -#if DEBUG - /***************** Test Roundtripping *********************/ - { - int32_t myTargetLen = rleStringToByteArray(target,tgtLen,NULL,0,status); - uint8_t* myTarget = (uint8_t*) malloc(sizeof(uint8_t) * myTargetLen); - - /* test for NULL */ - if(myTarget == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } - - int i=0; - int32_t retVal=0; - - *status = U_ZERO_ERROR; - retVal=rleStringToByteArray(target,tgtLen,myTarget,myTargetLen,status); - if(U_SUCCESS(*status)){ - - for(i=0; i< srcLen;i++){ - if(res->u.fBinaryValue.fData[i]!= myTarget[i]){ - printf("the encoded string cannot be decoded Expected : 0x%02X Got : %: 0x%02X at %i\n",res->u.fBinaryValue.fData[i],myTarget[i], i); - } - } - }else{ - printf("Could not decode got error : %s \n", u_errorName(*status)); - } - free(myTarget); - - } -#endif - - }else{ - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } + write_tabs(out); + T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); + T_FileStream_write(out, "\n", 1); + tabCount++; - write_tabs(out); - T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); + for (;byteIteratoru.fTable.fCount > 0) { if(start==FALSE){ write_tabs(out); @@ -635,29 +520,31 @@ table_write_java(struct SResource *res, UErrorCode *status) { tabCount++; } start = FALSE; - save = current = res->u.fTable.fFirst; + current = res->u.fTable.fFirst; i = 0; while (current != NULL) { + char currentKeyBuffer[8]; + const char *currentKeyString = res_getKeyString(srBundle, current, currentKeyBuffer); + assert(i < res->u.fTable.fCount); write_tabs(out); - + T_FileStream_write(out, openBrace, 2); tabCount++; - allStrings=FALSE; write_tabs(out); + if(currentKeyString != NULL) { + T_FileStream_write(out, "\"", 1); + T_FileStream_write(out, currentKeyString, + (int32_t)uprv_strlen(currentKeyString)); + T_FileStream_write(out, "\",\n", 2); - T_FileStream_write(out, "\"", 1); - T_FileStream_write(out, srBundle->fKeys+current->fKey, - (int32_t)uprv_strlen(srBundle->fKeys+current->fKey)); - T_FileStream_write(out, "\",\n", 2); - - T_FileStream_write(out, "\n", 1); - + T_FileStream_write(out, "\n", 1); + } res_write_java(current, status); if(U_FAILURE(*status)){ return; @@ -676,7 +563,7 @@ table_write_java(struct SResource *res, UErrorCode *status) { } else { write_tabs(out); - T_FileStream_write(out,obj,uprv_strlen(obj)); + T_FileStream_write(out,obj,(int32_t)uprv_strlen(obj)); write_tabs(out); T_FileStream_write(out,"},\n",3); @@ -685,9 +572,9 @@ table_write_java(struct SResource *res, UErrorCode *status) { } -void +void res_write_java(struct SResource *res,UErrorCode *status) { - + if (U_FAILURE(*status)) { return ; } @@ -698,13 +585,14 @@ res_write_java(struct SResource *res,UErrorCode *status) { string_write_java (res, status); return; case URES_ALIAS: - alias_write_java (res, status); - return; + printf("Encountered unsupported resource type %d of alias\n", res->fType); + *status = U_UNSUPPORTED_ERROR; + return; case URES_INT_VECTOR: intvector_write_java (res, status); return; case URES_BINARY: - bin_write_java (res, status); + bytes_write_java (res, status); return; case URES_INT: int_write_java (res, status); @@ -715,7 +603,6 @@ res_write_java(struct SResource *res,UErrorCode *status) { case URES_TABLE: table_write_java (res, status); return; - default: break; } @@ -724,21 +611,23 @@ res_write_java(struct SResource *res,UErrorCode *status) { *status = U_INTERNAL_PROGRAM_ERROR; } -void -bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, - char *writtenFilename, int writtenFilenameLen, +void +bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, + char *writtenFilename, int writtenFilenameLen, const char* packageName, const char* bundleName, UErrorCode *status) { char fileName[256] = {'\0'}; char className[256]={'\0'}; - char constructor[1000] = { 0 }; - UBool j1 =FALSE; + /*char constructor[1000] = { 0 };*/ + /*UBool j1 =FALSE;*/ outDir = outputDir; + start = TRUE; /* Reset the start indictor*/ + bName = (bundleName==NULL) ? "LocaleElements" : bundleName; pName = (packageName==NULL)? "com.ibm.icu.impl.data" : packageName; - + uprv_strcpy(className, bName); srBundle = bundle; if(uprv_strcmp(srBundle->fLocale,"root")!=0){ @@ -764,7 +653,7 @@ bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outp if (U_FAILURE(*status)) { return; } - + out= T_FileStream_open(fileName,"w"); if(out==NULL){ @@ -780,12 +669,15 @@ bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outp T_FileStream_write(out,";\n\n",3); T_FileStream_write(out, javaClass, (int32_t)uprv_strlen(javaClass)); T_FileStream_write(out, className, (int32_t)uprv_strlen(className)); - if(j1){ - T_FileStream_write(out, javaClass1, (int32_t)uprv_strlen(javaClass1)); - }else{ - sprintf(constructor,javaClassICU,className); - T_FileStream_write(out, constructor, (int32_t)uprv_strlen(constructor)); - } + T_FileStream_write(out, javaClass1, (int32_t)uprv_strlen(javaClass1)); + + /* if(j1){ + T_FileStream_write(out, javaClass1, (int32_t)uprv_strlen(javaClass1)); + }else{ + sprintf(constructor,javaClassICU,className); + T_FileStream_write(out, constructor, (int32_t)uprv_strlen(constructor)); + } + */ if(outputEnc && *outputEnc!='\0'){ /* store the output encoding */