1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Copyright (C) 2000-2011, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File reslist.h 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 02/21/00 weiv Creation. 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef RESLIST_H 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RESLIST_H 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define KEY_SPACE_SIZE 65536 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RESLIST_MAX_INT_VECTOR 2048 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ures.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uresdata.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unewdata.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ustr.h" 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "uhash.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct KeyMapEntry { 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t oldpos, newpos; 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} KeyMapEntry; 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Resource bundle root table */ 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SRBRoot { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResource *fRoot; 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char *fLocale; 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fIndexLength; 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fMaxTableLength; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool noFallback; /* see URES_ATT_NO_FALLBACK */ 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int8_t fStringsForm; /* default STRINGS_UTF16_V1 */ 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool fIsPoolBundle; 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char *fKeys; 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho KeyMapEntry *fKeyMap; 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fKeysBottom, fKeysTop; 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fKeysCapacity; 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fKeysCount; 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fLocalKeyLimit; /* key offset < limit fits into URES_TABLE */ 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UHashtable *fStringSet; 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uint16_t *f16BitUnits; 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t f16BitUnitsCapacity; 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t f16BitUnitsLength; 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *fPoolBundleKeys; 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fPoolBundleKeysLength; 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fPoolBundleKeysCount; 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fPoolChecksum; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostruct SRBRoot *bundle_open(const struct UString* comment, UBool isPoolBundle, UErrorCode *status); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid bundle_write(struct SRBRoot *bundle, const char *outputDir, const char *outputPkg, char *writtenFilename, int writtenFilenameLen, UErrorCode *status); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* write a java resource file */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid bundle_write_java(struct SRBRoot *bundle, const char *outputDir, const char* outputEnc, char *writtenFilename, 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int writtenFilenameLen, const char* packageName, const char* bundleName, UErrorCode *status); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* write a xml resource file */ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* commented by Jing*/ 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* void bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *writtenFilename, int writtenFilenameLen,UErrorCode *status); */ 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* added by Jing*/ 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, const char* rbname, 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *writtenFilename, int writtenFilenameLen, const char* language, const char* package, UErrorCode *status); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid bundle_close(struct SRBRoot *bundle, UErrorCode *status); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid bundle_setlocale(struct SRBRoot *bundle, UChar *locale, UErrorCode *status); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t bundle_addtag(struct SRBRoot *bundle, const char *tag, UErrorCode *status); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char * 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehobundle_getKeyBytes(struct SRBRoot *bundle, int32_t *pLength); 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoint32_t 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehobundle_addKeyBytes(struct SRBRoot *bundle, const char *keyBytes, int32_t length, UErrorCode *status); 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehobundle_compactKeys(struct SRBRoot *bundle, UErrorCode *status); 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Various resource types */ 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/* 100c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Return a unique pointer to a dummy object, 101c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * for use in non-error cases when no resource is to be added to the bundle. 102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * (NULL is used in error cases.) 103c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustruct SResource* res_none(void); 105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResTable { 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t fCount; 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int8_t fType; /* determined by table_write16() for table_preWrite() & table_write() */ 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResource *fFirst; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SRBRoot *fRoot; 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostruct SResource* table_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid table_add(struct SResource *table, struct SResource *res, int linenumber, UErrorCode *status); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResArray { 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t fCount; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResource *fFirst; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResource *fLast; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResource* array_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid array_add(struct SResource *array, struct SResource *res, UErrorCode *status); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResString { 12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho struct SResource *fSame; /* used for duplicates */ 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *fChars; 12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fLength; 12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fSuffixOffset; /* this string is a suffix of fSame at this offset */ 13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int8_t fNumCharsForLength; 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostruct SResource *string_open(struct SRBRoot *bundle, const char *tag, const UChar *value, int32_t len, const struct UString* comment, UErrorCode *status); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Remove a string from a bundle and close (delete) it. 13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * The string must not have been added to a table or array yet. 13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * This function only undoes what string_open() did. 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 14050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid bundle_closeString(struct SRBRoot *bundle, struct SResource *string); 14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 142b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostruct SResource *alias_open(struct SRBRoot *bundle, const char *tag, UChar *value, int32_t len, const struct UString* comment, UErrorCode *status); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResIntVector { 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t fCount; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t *fArray; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostruct SResource* intvector_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid intvector_add(struct SResource *intvector, int32_t value, UErrorCode *status); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResInt { 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t fValue; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostruct SResource *int_open(struct SRBRoot *bundle, const char *tag, int32_t value, const struct UString* comment, UErrorCode *status); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResBinary { 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t fLength; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint8_t *fData; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* fFileName; /* file name for binary or import binary tags if any */ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResource *bin_open(struct SRBRoot *bundle, const char *tag, uint32_t length, uint8_t *data, const char* fileName, const struct UString* comment, UErrorCode *status); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Resource place holder */ 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SResource { 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int8_t fType; /* nominal type: fRes (when != 0xffffffff) may use subtype */ 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool fWritten; /* res_write() can exit early */ 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uint32_t fRes; /* resource item word; 0xffffffff if not known yet */ 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t fKey; /* Index into bundle->fKeys; -1 if no key. */ 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int line; /* used internally to report duplicate keys in tables */ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResource *fNext; /*This is for internal chaining while building*/ 175c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru struct UString fComment; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru union { 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResTable fTable; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResArray fArray; 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResString fString; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResIntVector fIntVector; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResInt fIntValue; 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct SResBinary fBinaryValue; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } u; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char * 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehores_getKeyString(const struct SRBRoot *bundle, const struct SResource *res, char temp[8]); 18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 189c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid res_close(struct SResource *res); 19050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid setIncludeCopyright(UBool val); 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool getIncludeCopyright(void); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid setFormatVersion(int32_t formatVersion); 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid setUsePoolBundle(UBool use); 19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* in wrtxml.cpp */ 19950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouint32_t computeCRC(char *ptr, uint32_t len, uint32_t lastcrc); 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #ifndef RESLIST_H */ 203