os/textandloc/fontservices/textshaperplugin/IcuSource/common/uresimp.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2 **********************************************************************
     3 *   Copyright (C) 2000-2005, International Business Machines
     4 *   Corporation and others.  All Rights Reserved.
     5 **********************************************************************
     6 */
     7 
     8 #ifndef URESIMP_H
     9 #define URESIMP_H
    10 
    11 #include "unicode/ures.h"
    12 
    13 #include "uresdata.h"
    14 
    15 #define kRootLocaleName         "root"
    16 
    17 /*
    18  The default minor version and the version separator must be exactly one
    19  character long.
    20 */
    21 
    22 #define kDefaultMinorVersion    "0"
    23 #define kVersionSeparator       "."
    24 #define kVersionTag             "Version"
    25 
    26 #define MAGIC1 19700503
    27 #define MAGIC2 19641227
    28 
    29 #define URES_MAX_ALIAS_LEVEL 256
    30 #define URES_MAX_BUFFER_SIZE 256
    31 
    32 /*
    33 enum UResEntryType {
    34     ENTRY_OK = 0,
    35     ENTRY_GOTO_ROOT = 1,
    36     ENTRY_GOTO_DEFAULT = 2,
    37     ENTRY_INVALID = 3
    38 };
    39 
    40 typedef enum UResEntryType UResEntryType;
    41 */
    42 
    43 struct UResourceDataEntry;
    44 typedef struct UResourceDataEntry UResourceDataEntry;
    45 
    46 struct UResourceDataEntry {
    47     char *fName; /* name of the locale for bundle - still to decide whether it is original or fallback */
    48     char *fPath; /* path to bundle - used for distinguishing between resources with the same name */
    49     uint32_t fCountExisting; /* how much is this resource used */
    50     ResourceData fData; /* data for low level access */
    51     UResourceDataEntry *fParent; /*next resource in fallback chain*/
    52 /*    UResEntryType fStatus;*/
    53     UErrorCode fBogus;
    54     int32_t fHashKey; /* for faster access in the hashtable */
    55 };
    56 
    57 #define RES_BUFSIZE 64
    58 #define RES_PATH_SEPARATOR   '/'
    59 #define RES_PATH_SEPARATOR_S   "/"
    60 
    61 struct UResourceBundle {
    62     const char *fKey; /*tag*/
    63     UResourceDataEntry *fData; /*for low-level access*/
    64     char *fVersion;
    65     char *fResPath; /* full path to the resource: "zh_TW/CollationElements/Sequence" */
    66     char fResBuf[RES_BUFSIZE];
    67     int32_t fResPathLen;
    68     UBool fHasFallback;
    69     UBool fIsTopLevel;
    70     uint32_t fMagic1;   /* For determining if it's a stack object */
    71     uint32_t fMagic2;   /* For determining if it's a stack object */
    72     int32_t fIndex;
    73     int32_t fSize;
    74     ResourceData fResData;
    75     Resource fRes;
    76 
    77     UResourceDataEntry *fTopLevelData; /* for getting the valid locale */
    78     const UResourceBundle *fParentRes; /* needed to get the actual locale for a child resource */
    79 
    80 };
    81 
    82 U_CAPI void U_EXPORT2 ures_initStackObject(UResourceBundle* resB);
    83 
    84 /* Some getters used by the copy constructor */
    85 U_CFUNC const char* ures_getName(const UResourceBundle* resB);
    86 U_CFUNC const char* ures_getPath(const UResourceBundle* resB);
    87 U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd);
    88 /*U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd);*/
    89 U_CFUNC void ures_freeResPath(UResourceBundle *resB);
    90 
    91 /* Candidates for export */
    92 U_CFUNC UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *original, UErrorCode *status);
    93 
    94 /**
    95  * Returns a resource that can be located using the pathToResource argument. One needs optional package, locale
    96  * and path inside the locale, for example: "/myData/en/zoneStrings/3". Keys and indexes are supported. Keys
    97  * need to reference data in named structures, while indexes can reference both named and anonymous resources.
    98  * Features a fill-in parameter. 
    99  * 
   100  * Note, this function does NOT have a syntax for specifying items within a tree.  May want to consider a
   101  * syntax that delineates between package/tree and resource.  
   102  *
   103  * @param pathToResource    a path that will lead to the requested resource
   104  * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be deleted by the caller.
   105  *                          Alternatively, you can supply a struct to be filled by this function.
   106  * @param status            fills in the outgoing error code.
   107  * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it
   108  * @draft ICU 2.2
   109  */
   110 U_CAPI UResourceBundle* U_EXPORT2
   111 ures_findResource(const char* pathToResource, 
   112                   UResourceBundle *fillIn, UErrorCode *status); 
   113 
   114 /**
   115  * Returns a sub resource that can be located using the pathToResource argument. One needs a path inside 
   116  * the supplied resource, for example, if you have "en_US" resource bundle opened, you might ask for
   117  * "zoneStrings/3". Keys and indexes are supported. Keys
   118  * need to reference data in named structures, while indexes can reference both 
   119  * named and anonymous resources.
   120  * Features a fill-in parameter. 
   121  *
   122  * @param resourceBundle    a resource
   123  * @param pathToResource    a path that will lead to the requested resource
   124  * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be deleted by the caller.
   125  *                          Alternatively, you can supply a struct to be filled by this function.
   126  * @param status            fills in the outgoing error code.
   127  * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it
   128  * @draft ICU 2.2
   129  */
   130 U_CAPI UResourceBundle* U_EXPORT2
   131 ures_findSubResource(const UResourceBundle *resB, 
   132                      char* pathToResource, 
   133                      UResourceBundle *fillIn, UErrorCode *status);
   134 
   135 /**
   136  * Returns a functionally equivalent locale (considering keywords) for the specified keyword.
   137  * @param result fillin for the equivalent locale
   138  * @param resultCapacity capacity of the fillin buffer
   139  * @param path path to the tree, or NULL for ICU data
   140  * @param resName top level resource. Example: "collations"
   141  * @param keyword locale keyword. Example: "collation"
   142  * @param locid The requested locale
   143  * @param isAvailable If non-null, pointer to fillin parameter that indicates whether the 
   144  * requested locale was available. The locale is defined as 'available' if it physically 
   145  * exists within the specified tree.
   146  * @param omitDefault if TRUE, omit keyword and value if default. 'de_DE\@collation=standard' -> 'de_DE'
   147  * @param status error code
   148  * @return  the actual buffer size needed for the full locale.  If it's greater 
   149  * than resultCapacity, the returned full name will be truncated and an error code will be returned.
   150  * @internal ICU 3.0
   151  */
   152 U_INTERNAL int32_t U_EXPORT2
   153 ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, 
   154                              const char *path, const char *resName, const char *keyword, const char *locid,
   155                              UBool *isAvailable, UBool omitDefault, UErrorCode *status);
   156 
   157 /**
   158  * Given a tree path and keyword, return a string enumeration of all possible values for that keyword.
   159  * @param path path to the tree, or NULL for ICU data
   160  * @param keyword a particular keyword to consider, must match a top level resource name 
   161  * within the tree.
   162  * @param status error code
   163  * @internal ICU 3.0
   164  */
   165 U_INTERNAL UEnumeration* U_EXPORT2
   166 ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status);
   167 
   168 #endif /*URESIMP_H*/