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