]> git.saurik.com Git - apple/icu.git/blob - icuSources/tools/genrb/reslist.h
ICU-551.30.tar.gz
[apple/icu.git] / icuSources / tools / genrb / reslist.h
1 /*
2 *******************************************************************************
3 *
4 * Copyright (C) 2000-2014, International Business Machines
5 * Corporation and others. All Rights Reserved.
6 *
7 *******************************************************************************
8 *
9 * File reslist.h
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 02/21/00 weiv Creation.
15 *******************************************************************************
16 */
17
18 #ifndef RESLIST_H
19 #define RESLIST_H
20
21 #define KEY_SPACE_SIZE 65536
22 #define RESLIST_MAX_INT_VECTOR 2048
23
24 #include "unicode/utypes.h"
25 #include "unicode/ures.h"
26 #include "unicode/ustring.h"
27 #include "uresdata.h"
28 #include "cmemory.h"
29 #include "cstring.h"
30 #include "unewdata.h"
31 #include "ustr.h"
32
33 U_CDECL_BEGIN
34
35 typedef struct KeyMapEntry {
36 int32_t oldpos, newpos;
37 } KeyMapEntry;
38
39 /* Resource bundle root table */
40 struct SRBRoot {
41 struct SResource *fRoot;
42 char *fLocale;
43 int32_t fIndexLength;
44 int32_t fMaxTableLength;
45 UBool noFallback; /* see URES_ATT_NO_FALLBACK */
46 int8_t fStringsForm; /* default STRINGS_UTF16_V1 */
47 UBool fIsPoolBundle;
48
49 char *fKeys;
50 KeyMapEntry *fKeyMap;
51 int32_t fKeysBottom, fKeysTop;
52 int32_t fKeysCapacity;
53 int32_t fKeysCount;
54 int32_t fLocalKeyLimit; /* key offset < limit fits into URES_TABLE */
55
56 uint16_t *f16BitUnits;
57 int32_t f16BitUnitsCapacity;
58 int32_t f16BitUnitsLength;
59
60 const char *fPoolBundleKeys;
61 int32_t fPoolBundleKeysLength;
62 int32_t fPoolBundleKeysCount;
63 int32_t fPoolChecksum;
64 };
65
66 struct SRBRoot *bundle_open(const struct UString* comment, UBool isPoolBundle, UErrorCode *status);
67 void bundle_write(struct SRBRoot *bundle, const char *outputDir, const char *outputPkg, char *writtenFilename, int writtenFilenameLen, UErrorCode *status);
68
69 /* write a java resource file */
70 void bundle_write_java(struct SRBRoot *bundle, const char *outputDir, const char* outputEnc, char *writtenFilename,
71 int writtenFilenameLen, const char* packageName, const char* bundleName, UErrorCode *status);
72
73 /* write a xml resource file */
74 /* commented by Jing*/
75 /* void bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc,
76 char *writtenFilename, int writtenFilenameLen,UErrorCode *status); */
77
78 /* added by Jing*/
79 void bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outputEnc, const char* rbname,
80 char *writtenFilename, int writtenFilenameLen, const char* language, const char* package, UErrorCode *status);
81
82 void bundle_close(struct SRBRoot *bundle, UErrorCode *status);
83 void bundle_setlocale(struct SRBRoot *bundle, UChar *locale, UErrorCode *status);
84 int32_t bundle_addtag(struct SRBRoot *bundle, const char *tag, UErrorCode *status);
85
86 const char *
87 bundle_getKeyBytes(struct SRBRoot *bundle, int32_t *pLength);
88
89 int32_t
90 bundle_addKeyBytes(struct SRBRoot *bundle, const char *keyBytes, int32_t length, UErrorCode *status);
91
92 void
93 bundle_compactKeys(struct SRBRoot *bundle, UErrorCode *status);
94
95 /* Various resource types */
96
97 /*
98 * Return a unique pointer to a dummy object,
99 * for use in non-error cases when no resource is to be added to the bundle.
100 * (NULL is used in error cases.)
101 */
102 struct SResource* res_none(void);
103
104 struct SResTable {
105 uint32_t fCount;
106 int8_t fType; /* determined by table_write16() for table_preWrite() & table_write() */
107 struct SResource *fFirst;
108 struct SRBRoot *fRoot;
109 };
110
111 struct SResource* table_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status);
112 void table_add(struct SResource *table, struct SResource *res, int linenumber, UErrorCode *status);
113
114 struct SResArray {
115 uint32_t fCount;
116 struct SResource *fFirst;
117 struct SResource *fLast;
118 };
119
120 struct SResource* array_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status);
121 void array_add(struct SResource *array, struct SResource *res, UErrorCode *status);
122
123 struct SResString {
124 struct SResource *fSame; /* used for duplicates */
125 UChar *fChars;
126 int32_t fLength;
127 int32_t fSuffixOffset; /* this string is a suffix of fSame at this offset */
128 int8_t fNumCharsForLength;
129 };
130
131 struct SResource *string_open(struct SRBRoot *bundle, const char *tag, const UChar *value, int32_t len, const struct UString* comment, UErrorCode *status);
132
133 struct SResource *alias_open(struct SRBRoot *bundle, const char *tag, UChar *value, int32_t len, const struct UString* comment, UErrorCode *status);
134
135 struct SResIntVector {
136 uint32_t fCount;
137 uint32_t *fArray;
138 };
139
140 struct SResource* intvector_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status);
141 void intvector_add(struct SResource *intvector, int32_t value, UErrorCode *status);
142
143 struct SResInt {
144 uint32_t fValue;
145 };
146
147 struct SResource *int_open(struct SRBRoot *bundle, const char *tag, int32_t value, const struct UString* comment, UErrorCode *status);
148
149 struct SResBinary {
150 uint32_t fLength;
151 uint8_t *fData;
152 char* fFileName; /* file name for binary or import binary tags if any */
153 };
154
155 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);
156
157 /* Resource place holder */
158
159 struct SResource {
160 int8_t fType; /* nominal type: fRes (when != 0xffffffff) may use subtype */
161 UBool fWritten; /* res_write() can exit early */
162 uint32_t fRes; /* resource item word; 0xffffffff if not known yet */
163 int32_t fKey; /* Index into bundle->fKeys; -1 if no key. */
164 int line; /* used internally to report duplicate keys in tables */
165 struct SResource *fNext; /*This is for internal chaining while building*/
166 struct UString fComment;
167 union {
168 struct SResTable fTable;
169 struct SResArray fArray;
170 struct SResString fString;
171 struct SResIntVector fIntVector;
172 struct SResInt fIntValue;
173 struct SResBinary fBinaryValue;
174 } u;
175 };
176
177 const char *
178 res_getKeyString(const struct SRBRoot *bundle, const struct SResource *res, char temp[8]);
179
180 void res_close(struct SResource *res);
181
182 void setIncludeCopyright(UBool val);
183 UBool getIncludeCopyright(void);
184
185 void setFormatVersion(int32_t formatVersion);
186
187 void setUsePoolBundle(UBool use);
188
189 /* in wrtxml.cpp */
190 uint32_t computeCRC(char *ptr, uint32_t len, uint32_t lastcrc);
191
192 U_CDECL_END
193 #endif /* #ifndef RESLIST_H */