Home | History | Annotate | Download | only in genrb
      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 */
    194