Index: source/tools/genrb/wrtjava.c |
diff --git a/source/tools/genrb/wrtjava.c b/source/tools/genrb/wrtjava.c |
deleted file mode 100644 |
index 6239569d85e8939ccd8c6fe7642220108051c5e2..0000000000000000000000000000000000000000 |
--- a/source/tools/genrb/wrtjava.c |
+++ /dev/null |
@@ -1,697 +0,0 @@ |
-/* |
-******************************************************************************* |
-* |
-* Copyright (C) 2000-2012, International Business Machines |
-* Corporation and others. All Rights Reserved. |
-* |
-******************************************************************************* |
-* |
-* File wrtjava.c |
-* |
-* Modification History: |
-* |
-* Date Name Description |
-* 01/11/02 Ram Creation. |
-* 02/12/08 Spieth Fix errant 'new Object[][]{' insertion |
-* 02/19/08 Spieth Removed ICUListResourceBundle dependancy |
-******************************************************************************* |
-*/ |
- |
-#include <assert.h> |
-#include "reslist.h" |
-#include "unewdata.h" |
-#include "unicode/ures.h" |
-#include "errmsg.h" |
-#include "filestrm.h" |
-#include "cstring.h" |
-#include "unicode/ucnv.h" |
-#include "genrb.h" |
-#include "rle.h" |
-#include "uhash.h" |
-#include "uresimp.h" |
-#include "unicode/ustring.h" |
- |
-void res_write_java(struct SResource *res,UErrorCode *status); |
- |
- |
-static const char copyRight[] = |
- "/* \n" |
- " *******************************************************************************\n" |
- " *\n" |
- " * Copyright (C) International Business Machines\n" |
- " * Corporation and others. All Rights Reserved.\n" |
- " *\n" |
- " *******************************************************************************\n" |
- " * $" "Source: $ \n" |
- " * $" "Date: $ \n" |
- " * $" "Revision: $ \n" |
- " *******************************************************************************\n" |
- " */\n\n"; |
-static const char warningMsg[] = |
- "/*********************************************************************\n" |
- "######################################################################\n" |
- "\n" |
- " WARNING: This file is generated by genrb Version " GENRB_VERSION ".\n" |
- " If you edit this file, please make sure that, the source\n" |
- " of this file (XXXX.txt in LocaleElements_XXXX.java)\n" |
- " is also edited.\n" |
- "######################################################################\n" |
- " *********************************************************************\n" |
- " */\n\n"; |
-static const char* openBrace="{\n"; |
-static const char* closeClass=" };\n" |
- "}\n"; |
- |
-static const char* javaClass = "import java.util.ListResourceBundle;\n\n" |
- "public class "; |
- |
-static const char* javaClass1= " extends ListResourceBundle {\n\n" |
- " /**\n" |
- " * Overrides ListResourceBundle \n" |
- " */\n" |
- " public final Object[][] getContents() { \n" |
- " return contents;\n" |
- " }\n\n" |
- " private static Object[][] contents = {\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 int tabCount = 3; |
- |
-static FileStream* out=NULL; |
-static struct SRBRoot* srBundle ; |
-/*static const char* outDir = NULL;*/ |
- |
-static const char* bName=NULL; |
-static const char* pName=NULL; |
- |
-static void write_tabs(FileStream* os){ |
- int i=0; |
- for(;i<=tabCount;i++){ |
- T_FileStream_write(os," ",4); |
- } |
-} |
- |
-#define ZERO 0x30 |
- |
-static const char* enc =""; |
-static UConverter* conv = NULL; |
- |
-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'}; |
- while(i<sourceLen){ |
- if (source[i] == '\n') { |
- if (j + 2 < targetLen) { |
- uprv_strcat(target, "\\n"); |
- } |
- j += 2; |
- }else if(source[i]==0x0D){ |
- if(j+2<targetLen){ |
- uprv_strcat(target,"\\f"); |
- } |
- j+=2; |
- }else if(source[i] == '"'){ |
- if(source[i-1]=='\''){ |
- if(j+2<targetLen){ |
- uprv_strcat(target,"\\"); |
- target[j+1]= (char)source[i]; |
- } |
- j+=2; |
- }else if(source[i-1]!='\\'){ |
- |
- if(j+2<targetLen){ |
- uprv_strcat(target,"\\"); |
- target[j+1]= (char)source[i]; |
- } |
- j+=2; |
- }else if(source[i-1]=='\\'){ |
- target[j++]= (char)source[i]; |
- } |
- }else if(source[i]=='\\'){ |
- if(i+1<sourceLen){ |
- switch(source[i+1]){ |
- case ',': |
- case '!': |
- case '?': |
- case '#': |
- case '.': |
- case '%': |
- case '&': |
- case ':': |
- case ';': |
- if(j+2<targetLen){ |
- uprv_strcat(target,"\\\\"); |
- } |
- j+=2; |
- break; |
- case '"': |
- case '\'': |
- if(j+3<targetLen){ |
- uprv_strcat(target,"\\\\\\"); |
- } |
- j+=3; |
- break; |
- default : |
- if(j<targetLen){ |
- target[j]=(char)source[i]; |
- } |
- j++; |
- break; |
- } |
- }else{ |
- if(j<targetLen){ |
- uprv_strcat(target,"\\\\"); |
- } |
- j+=2; |
- } |
- }else if(source[i]>=0x20 && source[i]<0x7F/*ASCII*/){ |
- if(j<targetLen){ |
- target[j] = (char) source[i]; |
- } |
- j++; |
- }else{ |
- if(*enc =='\0' || source[i]==0x0000){ |
- uprv_strcpy(str,"\\u"); |
- itostr(str+2,source[i],16,4); |
- if(j+6<targetLen){ |
- uprv_strcat(target,str); |
- } |
- j+=6; |
- }else{ |
- char dest[30] = {0}; |
- int retVal=ucnv_fromUChars(conv,dest,30,source+i,1,status); |
- if(U_FAILURE(*status)){ |
- return 0; |
- } |
- if(j+retVal<targetLen){ |
- uprv_strcat(target,dest); |
- } |
- j+=retVal; |
- } |
- } |
- i++; |
- } |
- return j; |
-} |
- |
- |
-static uint32_t |
-strrch(const char* source,uint32_t sourceLen,char find){ |
- const char* tSourceEnd =source + (sourceLen-1); |
- while(tSourceEnd>= source){ |
- if(*tSourceEnd==find){ |
- return (uint32_t)(tSourceEnd-source); |
- } |
- tSourceEnd--; |
- } |
- return (uint32_t)(tSourceEnd-source); |
-} |
- |
-static int32_t getColumnCount(int32_t len){ |
- int32_t columnCount = 80; |
- int32_t maxLines = 3000; |
- int32_t adjustedLen = len*5; /* assume that every codepoint is represented in \uXXXX format*/ |
- /* |
- * calculate the number of lines that |
- * may be required if column count is 80 |
- */ |
- if (maxLines < (adjustedLen / columnCount) ){ |
- columnCount = adjustedLen / maxLines; |
- } |
- return columnCount; |
-} |
-static void |
-str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *status){ |
- |
- uint32_t length = srcLen*8; |
- uint32_t bufLen = 0; |
- uint32_t columnCount; |
- char* buf = (char*) malloc(sizeof(char)*length); |
- |
- 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(U_FAILURE(*status)){ |
- uprv_free(buf); |
- return; |
- } |
- |
- if(bufLen+(tabCount*4) > columnCount ){ |
- uint32_t len = 0; |
- char* current = buf; |
- uint32_t add; |
- while(len < bufLen){ |
- add = columnCount-(tabCount*4)-5/* for ", +\n */; |
- current = buf +len; |
- if (add < (bufLen-len)) { |
- uint32_t idx = strrch(current,add,'\\'); |
- if (idx > add) { |
- idx = add; |
- } else { |
- int32_t num =idx-1; |
- uint32_t seqLen; |
- while(num>0){ |
- if(current[num]=='\\'){ |
- num--; |
- }else{ |
- break; |
- } |
- } |
- if ((idx-num)%2==0) { |
- idx--; |
- } |
- seqLen = (current[idx+1]=='u') ? 6 : 2; |
- if ((add-idx) < seqLen) { |
- add = idx + seqLen; |
- } |
- } |
- } |
- T_FileStream_write(out,"\"",1); |
- if(len+add<bufLen){ |
- T_FileStream_write(out,current,add); |
- T_FileStream_write(out,"\" +\n",4); |
- write_tabs(out); |
- }else{ |
- T_FileStream_write(out,current,bufLen-len); |
- } |
- len+=add; |
- } |
- }else{ |
- T_FileStream_write(out,"\"",1); |
- T_FileStream_write(out, buf,bufLen); |
- } |
- if(printEndLine){ |
- T_FileStream_write(out,"\",\n",3); |
- }else{ |
- T_FileStream_write(out,"\"",1); |
- } |
- uprv_free(buf); |
-} |
- |
-/* Writing Functions */ |
-static void |
-string_write_java(struct SResource *res,UErrorCode *status) { |
- char resKeyBuffer[8]; |
- const char *resname = res_getKeyString(srBundle, res, resKeyBuffer); |
- |
- 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 |
-array_write_java( struct SResource *res, UErrorCode *status) { |
- |
- uint32_t i = 0; |
- const char* arr ="new String[] { \n"; |
- struct SResource *current = NULL; |
- UBool allStrings = TRUE; |
- |
- if (U_FAILURE(*status)) { |
- return; |
- } |
- |
- if (res->u.fArray.fCount > 0) { |
- |
- current = res->u.fArray.fFirst; |
- i = 0; |
- while(current != NULL){ |
- if(current->fType!=URES_STRING){ |
- allStrings = FALSE; |
- break; |
- } |
- current= current->fNext; |
- } |
- |
- current = res->u.fArray.fFirst; |
- if(allStrings==FALSE){ |
- const char* object = "new Object[]{\n"; |
- write_tabs(out); |
- T_FileStream_write(out, object, (int32_t)uprv_strlen(object)); |
- tabCount++; |
- }else{ |
- write_tabs(out); |
- T_FileStream_write(out, arr, (int32_t)uprv_strlen(arr)); |
- tabCount++; |
- } |
- while (current != NULL) { |
- /*if(current->fType==URES_STRING){ |
- write_tabs(out); |
- }*/ |
- res_write_java(current, status); |
- if(U_FAILURE(*status)){ |
- return; |
- } |
- i++; |
- current = current->fNext; |
- } |
- T_FileStream_write(out,"\n",1); |
- |
- tabCount--; |
- write_tabs(out); |
- T_FileStream_write(out,"},\n",3); |
- |
- } else { |
- write_tabs(out); |
- T_FileStream_write(out,arr,(int32_t)uprv_strlen(arr)); |
- write_tabs(out); |
- T_FileStream_write(out,"},\n",3); |
- } |
-} |
- |
-static void |
-intvector_write_java( struct SResource *res, UErrorCode *status) { |
- uint32_t i = 0; |
- 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(resname != NULL && uprv_strcmp(resname,"DateTimeElements")==0){ |
- T_FileStream_write(out, stringArr, (int32_t)uprv_strlen(stringArr)); |
- tabCount++; |
- for(i = 0; i<res->u.fIntVector.fCount; i++) { |
- write_tabs(out); |
- len=itostr(buf,res->u.fIntVector.fArray[i],10,0); |
- T_FileStream_write(out,"\"",1); |
- T_FileStream_write(out,buf,len); |
- T_FileStream_write(out,"\",",2); |
- T_FileStream_write(out,"\n",1); |
- } |
- }else{ |
- T_FileStream_write(out, intArr, (int32_t)uprv_strlen(intArr)); |
- tabCount++; |
- for(i = 0; i<res->u.fIntVector.fCount; i++) { |
- write_tabs(out); |
- /* 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,",\n",2); |
- } |
- } |
- tabCount--; |
- write_tabs(out); |
- T_FileStream_write(out,"},\n",3); |
-} |
- |
-static void |
-int_write_java(struct SResource *res,UErrorCode *status) { |
- const char* intC = "new Integer("; |
- char buf[100]; |
- int len =0; |
- buf[0]=0; |
- |
- /* write the binary data */ |
- write_tabs(out); |
- T_FileStream_write(out, intC, (int32_t)uprv_strlen(intC)); |
- len=itostr(buf, res->u.fIntValue.fValue, 10, 0); |
- T_FileStream_write(out,buf,len); |
- T_FileStream_write(out,"),\n",3 ); |
- |
-} |
- |
-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; |
- |
- write_tabs(out); |
- T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); |
- T_FileStream_write(out, "\n", 1); |
- tabCount++; |
- |
- for (;byteIterator<srcLen;byteIterator++) |
- { |
- if (byteIterator%16 == 0) |
- { |
- write_tabs(out); |
- } |
- |
- if (byteArray[byteIterator] < 128) |
- { |
- sprintf(byteBuffer, byteDecl, byteArray[byteIterator]); |
- } |
- else |
- { |
- sprintf(byteBuffer, byteDecl, (byteArray[byteIterator]-256)); |
- } |
- |
- T_FileStream_write(out, byteBuffer, (int32_t)uprv_strlen(byteBuffer)); |
- |
- if (byteIterator%16 == 15) |
- { |
- T_FileStream_write(out, "\n", 1); |
- } |
- |
- } |
- |
- if (((byteIterator-1)%16) != 15) |
- { |
- T_FileStream_write(out, "\n", 1); |
- } |
- |
- tabCount--; |
- write_tabs(out); |
- T_FileStream_write(out, "},\n", 3); |
- |
- } |
- else |
- { |
- /* Empty array */ |
- write_tabs(out); |
- T_FileStream_write(out,type,(int32_t)uprv_strlen(type)); |
- T_FileStream_write(out,"},\n",3); |
- } |
- |
-} |
- |
-static UBool start = TRUE; |
- |
-static void |
-table_write_java(struct SResource *res, UErrorCode *status) { |
- uint32_t i = 0; |
- struct SResource *current = NULL; |
- const char* obj = "new Object[][]{\n"; |
- |
- if (U_FAILURE(*status)) { |
- return ; |
- } |
- |
- if (res->u.fTable.fCount > 0) { |
- if(start==FALSE){ |
- write_tabs(out); |
- T_FileStream_write(out, obj, (int32_t)uprv_strlen(obj)); |
- tabCount++; |
- } |
- start = FALSE; |
- 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++; |
- |
- 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, "\n", 1); |
- } |
- res_write_java(current, status); |
- if(U_FAILURE(*status)){ |
- return; |
- } |
- i++; |
- current = current->fNext; |
- tabCount--; |
- write_tabs(out); |
- T_FileStream_write(out, "},\n", 3); |
- } |
- if(tabCount>4){ |
- tabCount--; |
- write_tabs(out); |
- T_FileStream_write(out, "},\n", 3); |
- } |
- |
- } else { |
- write_tabs(out); |
- T_FileStream_write(out,obj,(int32_t)uprv_strlen(obj)); |
- |
- write_tabs(out); |
- T_FileStream_write(out,"},\n",3); |
- |
- } |
- |
-} |
- |
-void |
-res_write_java(struct SResource *res,UErrorCode *status) { |
- |
- if (U_FAILURE(*status)) { |
- return ; |
- } |
- |
- if (res != NULL) { |
- switch (res->fType) { |
- case URES_STRING: |
- string_write_java (res, status); |
- return; |
- case URES_ALIAS: |
- 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: |
- bytes_write_java (res, status); |
- return; |
- case URES_INT: |
- int_write_java (res, status); |
- return; |
- case URES_ARRAY: |
- array_write_java (res, status); |
- return; |
- case URES_TABLE: |
- table_write_java (res, status); |
- return; |
- default: |
- break; |
- } |
- } |
- |
- *status = U_INTERNAL_PROGRAM_ERROR; |
-} |
- |
-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;*/ |
- /*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){ |
- uprv_strcat(className,"_"); |
- uprv_strcat(className,srBundle->fLocale); |
- } |
- if(outputDir){ |
- uprv_strcpy(fileName, outputDir); |
- if(outputDir[uprv_strlen(outputDir)-1] !=U_FILE_SEP_CHAR){ |
- uprv_strcat(fileName,U_FILE_SEP_STRING); |
- } |
- uprv_strcat(fileName,className); |
- uprv_strcat(fileName,".java"); |
- }else{ |
- uprv_strcat(fileName,className); |
- uprv_strcat(fileName,".java"); |
- } |
- |
- if (writtenFilename) { |
- uprv_strncpy(writtenFilename, fileName, writtenFilenameLen); |
- } |
- |
- if (U_FAILURE(*status)) { |
- return; |
- } |
- |
- out= T_FileStream_open(fileName,"w"); |
- |
- if(out==NULL){ |
- *status = U_FILE_ACCESS_ERROR; |
- return; |
- } |
- if(getIncludeCopyright()){ |
- T_FileStream_write(out, copyRight, (int32_t)uprv_strlen(copyRight)); |
- T_FileStream_write(out, warningMsg, (int32_t)uprv_strlen(warningMsg)); |
- } |
- T_FileStream_write(out,"package ",(int32_t)uprv_strlen("package ")); |
- T_FileStream_write(out,pName,(int32_t)uprv_strlen(pName)); |
- 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)); |
- 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 */ |
- enc = outputEnc; |
- conv=ucnv_open(enc,status); |
- if(U_FAILURE(*status)){ |
- return; |
- } |
- } |
- res_write_java(bundle->fRoot, status); |
- |
- T_FileStream_write(out, closeClass, (int32_t)uprv_strlen(closeClass)); |
- |
- T_FileStream_close(out); |
- |
- ucnv_close(conv); |
-} |