| Index: source/common/uresdata.h
|
| diff --git a/source/common/uresdata.h b/source/common/uresdata.h
|
| index 55d04e665f93b4b7d03ce65eabf79b1a696fe403..ff69dd48374150465ba7874d4e6cd070f45082b0 100644
|
| --- a/source/common/uresdata.h
|
| +++ b/source/common/uresdata.h
|
| @@ -1,9 +1,7 @@
|
| /*
|
| ******************************************************************************
|
| -* *
|
| -* Copyright (C) 1999-2012, International Business Machines *
|
| -* Corporation and others. All Rights Reserved. *
|
| -* *
|
| +* Copyright (C) 1999-2015, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| ******************************************************************************
|
| * file name: uresdata.h
|
| * encoding: US-ASCII
|
| @@ -51,6 +49,8 @@ typedef enum {
|
| * All values are URES_STRING_V2 strings.
|
| */
|
| URES_ARRAY16=9
|
| +
|
| + /* Resource type 15 is not defined but effectively used by RES_BOGUS=0xffffffff. */
|
| } UResInternalType;
|
|
|
| /*
|
| @@ -61,6 +61,7 @@ typedef enum {
|
| typedef uint32_t Resource;
|
|
|
| #define RES_BOGUS 0xffffffff
|
| +#define RES_MAX_OFFSET 0x0fffffff
|
|
|
| #define RES_GET_TYPE(res) ((int32_t)((res)>>28UL))
|
| #define RES_GET_OFFSET(res) ((res)&0x0fffffff)
|
| @@ -84,22 +85,48 @@ typedef uint32_t Resource;
|
|
|
| /* indexes[] value names; indexes are generally 32-bit (Resource) indexes */
|
| enum {
|
| - URES_INDEX_LENGTH, /* [0] contains URES_INDEX_TOP==the length of indexes[];
|
| - * formatVersion==1: all bits contain the length of indexes[]
|
| - * but the length is much less than 0xff;
|
| - * formatVersion>1:
|
| - * only bits 7..0 contain the length of indexes[],
|
| - * bits 31..8 are reserved and set to 0 */
|
| - URES_INDEX_KEYS_TOP, /* [1] contains the top of the key strings, */
|
| - /* same as the bottom of resources or UTF-16 strings, rounded up */
|
| - URES_INDEX_RESOURCES_TOP, /* [2] contains the top of all resources */
|
| - URES_INDEX_BUNDLE_TOP, /* [3] contains the top of the bundle, */
|
| - /* in case it were ever different from [2] */
|
| - URES_INDEX_MAX_TABLE_LENGTH,/* [4] max. length of any table */
|
| - URES_INDEX_ATTRIBUTES, /* [5] attributes bit set, see URES_ATT_* (new in formatVersion 1.2) */
|
| - URES_INDEX_16BIT_TOP, /* [6] top of the 16-bit units (UTF-16 string v2 UChars, URES_TABLE16, URES_ARRAY16),
|
| - * rounded up (new in formatVersion 2.0, ICU 4.4) */
|
| - URES_INDEX_POOL_CHECKSUM, /* [7] checksum of the pool bundle (new in formatVersion 2.0, ICU 4.4) */
|
| + /**
|
| + * [0] contains the length of indexes[]
|
| + * which is at most URES_INDEX_TOP of the latest format version
|
| + *
|
| + * formatVersion==1: all bits contain the length of indexes[]
|
| + * but the length is much less than 0xff;
|
| + * formatVersion>1:
|
| + * only bits 7..0 contain the length of indexes[],
|
| + * bits 31..8 are reserved and set to 0
|
| + * formatVersion>=3:
|
| + * bits 31..8 poolStringIndexLimit bits 23..0
|
| + */
|
| + URES_INDEX_LENGTH,
|
| + /**
|
| + * [1] contains the top of the key strings,
|
| + * same as the bottom of resources or UTF-16 strings, rounded up
|
| + */
|
| + URES_INDEX_KEYS_TOP,
|
| + /** [2] contains the top of all resources */
|
| + URES_INDEX_RESOURCES_TOP,
|
| + /**
|
| + * [3] contains the top of the bundle,
|
| + * in case it were ever different from [2]
|
| + */
|
| + URES_INDEX_BUNDLE_TOP,
|
| + /** [4] max. length of any table */
|
| + URES_INDEX_MAX_TABLE_LENGTH,
|
| + /**
|
| + * [5] attributes bit set, see URES_ATT_* (new in formatVersion 1.2)
|
| + *
|
| + * formatVersion>=3:
|
| + * bits 31..16 poolStringIndex16Limit
|
| + * bits 15..12 poolStringIndexLimit bits 27..24
|
| + */
|
| + URES_INDEX_ATTRIBUTES,
|
| + /**
|
| + * [6] top of the 16-bit units (UTF-16 string v2 UChars, URES_TABLE16, URES_ARRAY16),
|
| + * rounded up (new in formatVersion 2.0, ICU 4.4)
|
| + */
|
| + URES_INDEX_16BIT_TOP,
|
| + /** [7] checksum of the pool bundle (new in formatVersion 2.0, ICU 4.4) */
|
| + URES_INDEX_POOL_CHECKSUM,
|
| URES_INDEX_TOP
|
| };
|
|
|
| @@ -126,9 +153,41 @@ enum {
|
| #define URES_ATT_USES_POOL_BUNDLE 4
|
|
|
| /*
|
| - * File format for .res resource bundle files (formatVersion=2, ICU 4.4)
|
| - *
|
| - * New in formatVersion 2 compared with 1.3: -------------
|
| + * File format for .res resource bundle files
|
| + *
|
| + * ICU 56: New in formatVersion 3 compared with 2: -------------
|
| + *
|
| + * Resource bundles can optionally use shared string-v2 values
|
| + * stored in the pool bundle.
|
| + * If so, then the indexes[] contain two new values
|
| + * in previously-unused bits of existing indexes[] slots:
|
| + * - poolStringIndexLimit:
|
| + * String-v2 offsets (in 32-bit Resource words) below this limit
|
| + * point to pool bundle string-v2 values.
|
| + * - poolStringIndex16Limit:
|
| + * Resource16 string-v2 offsets below this limit
|
| + * point to pool bundle string-v2 values.
|
| + * Guarantee: poolStringIndex16Limit <= poolStringIndexLimit
|
| + *
|
| + * The local bundle's poolStringIndexLimit is greater than
|
| + * any pool bundle string index used in the local bundle.
|
| + * The poolStringIndexLimit should not be greater than
|
| + * the maximum possible pool bundle string index.
|
| + *
|
| + * The maximum possible pool bundle string index is the index to the last non-NUL
|
| + * pool string character, due to suffix sharing.
|
| + *
|
| + * In the pool bundle, there is no structure that lists the strings.
|
| + * (The root resource is an empty Table.)
|
| + * If the strings need to be enumerated (as genrb --usePoolBundle does),
|
| + * then iterate through the pool bundle's 16-bit-units array from the beginning.
|
| + * Stop at the end of the array, or when an explicit or implicit string length
|
| + * would lead beyond the end of the array,
|
| + * or when an apparent string is not NUL-terminated.
|
| + * (Future genrb version might terminate the strings with
|
| + * what looks like a large explicit string length.)
|
| + *
|
| + * ICU 4.4: New in formatVersion 2 compared with 1.3: -------------
|
| *
|
| * Three new resource types -- String-v2, Table16 and Array16 -- have their
|
| * values stored in a new array of 16-bit units between the table key strings
|
| @@ -270,8 +329,12 @@ enum {
|
| * at 2-byte offsets from the start of a contiguous 16-bit-unit array between
|
| * the table key strings and the other resources. (new in formatVersion 2/ICU 4.4)
|
| * At offset 0 of that array is a 16-bit zero value for empty 16-bit resources.
|
| + *
|
| * Resource16 values in Table16 and Array16 are 16-bit offsets to String-v2
|
| * resources, with the offsets relative to the start of the 16-bit-units array.
|
| + * Starting with formatVersion 3/ICU 56, if offset<poolStringIndex16Limit
|
| + * then use the pool bundle's 16-bit-units array,
|
| + * otherwise subtract that limit and use the local 16-bit-units array.
|
| *
|
| * Type Name Memory layout of values
|
| * (in parentheses: scalar, non-offset values)
|
| @@ -293,6 +356,12 @@ enum {
|
| * - if first<0xdfff then length=((first-0xdfef)<<16) | second UChar
|
| * - if first==0xdfff then length=((second UChar)<<16) | third UChar
|
| * (stored in the 16-bit-units array; new in formatVersion 2/ICU 4.4)
|
| + *
|
| + * Starting with formatVersion 3/ICU 56, if offset<poolStringIndexLimit
|
| + * then use the pool bundle's 16-bit-units array,
|
| + * otherwise subtract that limit and use the local 16-bit-units array.
|
| + * (Note different limits for Resource16 vs. Resource.)
|
| + *
|
| * 7 Integer: (28-bit offset is integer value)
|
| * 8 Array: int32_t count, Resource[count]
|
| * 9 Array16: uint16_t count, Resource16[count]
|
| @@ -317,6 +386,9 @@ typedef struct {
|
| const char *poolBundleKeys;
|
| Resource rootRes;
|
| int32_t localKeyLimit;
|
| + const uint16_t *poolBundleStrings;
|
| + int32_t poolStringIndexLimit;
|
| + int32_t poolStringIndex16Limit;
|
| UBool noFallback; /* see URES_ATT_NO_FALLBACK */
|
| UBool isPoolBundle;
|
| UBool usesPoolBundle;
|
|
|