1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 4fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 2002-2014, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru* File wrtxml.cpp 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 14c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru* 10/01/02 Ram Creation. 15c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru* 02/07/08 Spieth Correct XLIFF generation on EBCDIC platform 16c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru* 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 19fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 20fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Safer use of UnicodeString. 21fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef UNISTR_FROM_CHAR_EXPLICIT 22fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius# define UNISTR_FROM_CHAR_EXPLICIT explicit 23fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 24fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 25fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Less important, but still a good idea. 26fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef UNISTR_FROM_STRING_EXPLICIT 27fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius# define UNISTR_FROM_STRING_EXPLICIT explicit 28fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 29fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "reslist.h" 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unewdata.h" 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ures.h" 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "errmsg.h" 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "filestrm.h" 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "genrb.h" 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "rle.h" 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uhash.h" 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uresimp.h" 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uchar.h" 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "ustr.h" 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "prscmnts.h" 45c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#include "unicode/unistr.h" 4654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/utf8.h" 4754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/utf16.h" 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <time.h> 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruU_NAMESPACE_USE 51c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int tabCount = 0; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic FileStream* out=NULL; 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic struct SRBRoot* srBundle ; 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* outDir = NULL; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* enc =""; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UConverter* conv = NULL; 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* const* ISOLanguages; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* const* ISOCountries; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* textExt = ".txt"; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* xliffExt = ".xlf"; 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic int32_t write_utf8_file(FileStream* fileStream, UnicodeString outString) 66b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 67b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 68c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t len = 0; 69c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 70b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // preflight to get the destination buffer size 71b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_strToUTF8(NULL, 72b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 0, 73b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru &len, 74b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru outString.getBuffer(), 75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru outString.length(), 76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru &status); 77b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 78b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // allocate the buffer 79b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char* dest = (char*)uprv_malloc(len); 80b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 81b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 82b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // convert the data 83b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_strToUTF8(dest, 84b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru len, 85b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru &len, 86b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru outString.getBuffer(), 87b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru outString.length(), 88b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru &status); 89b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 90b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // write data to out file 91b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t ret = T_FileStream_write(fileStream, dest, len); 92c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(dest); 93b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return (ret); 94c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 95c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*write indentation for formatting*/ 97b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void write_tabs(FileStream* os){ 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int i=0; 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(;i<=tabCount;i++){ 100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(os,UnicodeString(" ")); 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*get ID for each element. ID is globally unique.*/ 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic char* getID(const char* id, const char* curKey, char* result) { 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(curKey == NULL) { 107c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = (char *)uprv_malloc(sizeof(char)*uprv_strlen(id) + 1); 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(result, 0, sizeof(char)*uprv_strlen(id) + 1); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(result, id); 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 111c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = (char *)uprv_malloc(sizeof(char)*(uprv_strlen(id) + 1 + uprv_strlen(curKey)) + 1); 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(result, 0, sizeof(char)*(uprv_strlen(id) + 1 + uprv_strlen(curKey)) + 1); 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(id[0]!='\0'){ 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(result, id); 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(result, "_"); 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(result, curKey); 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*compute CRC for binary code*/ 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* The code is from http://www.theorem.com/java/CRC32.java 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Calculates the CRC32 - 32 bit Cyclical Redundancy Check 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <P> This check is used in numerous systems to verify the integrity 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * of information. It's also used as a hashing function. Unlike a regular 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * checksum, it's sensitive to the order of the characters. 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * It produces a 32 bit 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Michael Lecuyer (mjl@theorem.com) 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @version 1.1 August 11, 1998 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* ICU is not endian portable, because ICU data generated on big endian machines can be 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * ported to big endian machines but not to little endian machines and vice versa. The 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * conversion is not portable across platforms with different endianess. 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouint32_t computeCRC(char *ptr, uint32_t len, uint32_t lastcrc){ 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t crc; 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t temp1; 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t temp2; 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t crc_ta[256]; 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int i = 0; 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int j = 0; 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t crc2 = 0; 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CRC32_POLYNOMIAL 0xEDB88320 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*build crc table*/ 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (i = 0; i <= 255; i++) { 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc2 = i; 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (j = 8; j > 0; j--) { 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if ((crc2 & 1) == 1) { 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc2 = (crc2 >> 1) ^ CRC32_POLYNOMIAL; 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc2 >>= 1; 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc_ta[i] = crc2; 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc = lastcrc; 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while(len--!=0) { 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp1 = (uint32_t)crc>>8; 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp2 = crc_ta[(crc^*ptr) & 0xFF]; 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc = temp1^temp2; 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ptr++; 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return(crc); 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void strnrepchr(char* src, int32_t srcLen, char s, char r){ 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i = 0; 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0;i<srcLen;i++){ 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(src[i]==s){ 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src[i]=r; 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Parse the filename, and get its language information. 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If it fails to get the language information from the filename, 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * use "en" as the default value for language 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic char* parseFilename(const char* id, char* /*lang*/) { 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int idLen = (int) uprv_strlen(id); 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* localeID = (char*) uprv_malloc(idLen); 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int pos = 0; 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int canonCapacity = 0; 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* canon = NULL; 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int canonLen = 0; 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*int i;*/ 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 195c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char *ext = uprv_strchr(id, '.'); 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(ext != NULL){ 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = (int) (ext - id); 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = idLen; 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memcpy(localeID, id, pos); 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru localeID[pos]=0; /* NUL terminate the string */ 204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru canonCapacity =pos*3; 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru canon = (char*) uprv_malloc(canonCapacity); 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru canonLen = uloc_canonicalize(localeID, canon, canonCapacity, &status); 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Could not canonicalize the locale ID: %s. Error: %s\n", localeID, u_errorName(status)); 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru exit(status); 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru strnrepchr(canon, canonLen, '_', '-'); 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return canon; 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* xmlHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* bundleStart = "<xliff version = \"1.2\" " 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xmlns='urn:oasis:names:tc:xliff:document:1.2' " 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xsi:schemaLocation='urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd'>\n"; 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* bundleStart = "<xliff version = \"1.1\" " 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xmlns='urn:oasis:names:tc:xliff:document:1.1' " 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "xsi:schemaLocation='urn:oasis:names:tc:xliff:document:1.1 http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd'>\n"; 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* bundleEnd = "</xliff>\n"; 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid res_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status); 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic char* convertAndEscape(char** pDest, int32_t destCap, int32_t* destLength, 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar* src, int32_t srcLen, UErrorCode* status){ 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t srcIndex=0; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* dest=NULL; 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* temp=NULL; 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t destLen=0; 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar32 c = 0; 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status==NULL || U_FAILURE(*status) || pDest==NULL || srcLen==0 || src == NULL){ 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest =*pDest; 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(dest==NULL || destCap <=0){ 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru destCap = srcLen * 8; 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest = (char*) uprv_malloc(sizeof(char) * destCap); 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(dest==NULL){ 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status=U_MEMORY_ALLOCATION_ERROR; 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest[0]=0; 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while(srcIndex<srcLen){ 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U16_NEXT(src, srcIndex, srcLen, c); 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U16_IS_LEAD(c) || U16_IS_TRAIL(c)) { 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_ILLEGAL_CHAR_FOUND; 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Illegal Surrogate! \n"); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(dest); 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 26654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if((destLen+U8_LENGTH(c)) < destCap){ 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* ASCII Range */ 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(c <=0x007F){ 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch(c) { 271c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case '\x26': 272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_strcpy(dest+( destLen),"\x26\x61\x6d\x70\x3b"); /* &*/ 273c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru destLen+=(int32_t)uprv_strlen("\x26\x61\x6d\x70\x3b"); 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 275c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case '\x3c': 276c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_strcpy(dest+(destLen),"\x26\x6c\x74\x3b"); /* <*/ 277c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru destLen+=(int32_t)uprv_strlen("\x26\x6c\x74\x3b"); 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 279c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case '\x3e': 280c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_strcpy(dest+(destLen),"\x26\x67\x74\x3b"); /* >*/ 281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru destLen+=(int32_t)uprv_strlen("\x26\x67\x74\x3b"); 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case '\x22': 284c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_strcpy(dest+(destLen),"\x26\x71\x75\x6f\x74\x3b"); /* "*/ 285c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru destLen+=(int32_t)uprv_strlen("\x26\x71\x75\x6f\x74\x3b"); 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 287c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru case '\x27': 288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_strcpy(dest+(destLen),"\x26\x61\x70\x6f\x73\x3b"); /* ' */ 289c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru destLen+=(int32_t)uprv_strlen("\x26\x61\x70\x6f\x73\x3b"); 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Disallow C0 controls except TAB, CR, LF*/ 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x00: 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x01: 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x02: 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x03: 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x04: 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x05: 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x06: 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x07: 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x08: 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*case 0x09:*/ 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*case 0x0A: */ 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x0B: 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x0C: 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*case 0x0D:*/ 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x0E: 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x0F: 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x10: 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x11: 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x12: 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x13: 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x14: 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x15: 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x16: 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x17: 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x18: 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x19: 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1A: 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1B: 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1C: 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1D: 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1E: 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case 0x1F: 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_ILLEGAL_CHAR_FOUND; 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Illegal Character \\u%04X!\n",(int)c); 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(dest); 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest[destLen++]=(char)c; 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool isError = FALSE; 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U8_APPEND((unsigned char*)dest,destLen,destCap,c,isError); 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(isError){ 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_ILLEGAL_CHAR_FOUND; 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Illegal Character \\U%08X!\n",(int)c); 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(dest); 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru destCap += destLen; 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp = (char*) uprv_malloc(sizeof(char)*destCap); 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(temp==NULL){ 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status=U_MEMORY_ALLOCATION_ERROR; 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(dest); 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memmove(temp,dest,destLen); 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru destLen=0; 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(dest); 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru dest=temp; 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp=NULL; 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *destLength = destLen; 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return dest; 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ASTERISK 0x002A 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define SPACE 0x0020 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CR 0x000A 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LF 0x000D 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define AT_SIGN 0x0040 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutrim(char **src, int32_t *len){ 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *s = NULL; 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i = 0; 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(src == NULL || *src == NULL){ 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru s = *src; 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* trim from the end */ 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for( i=(*len-1); i>= 0; i--){ 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch(s[i]){ 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case ASTERISK: 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case SPACE: 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case CR: 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case LF: 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru s[i] = 0; 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru continue; 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *len = i+1; 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruprint(UChar* src, int32_t srcLen,const char *tagStart,const char *tagEnd, UErrorCode *status){ 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t bufCapacity = srcLen*4; 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *buf = NULL; 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t bufLen = 0; 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buf = (char*) (uprv_malloc(bufCapacity)); 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(buf==0){ 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Could not allocate memory!!"); 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru exit(U_MEMORY_ALLOCATION_ERROR); 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buf = convertAndEscape(&buf, bufCapacity, &bufLen, src, srcLen,status); 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_SUCCESS(*status)){ 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru trim(&buf,&bufLen); 414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(tagStart)); 415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(buf, bufLen, "UTF-8")); 416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(tagEnd)); 417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString("\n")); 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruprintNoteElements(struct UString *src, UErrorCode *status){ 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if UCONFIG_NO_REGULAR_EXPRESSIONS==0 /* donot compile when no RegularExpressions are available */ 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t capacity = 0; 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* note = NULL; 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t noteLen = 0; 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = 0,i; 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(src == NULL){ 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru capacity = src->fLength; 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru note = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * capacity); 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count = getCount(src->fChars,src->fLength, UPC_NOTE, status); 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(note); 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i < count; i++){ 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru noteLen = getAt(src->fChars,src->fLength, ¬e, capacity, i, UPC_NOTE, status); 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 446c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(note); 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(noteLen > 0){ 450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru print(note, noteLen,"<note>", "</note>", status); 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(note); 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else 456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Warning: Could not output comments to XLIFF file. ICU has been built without RegularExpression support.\n"); 458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */ 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void printAttribute(const char *name, const char *value, int32_t /*len*/) 464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru{ 465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(" ")); 466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(name)); 467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(" = \"")); 468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(value)); 469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("\"")); 470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void printAttribute(const char *name, const UnicodeString value, int32_t /*len*/) 473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(" ")); 475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(name)); 476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(" = \"")); 477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, value); 478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("\"")); 479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruprintComments(struct UString *src, const char *resName, UBool printTranslate, UErrorCode *status){ 483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if UCONFIG_NO_REGULAR_EXPRESSIONS==0 /* donot compile when no RegularExpressions are available */ 485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(status==NULL || U_FAILURE(*status)){ 487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t capacity = src->fLength + 1; 491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* buf = NULL; 492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t bufLen = 0; 493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* desc = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * capacity); 494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar* trans = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * capacity); 495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t descLen = 0, transLen=0; 497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(desc==NULL || trans==NULL){ 498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_MEMORY_ALLOCATION_ERROR; 499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(desc); 500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(trans); 501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru src->fLength = removeCmtText(src->fChars, src->fLength, status); 504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru descLen = getDescription(src->fChars,src->fLength, &desc, capacity, status); 505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transLen = getTranslate(src->fChars,src->fLength, &trans, capacity, status); 506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* first print translate attribute */ 508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(transLen > 0){ 509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(printTranslate){ 510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* print translate attribute */ 511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buf = convertAndEscape(&buf, 0, &bufLen, trans, transLen, status); 512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_SUCCESS(*status)){ 513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("translate", UnicodeString(buf, bufLen, "UTF-8"), bufLen); 514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(">\n")); 515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else if(getShowWarning()){ 517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Warning: Tranlate attribute for resource %s cannot be set. XLIFF prohibits it.\n", resName); 518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* no translate attribute .. just close the tag */ 519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(">\n")); 520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* no translate attribute .. just close the tag */ 523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out,UnicodeString(">\n")); 524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(descLen > 0){ 527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru print(desc, descLen, "<!--", "-->", status); 529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 530c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 531c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(desc); 532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(trans); 533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else 534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Warning: Could not output comments to XLIFF file. ICU has been built without RegularExpression support.\n"); 536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* UCONFIG_NO_REGULAR_EXPRESSIONS */ 538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Print out a containing element, like: 543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <trans-unit id = "blah" resname = "blah" restype = "x-id-alias" translate = "no"> 544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <group id "calendar_gregorian" resname = "gregorian" restype = "x-icu-array"> 545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic char *printContainer(struct SResource *res, const char *container, const char *restype, const char *mimetype, const char *id, UErrorCode *status) 547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char resKeyBuffer[8]; 54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *resname = NULL; 550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *sid = NULL; 551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resname = res_getKeyString(srBundle, res, resKeyBuffer); 55550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (resname != NULL && *resname != 0) { 556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = getID(id, resname, sid); 557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 558ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = getID(id, NULL, sid); 559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("<")); 562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(container)); 563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("id", sid, (int32_t) uprv_strlen(sid)); 564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (resname != NULL) { 566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("resname", resname, (int32_t) uprv_strlen(resname)); 567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (mimetype != NULL) { 570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("mime-type", mimetype, (int32_t) uprv_strlen(mimetype)); 571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (restype != NULL) { 574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("restype", restype, (int32_t) uprv_strlen(restype)); 575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 578c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (res->fComment.fLength > 0) { 579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* printComments will print the closing ">\n" */ 580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printComments(&res->fComment, resname, TRUE, status); 581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(">\n")); 583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 585ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return sid; 586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Writing Functions */ 589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *trans_unit = "trans-unit"; 591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_trans_unit = "</trans-unit>\n"; 592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *source = "<source>"; 593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_source = "</source>\n"; 594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *group = "group"; 595ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_group = "</group>\n"; 596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *bin_unit = "bin-unit"; 598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_bin_unit = "</bin-unit>\n"; 599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *bin_source = "<bin-source>\n"; 600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_bin_source = "</bin-source>\n"; 601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *external_file = "<external-file"; 602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*static const char *close_external_file = "</external-file>\n";*/ 603ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *internal_file = "<internal-file"; 604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *close_internal_file = "</internal-file>\n"; 605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *application_mimetype = "application"; /* add "/octet-stream"? */ 607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *alias_restype = "x-icu-alias"; 609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *array_restype = "x-icu-array"; 610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *binary_restype = "x-icu-binary"; 611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *integer_restype = "x-icu-integer"; 612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *intvector_restype = "x-icu-intvector"; 613ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char *table_restype = "x-icu-table"; 614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustring_write_xml(struct SResource *res, const char* id, const char* /*language*/, UErrorCode *status) { 617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *sid = NULL; 619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* buf = NULL; 620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t bufLen = 0; 621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(status==NULL || U_FAILURE(*status)){ 623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, trans_unit, NULL, NULL, id, status); 627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(source)); 631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 632ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buf = convertAndEscape(&buf, 0, &bufLen, res->u.fString.fChars, res->u.fString.fLength, status); 633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 635ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 636ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 637ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(buf, bufLen, "UTF-8")); 639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_source)); 640ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printNoteElements(&res->fComment, status); 642ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 643ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 645ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_trans_unit)); 647ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 648ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(buf); 649ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 650ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 651ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 652ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querualias_write_xml(struct SResource *res, const char* id, const char* /*language*/, UErrorCode *status) { 654ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *sid = NULL; 655ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* buf = NULL; 656ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t bufLen=0; 657ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, trans_unit, alias_restype, NULL, id, status); 659ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 661ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(source)); 663ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 664ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buf = convertAndEscape(&buf, 0, &bufLen, res->u.fString.fChars, res->u.fString.fLength, status); 665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 666ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 667ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 668ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(buf, bufLen, "UTF-8")); 670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_source)); 671ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printNoteElements(&res->fComment, status); 673ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 674ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 676ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_trans_unit)); 678ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 679ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(buf); 680ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 681ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 682ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 683ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruarray_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status) { 685ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* sid = NULL; 686ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int index = 0; 687ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 688ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru struct SResource *current = NULL; 689ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, group, array_restype, NULL, id, status); 691ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 692ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru current = res->u.fArray.fFirst; 693ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 694ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (current != NULL) { 695ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char c[256] = {0}; 696ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* subId = NULL; 697ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 698ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru itostr(c, index, 10, 0); 699ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index += 1; 700ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru subId = getID(sid, c, subId); 701ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru res_write_xml(current, subId, language, FALSE, status); 703ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(subId); 704ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru subId = NULL; 705ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 706ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 707ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 708ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 709ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 710ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru current = current->fNext; 711ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 712ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 713ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_group)); 716ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 717ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 718ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 719ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 720ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruintvector_write_xml(struct SResource *res, const char* id, const char* /*language*/, UErrorCode *status) { 722ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* sid = NULL; 723ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* ivd = NULL; 724ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t i=0; 725ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t len=0; 726ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char buf[256] = {'0'}; 727ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, group, intvector_restype, NULL, id, status); 729ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 730ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i = 0; i < res->u.fIntVector.fCount; i += 1) { 731ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char c[256] = {0}; 732ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 733ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru itostr(c, i, 10, 0); 734ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ivd = getID(sid, c, ivd); 735ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = itostr(buf, res->u.fIntVector.fArray[i], 10, 0); 736ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("<")); 739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(trans_unit)); 740ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("id", ivd, (int32_t)uprv_strlen(ivd)); 742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("restype", integer_restype, (int32_t) strlen(integer_restype)); 743ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(">\n")); 745ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 746ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(source)); 749ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(buf, len)); 751ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_source)); 753ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_trans_unit)); 756ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 757ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(ivd); 758ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ivd = NULL; 759ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 760ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 761ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 763ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_group)); 765ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 766ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = NULL; 767ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 768ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 769ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint_write_xml(struct SResource *res, const char* id, const char* /*language*/, UErrorCode *status) { 771ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* sid = NULL; 772ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char buf[256] = {0}; 773ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t len = 0; 774ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, trans_unit, integer_restype, NULL, id, status); 776ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 778ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(source)); 780ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 781ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = itostr(buf, res->u.fIntValue.fValue, 10, 0); 782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(buf, len)); 783ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_source)); 785ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printNoteElements(&res->fComment, status); 787ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 788ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 790ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_trans_unit)); 792ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 793ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 794ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = NULL; 795ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 796ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 797ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querubin_write_xml(struct SResource *res, const char* id, const char* /*language*/, UErrorCode *status) { 799ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* m_type = application_mimetype; 800ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* sid = NULL; 801ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t crc = 0xFFFFFFFF; 802ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 803ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char fileName[1024] ={0}; 804ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t tLen = ( outDir == NULL) ? 0 :(int32_t)uprv_strlen(outDir); 805ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* fn = (char*) uprv_malloc(sizeof(char) * (tLen+1024 + 806ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (res->u.fBinaryValue.fFileName !=NULL ? 807ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strlen(res->u.fBinaryValue.fFileName) :0))); 808ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* ext = NULL; 809ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 810ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* f = NULL; 811ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 812ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fn[0]=0; 813ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 814ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(res->u.fBinaryValue.fFileName != NULL){ 815ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(fileName, res->u.fBinaryValue.fFileName); 816ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru f = uprv_strrchr(fileName, '\\'); 817ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 818ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (f != NULL) { 819ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru f++; 820ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 821ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru f = fileName; 822ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 823ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 824ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ext = uprv_strrchr(fileName, '.'); 825ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 826ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (ext == NULL) { 827ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Error: %s is an unknown binary filename type.\n", fileName); 828ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru exit(U_ILLEGAL_ARGUMENT_ERROR); 829ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 830ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 831ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uprv_strcmp(ext, ".jpg")==0 || uprv_strcmp(ext, ".jpeg")==0 || uprv_strcmp(ext, ".gif")==0 ){ 832ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru m_type = "image"; 833ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(uprv_strcmp(ext, ".wav")==0 || uprv_strcmp(ext, ".au")==0 ){ 834ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru m_type = "audio"; 835ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(uprv_strcmp(ext, ".avi")==0 || uprv_strcmp(ext, ".mpg")==0 || uprv_strcmp(ext, ".mpeg")==0){ 836ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru m_type = "video"; 837ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if(uprv_strcmp(ext, ".txt")==0 || uprv_strcmp(ext, ".text")==0){ 838ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru m_type = "text"; 839ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 840ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, bin_unit, binary_restype, m_type, id, status); 842ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 844ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(bin_source)); 846ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 847ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount+= 1; 848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 849ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(external_file)); 851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("href", f, (int32_t)uprv_strlen(f)); 852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("/>\n")); 853ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 855ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_bin_source)); 857ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printNoteElements(&res->fComment, status); 859ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_bin_unit)); 862ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 863ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char temp[256] = {0}; 864ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t i = 0; 865ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len=0; 866ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, bin_unit, binary_restype, m_type, id, status); 868ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(bin_source)); 871ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 872ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 874ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(internal_file)); 876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("form", application_mimetype, (int32_t) uprv_strlen(application_mimetype)); 877ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 878ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while(i <res->u.fBinaryValue.fLength){ 879ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = itostr(temp, res->u.fBinaryValue.fData[i], 16, 2); 880ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru crc = computeCRC(temp, len, crc); 881ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i++; 882ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 883ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 884ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = itostr(temp, crc, 10, 0); 885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("crc", temp, len); 886ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(">")); 888ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 889ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = 0; 890ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while(i <res->u.fBinaryValue.fLength){ 891ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = itostr(temp, res->u.fBinaryValue.fData[i], 16, 2); 892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(temp)); 893ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i += 1; 894ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 895ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_internal_file)); 897ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 898ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 2; 899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 900ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_bin_source)); 902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printNoteElements(&res->fComment, status); 903ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 904ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_bin_unit)); 907ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 908ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 909ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = NULL; 910ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 911ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 912ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(fn); 913ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 914ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 915ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 916ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 917ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutable_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) { 919ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 920ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t i = 0; 921ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 922ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru struct SResource *current = NULL; 923ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* sid = NULL; 924ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 925ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 926ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return ; 927ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 928ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru sid = printContainer(res, group, table_restype, NULL, id, status); 930ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 931ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(isTopLevel) { 932ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid[0] = '\0'; 933ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 934ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius current = res->u.fTable.fFirst; 936ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = 0; 937ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 938ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while (current != NULL) { 939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru res_write_xml(current, sid, language, FALSE, status); 940ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 941ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 942ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 943ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 944ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 945ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i += 1; 946ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru current = current->fNext; 947ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 948ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 949ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 951ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(close_group)); 953ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 954ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(sid); 955ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sid = NULL; 956ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 957ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 958ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querures_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) { 960ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 961ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 962ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return ; 963ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 964ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 965ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (res != NULL) { 966ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch (res->fType) { 967ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_STRING: 968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru string_write_xml (res, id, language, status); 969ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 970ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 971ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_ALIAS: 972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru alias_write_xml (res, id, language, status); 973ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 974ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 975ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_INT_VECTOR: 976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru intvector_write_xml (res, id, language, status); 977ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 978ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 979ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_BINARY: 980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru bin_write_xml (res, id, language, status); 981ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 982ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 983ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_INT: 984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int_write_xml (res, id, language, status); 985ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 986ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 987ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_ARRAY: 988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru array_write_xml (res, id, language, status); 989ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 990ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 991ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru case URES_TABLE: 992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru table_write_xml (res, id, language, isTopLevel, status); 993ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 994ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 995ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: 996ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru break; 997ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 998ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 999ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1000ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_INTERNAL_PROGRAM_ERROR; 1001ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1002ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1003ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 1004ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querubundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, const char* filename, 1005ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *writtenFilename, int writtenFilenameLen, 1006ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* language, const char* outFileName, UErrorCode *status) { 1007ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1008ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* xmlfileName = NULL; 1009ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* outputFileName = NULL; 1010ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* originalFileName = NULL; 1011ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* fileStart = "<file xml:space = \"preserve\" source-language = \""; 1012ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* file1 = "\" datatype = \"x-icu-resource-bundle\" "; 1013ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* file2 = "original = \""; 1014ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* file4 = "\" date = \""; 1015ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* fileEnd = "</file>\n"; 1016ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* headerStart = "<header>\n"; 1017ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* headerEnd = "</header>\n"; 1018ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* bodyStart = "<body>\n"; 1019ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* bodyEnd = "</body>\n"; 1020ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1021ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *tool_start = "<tool"; 1022ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *tool_id = "genrb-" GENRB_VERSION "-icu-" U_ICU_VERSION; 1023ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *tool_name = "genrb"; 1024ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1025ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* temp = NULL; 1026ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char* lang = NULL; 1027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const char* pos = NULL; 1028ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t first, index; 1029ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru time_t currTime; 1030ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char timeBuf[128]; 1031ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1032ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru outDir = outputDir; 1033ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1034ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru srBundle = bundle; 1035ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1036ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru pos = uprv_strrchr(filename, '\\'); 1037ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(pos != NULL) { 1038ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru first = (int32_t)(pos - filename + 1); 1039ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1040ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru first = 0; 1041ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1042ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index = (int32_t)(uprv_strlen(filename) - uprv_strlen(textExt) - first); 1043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru originalFileName = (char *)uprv_malloc(sizeof(char)*index+1); 1044ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(originalFileName, 0, sizeof(char)*index+1); 1045ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strncpy(originalFileName, filename + first, index); 1046ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1047ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uprv_strcmp(originalFileName, srBundle->fLocale) != 0) { 1048ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stdout, "Warning: The file name is not same as the resource name!\n"); 1049ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1050ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1051ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp = originalFileName; 1052c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru originalFileName = (char *)uprv_malloc(sizeof(char)* (uprv_strlen(temp)+uprv_strlen(textExt)) + 1); 1053ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(originalFileName, 0, sizeof(char)* (uprv_strlen(temp)+uprv_strlen(textExt)) + 1); 1054ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(originalFileName, temp); 1055ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(originalFileName, textExt); 1056ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(temp); 1057ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp = NULL; 1058ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1059ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1060ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (language == NULL) { 1061ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* lang = parseFilename(filename, lang); 1062ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (lang == NULL) {*/ 1063ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* now check if locale name is valid or not 1064ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * this is to cater for situation where 1065ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * pegasusServer.txt contains 1066ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 1067ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * en{ 1068ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * .. 1069ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * } 1070ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 1071ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lang = parseFilename(srBundle->fLocale, lang); 1072ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* 1073ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Neither the file name nor the table name inside the 1074ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * txt file contain a valid country and language codes 1075ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * throw an error. 1076ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * pegasusServer.txt contains 1077ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 1078ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * testelements{ 1079ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * .... 1080ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * } 1081ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 1082ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(lang==NULL){ 1083ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr, "Error: The file name and table name do not contain a valid language code. Please use -l option to specify it.\n"); 1084ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru exit(U_ILLEGAL_ARGUMENT_ERROR); 1085ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1086ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* }*/ 1087ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1088c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru lang = (char *)uprv_malloc(sizeof(char)*uprv_strlen(language) +1); 1089ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(lang, 0, sizeof(char)*uprv_strlen(language) +1); 1090ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(lang, language); 1091ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1092ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1093ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outFileName) { 1094c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru outputFileName = (char *)uprv_malloc(sizeof(char)*uprv_strlen(outFileName) + 1); 1095ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(outputFileName, 0, sizeof(char)*uprv_strlen(outFileName) + 1); 1096ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(outputFileName,outFileName); 1097ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1098c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru outputFileName = (char *)uprv_malloc(sizeof(char)*uprv_strlen(srBundle->fLocale) + 1); 1099ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(outputFileName, 0, sizeof(char)*uprv_strlen(srBundle->fLocale) + 1); 1100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(outputFileName,srBundle->fLocale); 1101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outputDir) { 1104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru xmlfileName = (char *)uprv_malloc(sizeof(char)*(uprv_strlen(outputDir) + uprv_strlen(outputFileName) + uprv_strlen(xliffExt) + 1) +1); 1105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(xmlfileName, 0, sizeof(char)*(uprv_strlen(outputDir)+ uprv_strlen(outputFileName) + uprv_strlen(xliffExt) + 1) +1); 1106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1107c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru xmlfileName = (char *)uprv_malloc(sizeof(char)*(uprv_strlen(outputFileName) + uprv_strlen(xliffExt)) +1); 1108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memset(xmlfileName, 0, sizeof(char)*(uprv_strlen(outputFileName) + uprv_strlen(xliffExt)) +1); 1109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outputDir){ 1112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcpy(xmlfileName, outputDir); 1113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outputDir[uprv_strlen(outputDir)-1] !=U_FILE_SEP_CHAR){ 1114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(xmlfileName,U_FILE_SEP_STRING); 1115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(xmlfileName,outputFileName); 1118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strcat(xmlfileName,xliffExt); 1119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (writtenFilename) { 1121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_strncpy(writtenFilename, xmlfileName, writtenFilenameLen); 1122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(*status)) { 1125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru goto cleanup_bundle_write_xml; 1126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru out= T_FileStream_open(xmlfileName,"w"); 1129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(out==NULL){ 1131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_FILE_ACCESS_ERROR; 1132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru goto cleanup_bundle_write_xml; 1133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius write_utf8_file(out, UnicodeString(xmlHeader)); 1135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outputEnc && *outputEnc!='\0'){ 1137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* store the output encoding */ 1138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru enc = outputEnc; 1139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru conv=ucnv_open(enc,status); 1140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)){ 1141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru goto cleanup_bundle_write_xml; 1142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1144fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius write_utf8_file(out, UnicodeString(bundleStart)); 1145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1146fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius write_utf8_file(out, UnicodeString(fileStart)); 1147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* check if lang and language are the same */ 1148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(language != NULL && uprv_strcmp(lang, srBundle->fLocale)!=0){ 1149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fprintf(stderr,"Warning: The top level tag in the resource and language specified are not the same. Please check the input.\n"); 1150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(lang)); 1152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(file1)); 1153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(file2)); 1154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(originalFileName)); 1155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(file4)); 1156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru time(&currTime); 1158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&currTime)); 1159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(timeBuf)); 1160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("\">\n")); 1161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 1163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1164fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius write_utf8_file(out, UnicodeString(headerStart)); 1165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 1167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1169fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius write_utf8_file(out, UnicodeString(tool_start)); 1170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("tool-id", tool_id, (int32_t) uprv_strlen(tool_id)); 1171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printAttribute("tool-name", tool_name, (int32_t) uprv_strlen(tool_name)); 1172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString("/>\n")); 1173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 1175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(headerEnd)); 1178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount += 1; 1181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(bodyStart)); 1183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru res_write_xml(bundle->fRoot, bundle->fLocale, lang, TRUE, status); 1186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount -= 1; 1188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(bodyEnd)); 1191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount--; 1192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(fileEnd)); 1194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru tabCount--; 1195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_tabs(out); 1196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru write_utf8_file(out, UnicodeString(bundleEnd)); 1197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru T_FileStream_close(out); 1198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucnv_close(conv); 1200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querucleanup_bundle_write_xml: 1202c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(originalFileName); 1203c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_free(lang); 1204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(xmlfileName != NULL) { 1205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(xmlfileName); 1206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(outputFileName != NULL){ 1208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_free(outputFileName); 1209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1211