Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:13:13

0001 // © 2016 and later: Unicode, Inc. and others.
0002 // License & terms of use: http://www.unicode.org/copyright.html
0003 /*
0004 *****************************************************************************************
0005 * Copyright (C) 2014, International Business Machines
0006 * Corporation and others. All Rights Reserved.
0007 *****************************************************************************************
0008 */
0009 
0010 #ifndef UREGION_H
0011 #define UREGION_H
0012 
0013 #include "unicode/utypes.h"
0014 #include "unicode/uenum.h"
0015 
0016 /**
0017  * \file
0018  * \brief C API: URegion (territory containment and mapping)
0019  *
0020  * URegion objects represent data associated with a particular Unicode Region Code, also known as a 
0021  * Unicode Region Subtag, which is defined based upon the BCP 47 standard. These include:
0022  * * Two-letter codes defined by ISO 3166-1, with special LDML treatment of certain private-use or
0023  *   reserved codes;
0024  * * A subset of 3-digit numeric codes defined by UN M.49.
0025  * URegion objects can also provide mappings to and from additional codes. There are different types
0026  * of regions that are important to distinguish:
0027  * <p>
0028  * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or 
0029  * selected economic and other grouping" as defined in UN M.49. These are typically 3-digit codes,
0030  * but contain some 2-letter codes for LDML extensions, such as "QO" for Outlying Oceania.
0031  * Macroregions are represented in ICU by one of three region types: WORLD (code 001),
0032  * CONTINENTS (regions contained directly by WORLD), and SUBCONTINENTS (regions contained directly
0033  * by a continent ).
0034  * <p>
0035  * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also
0036  * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code 
0037  * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate 
0038  * codes. The codes are typically 2-letter codes aligned with ISO 3166, but BCP47 allows for the use
0039  * of 3-digit codes in the future.
0040  * <p>
0041  * UNKNOWN - The code ZZ is defined by Unicode LDML for use in indicating that region is unknown,
0042  * or that the value supplied as a region was invalid.
0043  * <p>
0044  * DEPRECATED - Region codes that have been defined in the past but are no longer in modern usage,
0045  * usually due to a country splitting into multiple territories or changing its name.
0046  * <p>
0047  * GROUPING - A widely understood grouping of territories that has a well defined membership such
0048  * that a region code has been assigned for it.  Some of these are UN M.49 codes that don't fall into 
0049  * the world/continent/sub-continent hierarchy, while others are just well-known groupings that have
0050  * their own region code. Region "EU" (European Union) is one such region code that is a grouping.
0051  * Groupings will never be returned by the uregion_getContainingRegion, since a different type of region
0052  * (WORLD, CONTINENT, or SUBCONTINENT) will always be the containing region instead.
0053  *
0054  * URegion objects are const/immutable, owned and maintained by ICU itself, so there are not functions
0055  * to open or close them.
0056  */
0057 
0058 /**
0059  * URegionType is an enumeration defining the different types of regions.  Current possible
0060  * values are URGN_WORLD, URGN_CONTINENT, URGN_SUBCONTINENT, URGN_TERRITORY, URGN_GROUPING,
0061  * URGN_DEPRECATED, and URGN_UNKNOWN.
0062  * 
0063  * @stable ICU 51 
0064  */
0065 typedef enum URegionType {
0066     /**
0067      * Type representing the unknown region.
0068      * @stable ICU 51 
0069      */
0070     URGN_UNKNOWN,
0071 
0072     /**
0073      * Type representing a territory.
0074      * @stable ICU 51 
0075      */
0076     URGN_TERRITORY,
0077 
0078     /**
0079      * Type representing the whole world.
0080      * @stable ICU 51 
0081      */
0082     URGN_WORLD,
0083 
0084     /**
0085      * Type representing a continent.
0086      * @stable ICU 51 
0087      */
0088     URGN_CONTINENT,
0089 
0090     /**
0091      * Type representing a sub-continent.
0092      * @stable ICU 51 
0093      */
0094     URGN_SUBCONTINENT,
0095 
0096     /**
0097      * Type representing a grouping of territories that is not to be used in
0098      * the normal WORLD/CONTINENT/SUBCONTINENT/TERRITORY containment tree.
0099      * @stable ICU 51 
0100      */
0101     URGN_GROUPING,
0102 
0103     /**
0104      * Type representing a region whose code has been deprecated, usually
0105      * due to a country splitting into multiple territories or changing its name.
0106      * @stable ICU 51 
0107      */
0108     URGN_DEPRECATED,
0109 
0110 #ifndef U_HIDE_DEPRECATED_API
0111     /**
0112      * One more than the highest normal URegionType value.
0113      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
0114      */
0115     URGN_LIMIT
0116 #endif  /* U_HIDE_DEPRECATED_API */
0117 } URegionType;
0118 
0119 #if !UCONFIG_NO_FORMATTING
0120 
0121 /**
0122  * Opaque URegion object for use in C programs.
0123  * @stable ICU 52
0124  */
0125 struct URegion;
0126 typedef struct URegion URegion; /**< @stable ICU 52 */
0127 
0128 /**
0129  * Returns a pointer to a URegion for the specified region code: A 2-letter or 3-letter ISO 3166
0130  * code, UN M.49 numeric code (superset of ISO 3166 numeric codes), or other valid Unicode Region
0131  * Code as defined by the LDML specification. The code will be canonicalized internally. If the
0132  * region code is NULL or not recognized, the appropriate error code will be set
0133  * (U_ILLEGAL_ARGUMENT_ERROR).
0134  * @stable ICU 52
0135  */
0136 U_CAPI const URegion* U_EXPORT2
0137 uregion_getRegionFromCode(const char *regionCode, UErrorCode *status);
0138 
0139 /**
0140  * Returns a pointer to a URegion for the specified numeric region code. If the numeric region
0141  * code is not recognized, the appropriate error code will be set (U_ILLEGAL_ARGUMENT_ERROR).
0142  * @stable ICU 52
0143  */
0144 U_CAPI const URegion* U_EXPORT2
0145 uregion_getRegionFromNumericCode (int32_t code, UErrorCode *status);
0146 
0147 /**
0148  * Returns an enumeration over the canonical codes of all known regions that match the given type.
0149  * The enumeration must be closed with with uenum_close().
0150  * @stable ICU 52
0151  */
0152 U_CAPI UEnumeration* U_EXPORT2
0153 uregion_getAvailable(URegionType type, UErrorCode *status);
0154 
0155 /**
0156  * Returns true if the specified uregion is equal to the specified otherRegion.
0157  * @stable ICU 52
0158  */
0159 U_CAPI UBool U_EXPORT2
0160 uregion_areEqual(const URegion* uregion, const URegion* otherRegion);
0161 
0162 /**
0163  * Returns a pointer to the URegion that contains the specified uregion. Returns NULL if the
0164  * specified uregion is code "001" (World) or "ZZ" (Unknown region). For example, calling
0165  * this method with region "IT" (Italy) returns the URegion for "039" (Southern Europe).
0166  * @stable ICU 52
0167  */
0168 U_CAPI const URegion* U_EXPORT2
0169 uregion_getContainingRegion(const URegion* uregion);
0170 
0171 /**
0172  * Return a pointer to the URegion that geographically contains this uregion and matches the
0173  * specified type, moving multiple steps up the containment chain if necessary. Returns NULL if no
0174  * containing region can be found that matches the specified type. Will return NULL if URegionType
0175  * is URGN_GROUPING, URGN_DEPRECATED, or URGN_UNKNOWN which are not appropriate for this API.
0176  * For example, calling this method with uregion "IT" (Italy) for type URGN_CONTINENT returns the
0177  * URegion "150" (Europe).
0178  * @stable ICU 52
0179  */
0180 U_CAPI const URegion* U_EXPORT2
0181 uregion_getContainingRegionOfType(const URegion* uregion, URegionType type);
0182 
0183 /**
0184  * Return an enumeration over the canonical codes of all the regions that are immediate children
0185  * of the specified uregion in the region hierarchy. These returned regions could be either macro
0186  * regions, territories, or a mixture of the two, depending on the containment data as defined in
0187  * CLDR. This API returns NULL if this uregion doesn't have any sub-regions. For example, calling
0188  * this function for uregion "150" (Europe) returns an enumeration containing the various
0189  * sub-regions of Europe: "039" (Southern Europe), "151" (Eastern Europe), "154" (Northern Europe),
0190  * and "155" (Western Europe). The enumeration must be closed with with uenum_close().
0191  * @stable ICU 52
0192  */
0193 U_CAPI UEnumeration* U_EXPORT2
0194 uregion_getContainedRegions(const URegion* uregion, UErrorCode *status);
0195 
0196 /**
0197  * Returns an enumeration over the canonical codes of all the regions that are children of the
0198  * specified uregion anywhere in the region hierarchy and match the given type. This API may return
0199  * an empty enumeration if this uregion doesn't have any sub-regions that match the given type.
0200  * For example, calling this method with region "150" (Europe) and type URGN_TERRITORY" returns an
0201  * enumeration containing all the territories in Europe: "FR" (France), "IT" (Italy), "DE" (Germany),
0202  * etc. The enumeration must be closed with with uenum_close().
0203  * @stable ICU 52
0204  */
0205 U_CAPI UEnumeration* U_EXPORT2
0206 uregion_getContainedRegionsOfType(const URegion* uregion, URegionType type, UErrorCode *status);
0207 
0208 /**
0209  * Returns true if the specified uregion contains the specified otherRegion anywhere in the region
0210  * hierarchy.
0211  * @stable ICU 52
0212  */
0213 U_CAPI UBool U_EXPORT2
0214 uregion_contains(const URegion* uregion, const URegion* otherRegion);
0215 
0216 /**
0217  * If the specified uregion is deprecated, returns an enumeration over the canonical codes of the
0218  * regions that are the preferred replacement regions for the specified uregion. If the specified
0219  * uregion is not deprecated, returns NULL. For example, calling this method with uregion
0220  * "SU" (Soviet Union) returns a list of the regions containing "RU" (Russia), "AM" (Armenia),
0221  * "AZ" (Azerbaijan), etc... The enumeration must be closed with with uenum_close().
0222  * @stable ICU 52
0223  */
0224 U_CAPI UEnumeration* U_EXPORT2
0225 uregion_getPreferredValues(const URegion* uregion, UErrorCode *status);
0226 
0227 /**
0228  * Returns the specified uregion's canonical code.
0229  * @stable ICU 52
0230  */
0231 U_CAPI const char* U_EXPORT2
0232 uregion_getRegionCode(const URegion* uregion);
0233 
0234 /**
0235  * Returns the specified uregion's numeric code, or a negative value if there is no numeric code
0236  * for the specified uregion.
0237  * @stable ICU 52
0238  */
0239 U_CAPI int32_t U_EXPORT2
0240 uregion_getNumericCode(const URegion* uregion);
0241 
0242 /**
0243  * Returns the URegionType of the specified uregion.
0244  * @stable ICU 52
0245  */
0246 U_CAPI URegionType U_EXPORT2
0247 uregion_getType(const URegion* uregion);
0248 
0249 
0250 #endif /* #if !UCONFIG_NO_FORMATTING */
0251 
0252 #endif