OLD | NEW |
| (Empty) |
1 /* | |
2 ******************************************************************************* | |
3 * | |
4 * Copyright (C) 2000-2012, International Business Machines | |
5 * Corporation and others. All Rights Reserved. | |
6 * | |
7 ******************************************************************************* | |
8 * | |
9 * File wrtjava.c | |
10 * | |
11 * Modification History: | |
12 * | |
13 * Date Name Description | |
14 * 01/11/02 Ram Creation. | |
15 * 02/12/08 Spieth Fix errant 'new Object[][]{' insertion | |
16 * 02/19/08 Spieth Removed ICUListResourceBundle dependancy | |
17 ******************************************************************************* | |
18 */ | |
19 | |
20 #include <assert.h> | |
21 #include "reslist.h" | |
22 #include "unewdata.h" | |
23 #include "unicode/ures.h" | |
24 #include "errmsg.h" | |
25 #include "filestrm.h" | |
26 #include "cstring.h" | |
27 #include "unicode/ucnv.h" | |
28 #include "genrb.h" | |
29 #include "rle.h" | |
30 #include "uhash.h" | |
31 #include "uresimp.h" | |
32 #include "unicode/ustring.h" | |
33 | |
34 void res_write_java(struct SResource *res,UErrorCode *status); | |
35 | |
36 | |
37 static const char copyRight[] = | |
38 "/* \n" | |
39 " **************************************************************************
*****\n" | |
40 " *\n" | |
41 " * Copyright (C) International Business Machines\n" | |
42 " * Corporation and others. All Rights Reserved.\n" | |
43 " *\n" | |
44 " **************************************************************************
*****\n" | |
45 " * $" "Source: $ \n" | |
46 " * $" "Date: $ \n" | |
47 " * $" "Revision: $ \n" | |
48 " **************************************************************************
*****\n" | |
49 " */\n\n"; | |
50 static const char warningMsg[] = | |
51 "/*********************************************************************\n" | |
52 "######################################################################\n" | |
53 "\n" | |
54 " WARNING: This file is generated by genrb Version " GENRB_VERSION ".\n" | |
55 " If you edit this file, please make sure that, the source\n" | |
56 " of this file (XXXX.txt in LocaleElements_XXXX.java)\n" | |
57 " is also edited.\n" | |
58 "######################################################################\n" | |
59 " *********************************************************************\n" | |
60 " */\n\n"; | |
61 static const char* openBrace="{\n"; | |
62 static const char* closeClass=" };\n" | |
63 "}\n"; | |
64 | |
65 static const char* javaClass = "import java.util.ListResourceBundle;\n\n" | |
66 "public class "; | |
67 | |
68 static const char* javaClass1= " extends ListResourceBundle {\n\n" | |
69 " /**\n" | |
70 " * Overrides ListResourceBundle \n" | |
71 " */\n" | |
72 " public final Object[][] getContents() { \n" | |
73 " return contents;\n" | |
74 " }\n\n" | |
75 " private static Object[][] contents = {\n"; | |
76 /*static const char* javaClassICU= " extends ListResourceBundle {\n\n" | |
77 " public %s () {\n" | |
78 " super.contents = data;\n" | |
79 " }\n" | |
80 " static final Object[][] data = new Object[
][] { \n";*/ | |
81 static int tabCount = 3; | |
82 | |
83 static FileStream* out=NULL; | |
84 static struct SRBRoot* srBundle ; | |
85 /*static const char* outDir = NULL;*/ | |
86 | |
87 static const char* bName=NULL; | |
88 static const char* pName=NULL; | |
89 | |
90 static void write_tabs(FileStream* os){ | |
91 int i=0; | |
92 for(;i<=tabCount;i++){ | |
93 T_FileStream_write(os," ",4); | |
94 } | |
95 } | |
96 | |
97 #define ZERO 0x30 | |
98 | |
99 static const char* enc =""; | |
100 static UConverter* conv = NULL; | |
101 | |
102 static int32_t | |
103 uCharsToChars( char* target,int32_t targetLen, UChar* source, int32_t sourceLen,
UErrorCode* status){ | |
104 int i=0, j=0; | |
105 char str[30]={'\0'}; | |
106 while(i<sourceLen){ | |
107 if (source[i] == '\n') { | |
108 if (j + 2 < targetLen) { | |
109 uprv_strcat(target, "\\n"); | |
110 } | |
111 j += 2; | |
112 }else if(source[i]==0x0D){ | |
113 if(j+2<targetLen){ | |
114 uprv_strcat(target,"\\f"); | |
115 } | |
116 j+=2; | |
117 }else if(source[i] == '"'){ | |
118 if(source[i-1]=='\''){ | |
119 if(j+2<targetLen){ | |
120 uprv_strcat(target,"\\"); | |
121 target[j+1]= (char)source[i]; | |
122 } | |
123 j+=2; | |
124 }else if(source[i-1]!='\\'){ | |
125 | |
126 if(j+2<targetLen){ | |
127 uprv_strcat(target,"\\"); | |
128 target[j+1]= (char)source[i]; | |
129 } | |
130 j+=2; | |
131 }else if(source[i-1]=='\\'){ | |
132 target[j++]= (char)source[i]; | |
133 } | |
134 }else if(source[i]=='\\'){ | |
135 if(i+1<sourceLen){ | |
136 switch(source[i+1]){ | |
137 case ',': | |
138 case '!': | |
139 case '?': | |
140 case '#': | |
141 case '.': | |
142 case '%': | |
143 case '&': | |
144 case ':': | |
145 case ';': | |
146 if(j+2<targetLen){ | |
147 uprv_strcat(target,"\\\\"); | |
148 } | |
149 j+=2; | |
150 break; | |
151 case '"': | |
152 case '\'': | |
153 if(j+3<targetLen){ | |
154 uprv_strcat(target,"\\\\\\"); | |
155 } | |
156 j+=3; | |
157 break; | |
158 default : | |
159 if(j<targetLen){ | |
160 target[j]=(char)source[i]; | |
161 } | |
162 j++; | |
163 break; | |
164 } | |
165 }else{ | |
166 if(j<targetLen){ | |
167 uprv_strcat(target,"\\\\"); | |
168 } | |
169 j+=2; | |
170 } | |
171 }else if(source[i]>=0x20 && source[i]<0x7F/*ASCII*/){ | |
172 if(j<targetLen){ | |
173 target[j] = (char) source[i]; | |
174 } | |
175 j++; | |
176 }else{ | |
177 if(*enc =='\0' || source[i]==0x0000){ | |
178 uprv_strcpy(str,"\\u"); | |
179 itostr(str+2,source[i],16,4); | |
180 if(j+6<targetLen){ | |
181 uprv_strcat(target,str); | |
182 } | |
183 j+=6; | |
184 }else{ | |
185 char dest[30] = {0}; | |
186 int retVal=ucnv_fromUChars(conv,dest,30,source+i,1,status); | |
187 if(U_FAILURE(*status)){ | |
188 return 0; | |
189 } | |
190 if(j+retVal<targetLen){ | |
191 uprv_strcat(target,dest); | |
192 } | |
193 j+=retVal; | |
194 } | |
195 } | |
196 i++; | |
197 } | |
198 return j; | |
199 } | |
200 | |
201 | |
202 static uint32_t | |
203 strrch(const char* source,uint32_t sourceLen,char find){ | |
204 const char* tSourceEnd =source + (sourceLen-1); | |
205 while(tSourceEnd>= source){ | |
206 if(*tSourceEnd==find){ | |
207 return (uint32_t)(tSourceEnd-source); | |
208 } | |
209 tSourceEnd--; | |
210 } | |
211 return (uint32_t)(tSourceEnd-source); | |
212 } | |
213 | |
214 static int32_t getColumnCount(int32_t len){ | |
215 int32_t columnCount = 80; | |
216 int32_t maxLines = 3000; | |
217 int32_t adjustedLen = len*5; /* assume that every codepoint is represented i
n \uXXXX format*/ | |
218 /* | |
219 * calculate the number of lines that | |
220 * may be required if column count is 80 | |
221 */ | |
222 if (maxLines < (adjustedLen / columnCount) ){ | |
223 columnCount = adjustedLen / maxLines; | |
224 } | |
225 return columnCount; | |
226 } | |
227 static void | |
228 str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s
tatus){ | |
229 | |
230 uint32_t length = srcLen*8; | |
231 uint32_t bufLen = 0; | |
232 uint32_t columnCount; | |
233 char* buf = (char*) malloc(sizeof(char)*length); | |
234 | |
235 if(buf == NULL) { | |
236 *status = U_MEMORY_ALLOCATION_ERROR; | |
237 return; | |
238 } | |
239 | |
240 columnCount = getColumnCount(srcLen); | |
241 memset(buf,0,length); | |
242 | |
243 bufLen = uCharsToChars(buf,length,src,srcLen,status); | |
244 | |
245 if(printEndLine) | |
246 write_tabs(out); | |
247 | |
248 if(U_FAILURE(*status)){ | |
249 uprv_free(buf); | |
250 return; | |
251 } | |
252 | |
253 if(bufLen+(tabCount*4) > columnCount ){ | |
254 uint32_t len = 0; | |
255 char* current = buf; | |
256 uint32_t add; | |
257 while(len < bufLen){ | |
258 add = columnCount-(tabCount*4)-5/* for ", +\n */; | |
259 current = buf +len; | |
260 if (add < (bufLen-len)) { | |
261 uint32_t idx = strrch(current,add,'\\'); | |
262 if (idx > add) { | |
263 idx = add; | |
264 } else { | |
265 int32_t num =idx-1; | |
266 uint32_t seqLen; | |
267 while(num>0){ | |
268 if(current[num]=='\\'){ | |
269 num--; | |
270 }else{ | |
271 break; | |
272 } | |
273 } | |
274 if ((idx-num)%2==0) { | |
275 idx--; | |
276 } | |
277 seqLen = (current[idx+1]=='u') ? 6 : 2; | |
278 if ((add-idx) < seqLen) { | |
279 add = idx + seqLen; | |
280 } | |
281 } | |
282 } | |
283 T_FileStream_write(out,"\"",1); | |
284 if(len+add<bufLen){ | |
285 T_FileStream_write(out,current,add); | |
286 T_FileStream_write(out,"\" +\n",4); | |
287 write_tabs(out); | |
288 }else{ | |
289 T_FileStream_write(out,current,bufLen-len); | |
290 } | |
291 len+=add; | |
292 } | |
293 }else{ | |
294 T_FileStream_write(out,"\"",1); | |
295 T_FileStream_write(out, buf,bufLen); | |
296 } | |
297 if(printEndLine){ | |
298 T_FileStream_write(out,"\",\n",3); | |
299 }else{ | |
300 T_FileStream_write(out,"\"",1); | |
301 } | |
302 uprv_free(buf); | |
303 } | |
304 | |
305 /* Writing Functions */ | |
306 static void | |
307 string_write_java(struct SResource *res,UErrorCode *status) { | |
308 char resKeyBuffer[8]; | |
309 const char *resname = res_getKeyString(srBundle, res, resKeyBuffer); | |
310 | |
311 str_write_java(res->u.fString.fChars,res->u.fString.fLength,TRUE,status); | |
312 | |
313 if(resname != NULL && uprv_strcmp(resname,"Rule")==0) | |
314 { | |
315 UChar* buf = (UChar*) uprv_malloc(sizeof(UChar)*res->u.fString.fLength); | |
316 uprv_memcpy(buf,res->u.fString.fChars,res->u.fString.fLength); | |
317 uprv_free(buf); | |
318 } | |
319 | |
320 } | |
321 | |
322 static void | |
323 array_write_java( struct SResource *res, UErrorCode *status) { | |
324 | |
325 uint32_t i = 0; | |
326 const char* arr ="new String[] { \n"; | |
327 struct SResource *current = NULL; | |
328 UBool allStrings = TRUE; | |
329 | |
330 if (U_FAILURE(*status)) { | |
331 return; | |
332 } | |
333 | |
334 if (res->u.fArray.fCount > 0) { | |
335 | |
336 current = res->u.fArray.fFirst; | |
337 i = 0; | |
338 while(current != NULL){ | |
339 if(current->fType!=URES_STRING){ | |
340 allStrings = FALSE; | |
341 break; | |
342 } | |
343 current= current->fNext; | |
344 } | |
345 | |
346 current = res->u.fArray.fFirst; | |
347 if(allStrings==FALSE){ | |
348 const char* object = "new Object[]{\n"; | |
349 write_tabs(out); | |
350 T_FileStream_write(out, object, (int32_t)uprv_strlen(object)); | |
351 tabCount++; | |
352 }else{ | |
353 write_tabs(out); | |
354 T_FileStream_write(out, arr, (int32_t)uprv_strlen(arr)); | |
355 tabCount++; | |
356 } | |
357 while (current != NULL) { | |
358 /*if(current->fType==URES_STRING){ | |
359 write_tabs(out); | |
360 }*/ | |
361 res_write_java(current, status); | |
362 if(U_FAILURE(*status)){ | |
363 return; | |
364 } | |
365 i++; | |
366 current = current->fNext; | |
367 } | |
368 T_FileStream_write(out,"\n",1); | |
369 | |
370 tabCount--; | |
371 write_tabs(out); | |
372 T_FileStream_write(out,"},\n",3); | |
373 | |
374 } else { | |
375 write_tabs(out); | |
376 T_FileStream_write(out,arr,(int32_t)uprv_strlen(arr)); | |
377 write_tabs(out); | |
378 T_FileStream_write(out,"},\n",3); | |
379 } | |
380 } | |
381 | |
382 static void | |
383 intvector_write_java( struct SResource *res, UErrorCode *status) { | |
384 uint32_t i = 0; | |
385 const char* intArr = "new int[] {\n"; | |
386 /* const char* intC = "new Integer("; */ | |
387 const char* stringArr = "new String[]{\n"; | |
388 char resKeyBuffer[8]; | |
389 const char *resname = res_getKeyString(srBundle, res, resKeyBuffer); | |
390 char buf[100]; | |
391 int len =0; | |
392 buf[0]=0; | |
393 write_tabs(out); | |
394 | |
395 if(resname != NULL && uprv_strcmp(resname,"DateTimeElements")==0){ | |
396 T_FileStream_write(out, stringArr, (int32_t)uprv_strlen(stringArr)); | |
397 tabCount++; | |
398 for(i = 0; i<res->u.fIntVector.fCount; i++) { | |
399 write_tabs(out); | |
400 len=itostr(buf,res->u.fIntVector.fArray[i],10,0); | |
401 T_FileStream_write(out,"\"",1); | |
402 T_FileStream_write(out,buf,len); | |
403 T_FileStream_write(out,"\",",2); | |
404 T_FileStream_write(out,"\n",1); | |
405 } | |
406 }else{ | |
407 T_FileStream_write(out, intArr, (int32_t)uprv_strlen(intArr)); | |
408 tabCount++; | |
409 for(i = 0; i<res->u.fIntVector.fCount; i++) { | |
410 write_tabs(out); | |
411 /* T_FileStream_write(out, intC, (int32_t)uprv_strlen(intC)); */ | |
412 len=itostr(buf,res->u.fIntVector.fArray[i],10,0); | |
413 T_FileStream_write(out,buf,len); | |
414 /* T_FileStream_write(out,"),",2); */ | |
415 /* T_FileStream_write(out,"\n",1); */ | |
416 T_FileStream_write(out,",\n",2); | |
417 } | |
418 } | |
419 tabCount--; | |
420 write_tabs(out); | |
421 T_FileStream_write(out,"},\n",3); | |
422 } | |
423 | |
424 static void | |
425 int_write_java(struct SResource *res,UErrorCode *status) { | |
426 const char* intC = "new Integer("; | |
427 char buf[100]; | |
428 int len =0; | |
429 buf[0]=0; | |
430 | |
431 /* write the binary data */ | |
432 write_tabs(out); | |
433 T_FileStream_write(out, intC, (int32_t)uprv_strlen(intC)); | |
434 len=itostr(buf, res->u.fIntValue.fValue, 10, 0); | |
435 T_FileStream_write(out,buf,len); | |
436 T_FileStream_write(out,"),\n",3 ); | |
437 | |
438 } | |
439 | |
440 static void | |
441 bytes_write_java( struct SResource *res, UErrorCode *status) { | |
442 const char* type = "new byte[] {"; | |
443 const char* byteDecl = "%i, "; | |
444 char byteBuffer[100] = { 0 }; | |
445 uint8_t* byteArray = NULL; | |
446 int byteIterator = 0; | |
447 | |
448 int32_t srcLen=res->u.fBinaryValue.fLength; | |
449 | |
450 if(srcLen>0 ) | |
451 { | |
452 byteArray = res->u.fBinaryValue.fData; | |
453 | |
454 write_tabs(out); | |
455 T_FileStream_write(out, type, (int32_t)uprv_strlen(type)); | |
456 T_FileStream_write(out, "\n", 1); | |
457 tabCount++; | |
458 | |
459 for (;byteIterator<srcLen;byteIterator++) | |
460 { | |
461 if (byteIterator%16 == 0) | |
462 { | |
463 write_tabs(out); | |
464 } | |
465 | |
466 if (byteArray[byteIterator] < 128) | |
467 { | |
468 sprintf(byteBuffer, byteDecl, byteArray[byteIterator]); | |
469 } | |
470 else | |
471 { | |
472 sprintf(byteBuffer, byteDecl, (byteArray[byteIterator]-256)); | |
473 } | |
474 | |
475 T_FileStream_write(out, byteBuffer, (int32_t)uprv_strlen(byteBuffer)
); | |
476 | |
477 if (byteIterator%16 == 15) | |
478 { | |
479 T_FileStream_write(out, "\n", 1); | |
480 } | |
481 | |
482 } | |
483 | |
484 if (((byteIterator-1)%16) != 15) | |
485 { | |
486 T_FileStream_write(out, "\n", 1); | |
487 } | |
488 | |
489 tabCount--; | |
490 write_tabs(out); | |
491 T_FileStream_write(out, "},\n", 3); | |
492 | |
493 } | |
494 else | |
495 { | |
496 /* Empty array */ | |
497 write_tabs(out); | |
498 T_FileStream_write(out,type,(int32_t)uprv_strlen(type)); | |
499 T_FileStream_write(out,"},\n",3); | |
500 } | |
501 | |
502 } | |
503 | |
504 static UBool start = TRUE; | |
505 | |
506 static void | |
507 table_write_java(struct SResource *res, UErrorCode *status) { | |
508 uint32_t i = 0; | |
509 struct SResource *current = NULL; | |
510 const char* obj = "new Object[][]{\n"; | |
511 | |
512 if (U_FAILURE(*status)) { | |
513 return ; | |
514 } | |
515 | |
516 if (res->u.fTable.fCount > 0) { | |
517 if(start==FALSE){ | |
518 write_tabs(out); | |
519 T_FileStream_write(out, obj, (int32_t)uprv_strlen(obj)); | |
520 tabCount++; | |
521 } | |
522 start = FALSE; | |
523 current = res->u.fTable.fFirst; | |
524 i = 0; | |
525 | |
526 | |
527 while (current != NULL) { | |
528 char currentKeyBuffer[8]; | |
529 const char *currentKeyString = res_getKeyString(srBundle, current, c
urrentKeyBuffer); | |
530 | |
531 assert(i < res->u.fTable.fCount); | |
532 write_tabs(out); | |
533 | |
534 T_FileStream_write(out, openBrace, 2); | |
535 | |
536 | |
537 tabCount++; | |
538 | |
539 write_tabs(out); | |
540 if(currentKeyString != NULL) { | |
541 T_FileStream_write(out, "\"", 1); | |
542 T_FileStream_write(out, currentKeyString, | |
543 (int32_t)uprv_strlen(currentKeyString)); | |
544 T_FileStream_write(out, "\",\n", 2); | |
545 | |
546 T_FileStream_write(out, "\n", 1); | |
547 } | |
548 res_write_java(current, status); | |
549 if(U_FAILURE(*status)){ | |
550 return; | |
551 } | |
552 i++; | |
553 current = current->fNext; | |
554 tabCount--; | |
555 write_tabs(out); | |
556 T_FileStream_write(out, "},\n", 3); | |
557 } | |
558 if(tabCount>4){ | |
559 tabCount--; | |
560 write_tabs(out); | |
561 T_FileStream_write(out, "},\n", 3); | |
562 } | |
563 | |
564 } else { | |
565 write_tabs(out); | |
566 T_FileStream_write(out,obj,(int32_t)uprv_strlen(obj)); | |
567 | |
568 write_tabs(out); | |
569 T_FileStream_write(out,"},\n",3); | |
570 | |
571 } | |
572 | |
573 } | |
574 | |
575 void | |
576 res_write_java(struct SResource *res,UErrorCode *status) { | |
577 | |
578 if (U_FAILURE(*status)) { | |
579 return ; | |
580 } | |
581 | |
582 if (res != NULL) { | |
583 switch (res->fType) { | |
584 case URES_STRING: | |
585 string_write_java (res, status); | |
586 return; | |
587 case URES_ALIAS: | |
588 printf("Encountered unsupported resource type %d of alias\n", res->
fType); | |
589 *status = U_UNSUPPORTED_ERROR; | |
590 return; | |
591 case URES_INT_VECTOR: | |
592 intvector_write_java (res, status); | |
593 return; | |
594 case URES_BINARY: | |
595 bytes_write_java (res, status); | |
596 return; | |
597 case URES_INT: | |
598 int_write_java (res, status); | |
599 return; | |
600 case URES_ARRAY: | |
601 array_write_java (res, status); | |
602 return; | |
603 case URES_TABLE: | |
604 table_write_java (res, status); | |
605 return; | |
606 default: | |
607 break; | |
608 } | |
609 } | |
610 | |
611 *status = U_INTERNAL_PROGRAM_ERROR; | |
612 } | |
613 | |
614 void | |
615 bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outp
utEnc, | |
616 char *writtenFilename, int writtenFilenameLen, | |
617 const char* packageName, const char* bundleName, | |
618 UErrorCode *status) { | |
619 | |
620 char fileName[256] = {'\0'}; | |
621 char className[256]={'\0'}; | |
622 /*char constructor[1000] = { 0 };*/ | |
623 /*UBool j1 =FALSE;*/ | |
624 /*outDir = outputDir;*/ | |
625 | |
626 start = TRUE; /* Reset the start indictor*/ | |
627 | |
628 bName = (bundleName==NULL) ? "LocaleElements" : bundleName; | |
629 pName = (packageName==NULL)? "com.ibm.icu.impl.data" : packageName; | |
630 | |
631 uprv_strcpy(className, bName); | |
632 srBundle = bundle; | |
633 if(uprv_strcmp(srBundle->fLocale,"root")!=0){ | |
634 uprv_strcat(className,"_"); | |
635 uprv_strcat(className,srBundle->fLocale); | |
636 } | |
637 if(outputDir){ | |
638 uprv_strcpy(fileName, outputDir); | |
639 if(outputDir[uprv_strlen(outputDir)-1] !=U_FILE_SEP_CHAR){ | |
640 uprv_strcat(fileName,U_FILE_SEP_STRING); | |
641 } | |
642 uprv_strcat(fileName,className); | |
643 uprv_strcat(fileName,".java"); | |
644 }else{ | |
645 uprv_strcat(fileName,className); | |
646 uprv_strcat(fileName,".java"); | |
647 } | |
648 | |
649 if (writtenFilename) { | |
650 uprv_strncpy(writtenFilename, fileName, writtenFilenameLen); | |
651 } | |
652 | |
653 if (U_FAILURE(*status)) { | |
654 return; | |
655 } | |
656 | |
657 out= T_FileStream_open(fileName,"w"); | |
658 | |
659 if(out==NULL){ | |
660 *status = U_FILE_ACCESS_ERROR; | |
661 return; | |
662 } | |
663 if(getIncludeCopyright()){ | |
664 T_FileStream_write(out, copyRight, (int32_t)uprv_strlen(copyRight)); | |
665 T_FileStream_write(out, warningMsg, (int32_t)uprv_strlen(warningMsg)); | |
666 } | |
667 T_FileStream_write(out,"package ",(int32_t)uprv_strlen("package ")); | |
668 T_FileStream_write(out,pName,(int32_t)uprv_strlen(pName)); | |
669 T_FileStream_write(out,";\n\n",3); | |
670 T_FileStream_write(out, javaClass, (int32_t)uprv_strlen(javaClass)); | |
671 T_FileStream_write(out, className, (int32_t)uprv_strlen(className)); | |
672 T_FileStream_write(out, javaClass1, (int32_t)uprv_strlen(javaClass1)); | |
673 | |
674 /* if(j1){ | |
675 T_FileStream_write(out, javaClass1, (int32_t)uprv_strlen(javaClass1)); | |
676 }else{ | |
677 sprintf(constructor,javaClassICU,className); | |
678 T_FileStream_write(out, constructor, (int32_t)uprv_strlen(constructor
)); | |
679 } | |
680 */ | |
681 | |
682 if(outputEnc && *outputEnc!='\0'){ | |
683 /* store the output encoding */ | |
684 enc = outputEnc; | |
685 conv=ucnv_open(enc,status); | |
686 if(U_FAILURE(*status)){ | |
687 return; | |
688 } | |
689 } | |
690 res_write_java(bundle->fRoot, status); | |
691 | |
692 T_FileStream_write(out, closeClass, (int32_t)uprv_strlen(closeClass)); | |
693 | |
694 T_FileStream_close(out); | |
695 | |
696 ucnv_close(conv); | |
697 } | |
OLD | NEW |