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