diff --git a/icu4c/source/tools/genrb/wrtxml.c b/icu4c/source/tools/genrb/wrtxml.c index 57813b769a0..85926002ac7 100644 --- a/icu4c/source/tools/genrb/wrtxml.c +++ b/icu4c/source/tools/genrb/wrtxml.c @@ -153,136 +153,46 @@ static UBool checkISOCountry(char* country) { return FALSE; } +static void strnrepchr(char* src, int32_t srcLen, char s, char r){ + int32_t i = 0; + for(i=0;i\n" @@ -291,7 +201,7 @@ static const char* xmlHeader = "\n" static const char* bundleStart = "\n"; static const char* bundleEnd = "\n"; -void res_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status); +void res_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status); static char* convertAndEscape(char** pDest, int32_t destCap, int32_t* destLength, const UChar* src, int32_t srcLen, UErrorCode* status){ @@ -597,7 +507,7 @@ string_write_xml(struct SResource *res, const char* id, const char* language, UE char* sid = NULL; const char* strStart = "", 2); buf = convertAndEscape(&buf,0,&bufLen,res->u.fString.fChars,res->u.fString.fLength,status); @@ -662,7 +572,7 @@ string_write_xml(struct SResource *res, const char* id, const char* language, UE write_tabs(out); T_FileStream_write(out,valStrStart, (int32_t)uprv_strlen(valStrStart)); - T_FileStream_write(out,language, (int32_t)uprv_strlen(language)); + /*T_FileStream_write(out,language, (int32_t)uprv_strlen(language));*/ T_FileStream_write(out,"\">", 2); buf = convertAndEscape(&buf,0,&bufLen,res->u.fString.fChars,res->u.fString.fLength,status); @@ -802,7 +712,7 @@ array_write_xml( struct SResource *res, const char* id, const char* language, UE index++; subId = getID(sid, c, subId); - res_write_xml(current, subId, language, status); + res_write_xml(current, subId, language, FALSE, status); uprv_free(subId); subId = NULL; if(U_FAILURE(*status)){ @@ -823,7 +733,7 @@ intvector_write_xml( struct SResource *res, const char* id, const char* language const char* end = "\n"; const char* startKey= "resname=\""; - const char* intStart = "fKey<0 || uprv_strcmp(srBundle->fKeys+res->fKey ,"")==0){ T_FileStream_write(out, start, (int32_t)uprv_strlen(start)); + if(isTopLevel){ + int32_t len = uprv_strlen(id); + T_FileStream_write(out, idstr, (int32_t)uprv_strlen(idstr)); + T_FileStream_write(out, id,len); + T_FileStream_write(out, "\" ", 2); + id=""; + } sid = getID(id, NULL, sid); /* only write the id if the sid!="" */ if(sid[0]!='\0'){ @@ -1149,6 +1066,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr } + if(res->fComment!=NULL && res->fComment->fChars != NULL){ printComments(res->fComment, sid, FALSE, status); printNoteElements(res->fComment, status); @@ -1181,7 +1099,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr save = current = res->u.fTable.fFirst; i = 0; while (current != NULL) { - res_write_xml(current, sid, language, status); + res_write_xml(current, sid, language, FALSE, status); if(U_FAILURE(*status)){ return; @@ -1228,7 +1146,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr } void -res_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status) { +res_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) { if (U_FAILURE(*status)) { return ; @@ -1256,7 +1174,7 @@ res_write_xml(struct SResource *res, const char* id, const char* language, UErro return; case URES_TABLE: case URES_TABLE32: - table_write_xml (res, id, language, status); + table_write_xml (res, id, language, isTopLevel, status); return; default: @@ -1275,7 +1193,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu char* xmlfileName = NULL; char* outputFileName = NULL; char* originalFileName = NULL; - const char* fileStart = "fRoot, srBundle->fLocale, lang, status); + res_write_xml(bundle->fRoot, bundle->fLocale, lang, TRUE, status); tabCount--; write_tabs(out);