X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b75a7d8f3b4adbae880cab104ce2c6a50eee4db2..b25be06635768807f8f693286fa73bb2297bb06c:/icuSources/tools/genrb/reslist.h diff --git a/icuSources/tools/genrb/reslist.h b/icuSources/tools/genrb/reslist.h index 07993723..52737afd 100644 --- a/icuSources/tools/genrb/reslist.h +++ b/icuSources/tools/genrb/reslist.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2009, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -18,7 +18,7 @@ #ifndef RESLIST_H #define RESLIST_H -#define KEY_SPACE_SIZE 65532 +#define KEY_SPACE_SIZE 65536 #define RESLIST_MAX_INT_VECTOR 2048 #include "unicode/utypes.h" @@ -28,19 +28,44 @@ #include "cmemory.h" #include "cstring.h" #include "unewdata.h" +#include "ustr.h" +#include "uhash.h" U_CDECL_BEGIN +typedef struct KeyMapEntry { + int32_t oldpos, newpos; +} KeyMapEntry; + /* Resource bundle root table */ struct SRBRoot { + struct SResource *fRoot; char *fLocale; - uint32_t fKeyPoint; + int32_t fIndexLength; + int32_t fMaxTableLength; + UBool noFallback; /* see URES_ATT_NO_FALLBACK */ + int8_t fStringsForm; /* default STRINGS_UTF16_V1 */ + UBool fIsPoolBundle; + char *fKeys; - int32_t fCount; - struct SResource *fRoot; + KeyMapEntry *fKeyMap; + int32_t fKeysBottom, fKeysTop; + int32_t fKeysCapacity; + int32_t fKeysCount; + int32_t fLocalKeyLimit; /* key offset < limit fits into URES_TABLE */ + + UHashtable *fStringSet; + uint16_t *f16BitUnits; + int32_t f16BitUnitsCapacity; + int32_t f16BitUnitsLength; + + const char *fPoolBundleKeys; + int32_t fPoolBundleKeysLength; + int32_t fPoolBundleKeysCount; + int32_t fPoolChecksum; }; -struct SRBRoot *bundle_open(UErrorCode *status); +struct SRBRoot *bundle_open(const struct UString* comment, UBool isPoolBundle, UErrorCode *status); void bundle_write(struct SRBRoot *bundle, const char *outputDir, const char *outputPkg, char *writtenFilename, int writtenFilenameLen, UErrorCode *status); /* write a java resource file */ @@ -58,58 +83,77 @@ void bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* void bundle_close(struct SRBRoot *bundle, UErrorCode *status); void bundle_setlocale(struct SRBRoot *bundle, UChar *locale, UErrorCode *status); -uint16_t bundle_addtag(struct SRBRoot *bundle, const char *tag, UErrorCode *status); +int32_t bundle_addtag(struct SRBRoot *bundle, const char *tag, UErrorCode *status); + +const char * +bundle_getKeyBytes(struct SRBRoot *bundle, int32_t *pLength); + +int32_t +bundle_addKeyBytes(struct SRBRoot *bundle, const char *keyBytes, int32_t length, UErrorCode *status); + +void +bundle_compactKeys(struct SRBRoot *bundle, UErrorCode *status); /* Various resource types */ +/* + * Return a unique pointer to a dummy object, + * for use in non-error cases when no resource is to be added to the bundle. + * (NULL is used in error cases.) + */ +struct SResource* res_none(void); + struct SResTable { - uint16_t fCount; - uint32_t fChildrenSize; + uint32_t fCount; + int8_t fType; /* determined by table_write16() for table_preWrite() & table_write() */ struct SResource *fFirst; struct SRBRoot *fRoot; }; -struct SResource* table_open(struct SRBRoot *bundle, char *tag, UErrorCode *status); -void table_close(struct SResource *table, UErrorCode *status); +struct SResource* table_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); void table_add(struct SResource *table, struct SResource *res, int linenumber, UErrorCode *status); struct SResArray { uint32_t fCount; - uint32_t fChildrenSize; struct SResource *fFirst; struct SResource *fLast; }; -struct SResource* array_open(struct SRBRoot *bundle, char *tag, UErrorCode *status); -void array_close(struct SResource *array, UErrorCode *status); +struct SResource* array_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); void array_add(struct SResource *array, struct SResource *res, UErrorCode *status); struct SResString { - uint32_t fLength; + struct SResource *fSame; /* used for duplicates */ UChar *fChars; + int32_t fLength; + int32_t fSuffixOffset; /* this string is a suffix of fSame at this offset */ + int8_t fNumCharsForLength; }; -struct SResource *string_open(struct SRBRoot *bundle, char *tag, const UChar *value, int32_t len, UErrorCode *status); -void string_close(struct SResource *string, UErrorCode *status); +struct SResource *string_open(struct SRBRoot *bundle, char *tag, const UChar *value, int32_t len, const struct UString* comment, UErrorCode *status); + +/** + * Remove a string from a bundle and close (delete) it. + * The string must not have been added to a table or array yet. + * This function only undoes what string_open() did. + */ +void bundle_closeString(struct SRBRoot *bundle, struct SResource *string); -struct SResource *alias_open(struct SRBRoot *bundle, char *tag, UChar *value, int32_t len, UErrorCode *status); -void alias_close(struct SResource *string, UErrorCode *status); +struct SResource *alias_open(struct SRBRoot *bundle, char *tag, UChar *value, int32_t len, const struct UString* comment, UErrorCode *status); struct SResIntVector { uint32_t fCount; uint32_t *fArray; }; -struct SResource* intvector_open(struct SRBRoot *bundle, char *tag, UErrorCode *status); -void intvector_close(struct SResource *intvector, UErrorCode *status); +struct SResource* intvector_open(struct SRBRoot *bundle, char *tag, const struct UString* comment, UErrorCode *status); void intvector_add(struct SResource *intvector, int32_t value, UErrorCode *status); struct SResInt { uint32_t fValue; }; -struct SResource *int_open(struct SRBRoot *bundle, char *tag, int32_t value, UErrorCode *status); -void int_close(struct SResource *intres, UErrorCode *status); +struct SResource *int_open(struct SRBRoot *bundle, char *tag, int32_t value, const struct UString* comment, UErrorCode *status); struct SResBinary { uint32_t fLength; @@ -117,17 +161,18 @@ struct SResBinary { char* fFileName; /* file name for binary or import binary tags if any */ }; -struct SResource *bin_open(struct SRBRoot *bundle, const char *tag, uint32_t length, uint8_t *data, const char* fileName, UErrorCode *status); -void bin_close(struct SResource *binres, UErrorCode *status); +struct SResource *bin_open(struct SRBRoot *bundle, const char *tag, uint32_t length, uint8_t *data, const char* fileName, const struct UString* comment, UErrorCode *status); /* Resource place holder */ struct SResource { - UResType fType; - uint16_t fKey; - uint32_t fSize; /* Size in bytes outside the header part */ - int line; /* used internally to report duplicate keys in tables */ + int8_t fType; /* nominal type: fRes (when != 0xffffffff) may use subtype */ + UBool fWritten; /* res_write() can exit early */ + uint32_t fRes; /* resource item word; 0xffffffff if not known yet */ + int32_t fKey; /* Index into bundle->fKeys; -1 if no key. */ + int line; /* used internally to report duplicate keys in tables */ struct SResource *fNext; /*This is for internal chaining while building*/ + struct UString fComment; union { struct SResTable fTable; struct SResArray fArray; @@ -138,9 +183,20 @@ struct SResource { } u; }; -void res_close(struct SResource *res, UErrorCode *status); +const char * +res_getKeyString(const struct SRBRoot *bundle, const struct SResource *res, char temp[8]); + +void res_close(struct SResource *res); + void setIncludeCopyright(UBool val); UBool getIncludeCopyright(void); +void setFormatVersion(int32_t formatVersion); + +void setUsePoolBundle(UBool use); + +/* in wrtxml.cpp */ +uint32_t computeCRC(char *ptr, uint32_t len, uint32_t lastcrc); + U_CDECL_END #endif /* #ifndef RESLIST_H */