annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/unicode/uregion.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 // © 2016 and later: Unicode, Inc. and others.
jpayne@69 2 // License & terms of use: http://www.unicode.org/copyright.html
jpayne@69 3 /*
jpayne@69 4 *****************************************************************************************
jpayne@69 5 * Copyright (C) 2014, International Business Machines
jpayne@69 6 * Corporation and others. All Rights Reserved.
jpayne@69 7 *****************************************************************************************
jpayne@69 8 */
jpayne@69 9
jpayne@69 10 #ifndef UREGION_H
jpayne@69 11 #define UREGION_H
jpayne@69 12
jpayne@69 13 #include "unicode/utypes.h"
jpayne@69 14 #include "unicode/uenum.h"
jpayne@69 15
jpayne@69 16 /**
jpayne@69 17 * \file
jpayne@69 18 * \brief C API: URegion (territory containment and mapping)
jpayne@69 19 *
jpayne@69 20 * URegion objects represent data associated with a particular Unicode Region Code, also known as a
jpayne@69 21 * Unicode Region Subtag, which is defined based upon the BCP 47 standard. These include:
jpayne@69 22 * * Two-letter codes defined by ISO 3166-1, with special LDML treatment of certain private-use or
jpayne@69 23 * reserved codes;
jpayne@69 24 * * A subset of 3-digit numeric codes defined by UN M.49.
jpayne@69 25 * URegion objects can also provide mappings to and from additional codes. There are different types
jpayne@69 26 * of regions that are important to distinguish:
jpayne@69 27 * <p>
jpayne@69 28 * Macroregion - A code for a "macro geographical (continental) region, geographical sub-region, or
jpayne@69 29 * selected economic and other grouping" as defined in UN M.49. These are typically 3-digit codes,
jpayne@69 30 * but contain some 2-letter codes for LDML extensions, such as "QO" for Outlying Oceania.
jpayne@69 31 * Macroregions are represented in ICU by one of three region types: WORLD (code 001),
jpayne@69 32 * CONTINENTS (regions contained directly by WORLD), and SUBCONTINENTS (regions contained directly
jpayne@69 33 * by a continent ).
jpayne@69 34 * <p>
jpayne@69 35 * TERRITORY - A Region that is not a Macroregion. These are typically codes for countries, but also
jpayne@69 36 * include areas that are not separate countries, such as the code "AQ" for Antarctica or the code
jpayne@69 37 * "HK" for Hong Kong (SAR China). Overseas dependencies of countries may or may not have separate
jpayne@69 38 * codes. The codes are typically 2-letter codes aligned with ISO 3166, but BCP47 allows for the use
jpayne@69 39 * of 3-digit codes in the future.
jpayne@69 40 * <p>
jpayne@69 41 * UNKNOWN - The code ZZ is defined by Unicode LDML for use in indicating that region is unknown,
jpayne@69 42 * or that the value supplied as a region was invalid.
jpayne@69 43 * <p>
jpayne@69 44 * DEPRECATED - Region codes that have been defined in the past but are no longer in modern usage,
jpayne@69 45 * usually due to a country splitting into multiple territories or changing its name.
jpayne@69 46 * <p>
jpayne@69 47 * GROUPING - A widely understood grouping of territories that has a well defined membership such
jpayne@69 48 * that a region code has been assigned for it. Some of these are UN M.49 codes that don't fall into
jpayne@69 49 * the world/continent/sub-continent hierarchy, while others are just well-known groupings that have
jpayne@69 50 * their own region code. Region "EU" (European Union) is one such region code that is a grouping.
jpayne@69 51 * Groupings will never be returned by the uregion_getContainingRegion, since a different type of region
jpayne@69 52 * (WORLD, CONTINENT, or SUBCONTINENT) will always be the containing region instead.
jpayne@69 53 *
jpayne@69 54 * URegion objects are const/immutable, owned and maintained by ICU itself, so there are not functions
jpayne@69 55 * to open or close them.
jpayne@69 56 */
jpayne@69 57
jpayne@69 58 /**
jpayne@69 59 * URegionType is an enumeration defining the different types of regions. Current possible
jpayne@69 60 * values are URGN_WORLD, URGN_CONTINENT, URGN_SUBCONTINENT, URGN_TERRITORY, URGN_GROUPING,
jpayne@69 61 * URGN_DEPRECATED, and URGN_UNKNOWN.
jpayne@69 62 *
jpayne@69 63 * @stable ICU 51
jpayne@69 64 */
jpayne@69 65 typedef enum URegionType {
jpayne@69 66 /**
jpayne@69 67 * Type representing the unknown region.
jpayne@69 68 * @stable ICU 51
jpayne@69 69 */
jpayne@69 70 URGN_UNKNOWN,
jpayne@69 71
jpayne@69 72 /**
jpayne@69 73 * Type representing a territory.
jpayne@69 74 * @stable ICU 51
jpayne@69 75 */
jpayne@69 76 URGN_TERRITORY,
jpayne@69 77
jpayne@69 78 /**
jpayne@69 79 * Type representing the whole world.
jpayne@69 80 * @stable ICU 51
jpayne@69 81 */
jpayne@69 82 URGN_WORLD,
jpayne@69 83
jpayne@69 84 /**
jpayne@69 85 * Type representing a continent.
jpayne@69 86 * @stable ICU 51
jpayne@69 87 */
jpayne@69 88 URGN_CONTINENT,
jpayne@69 89
jpayne@69 90 /**
jpayne@69 91 * Type representing a sub-continent.
jpayne@69 92 * @stable ICU 51
jpayne@69 93 */
jpayne@69 94 URGN_SUBCONTINENT,
jpayne@69 95
jpayne@69 96 /**
jpayne@69 97 * Type representing a grouping of territories that is not to be used in
jpayne@69 98 * the normal WORLD/CONTINENT/SUBCONTINENT/TERRITORY containment tree.
jpayne@69 99 * @stable ICU 51
jpayne@69 100 */
jpayne@69 101 URGN_GROUPING,
jpayne@69 102
jpayne@69 103 /**
jpayne@69 104 * Type representing a region whose code has been deprecated, usually
jpayne@69 105 * due to a country splitting into multiple territories or changing its name.
jpayne@69 106 * @stable ICU 51
jpayne@69 107 */
jpayne@69 108 URGN_DEPRECATED,
jpayne@69 109
jpayne@69 110 #ifndef U_HIDE_DEPRECATED_API
jpayne@69 111 /**
jpayne@69 112 * One more than the highest normal URegionType value.
jpayne@69 113 * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
jpayne@69 114 */
jpayne@69 115 URGN_LIMIT
jpayne@69 116 #endif /* U_HIDE_DEPRECATED_API */
jpayne@69 117 } URegionType;
jpayne@69 118
jpayne@69 119 #if !UCONFIG_NO_FORMATTING
jpayne@69 120
jpayne@69 121 /**
jpayne@69 122 * Opaque URegion object for use in C programs.
jpayne@69 123 * @stable ICU 52
jpayne@69 124 */
jpayne@69 125 struct URegion;
jpayne@69 126 typedef struct URegion URegion; /**< @stable ICU 52 */
jpayne@69 127
jpayne@69 128 /**
jpayne@69 129 * Returns a pointer to a URegion for the specified region code: A 2-letter or 3-letter ISO 3166
jpayne@69 130 * code, UN M.49 numeric code (superset of ISO 3166 numeric codes), or other valid Unicode Region
jpayne@69 131 * Code as defined by the LDML specification. The code will be canonicalized internally. If the
jpayne@69 132 * region code is NULL or not recognized, the appropriate error code will be set
jpayne@69 133 * (U_ILLEGAL_ARGUMENT_ERROR).
jpayne@69 134 * @stable ICU 52
jpayne@69 135 */
jpayne@69 136 U_STABLE const URegion* U_EXPORT2
jpayne@69 137 uregion_getRegionFromCode(const char *regionCode, UErrorCode *status);
jpayne@69 138
jpayne@69 139 /**
jpayne@69 140 * Returns a pointer to a URegion for the specified numeric region code. If the numeric region
jpayne@69 141 * code is not recognized, the appropriate error code will be set (U_ILLEGAL_ARGUMENT_ERROR).
jpayne@69 142 * @stable ICU 52
jpayne@69 143 */
jpayne@69 144 U_STABLE const URegion* U_EXPORT2
jpayne@69 145 uregion_getRegionFromNumericCode (int32_t code, UErrorCode *status);
jpayne@69 146
jpayne@69 147 /**
jpayne@69 148 * Returns an enumeration over the canonical codes of all known regions that match the given type.
jpayne@69 149 * The enumeration must be closed with with uenum_close().
jpayne@69 150 * @stable ICU 52
jpayne@69 151 */
jpayne@69 152 U_STABLE UEnumeration* U_EXPORT2
jpayne@69 153 uregion_getAvailable(URegionType type, UErrorCode *status);
jpayne@69 154
jpayne@69 155 /**
jpayne@69 156 * Returns true if the specified uregion is equal to the specified otherRegion.
jpayne@69 157 * @stable ICU 52
jpayne@69 158 */
jpayne@69 159 U_STABLE UBool U_EXPORT2
jpayne@69 160 uregion_areEqual(const URegion* uregion, const URegion* otherRegion);
jpayne@69 161
jpayne@69 162 /**
jpayne@69 163 * Returns a pointer to the URegion that contains the specified uregion. Returns NULL if the
jpayne@69 164 * specified uregion is code "001" (World) or "ZZ" (Unknown region). For example, calling
jpayne@69 165 * this method with region "IT" (Italy) returns the URegion for "039" (Southern Europe).
jpayne@69 166 * @stable ICU 52
jpayne@69 167 */
jpayne@69 168 U_STABLE const URegion* U_EXPORT2
jpayne@69 169 uregion_getContainingRegion(const URegion* uregion);
jpayne@69 170
jpayne@69 171 /**
jpayne@69 172 * Return a pointer to the URegion that geographically contains this uregion and matches the
jpayne@69 173 * specified type, moving multiple steps up the containment chain if necessary. Returns NULL if no
jpayne@69 174 * containing region can be found that matches the specified type. Will return NULL if URegionType
jpayne@69 175 * is URGN_GROUPING, URGN_DEPRECATED, or URGN_UNKNOWN which are not appropriate for this API.
jpayne@69 176 * For example, calling this method with uregion "IT" (Italy) for type URGN_CONTINENT returns the
jpayne@69 177 * URegion "150" (Europe).
jpayne@69 178 * @stable ICU 52
jpayne@69 179 */
jpayne@69 180 U_STABLE const URegion* U_EXPORT2
jpayne@69 181 uregion_getContainingRegionOfType(const URegion* uregion, URegionType type);
jpayne@69 182
jpayne@69 183 /**
jpayne@69 184 * Return an enumeration over the canonical codes of all the regions that are immediate children
jpayne@69 185 * of the specified uregion in the region hierarchy. These returned regions could be either macro
jpayne@69 186 * regions, territories, or a mixture of the two, depending on the containment data as defined in
jpayne@69 187 * CLDR. This API returns NULL if this uregion doesn't have any sub-regions. For example, calling
jpayne@69 188 * this function for uregion "150" (Europe) returns an enumeration containing the various
jpayne@69 189 * sub-regions of Europe: "039" (Southern Europe), "151" (Eastern Europe), "154" (Northern Europe),
jpayne@69 190 * and "155" (Western Europe). The enumeration must be closed with with uenum_close().
jpayne@69 191 * @stable ICU 52
jpayne@69 192 */
jpayne@69 193 U_STABLE UEnumeration* U_EXPORT2
jpayne@69 194 uregion_getContainedRegions(const URegion* uregion, UErrorCode *status);
jpayne@69 195
jpayne@69 196 /**
jpayne@69 197 * Returns an enumeration over the canonical codes of all the regions that are children of the
jpayne@69 198 * specified uregion anywhere in the region hierarchy and match the given type. This API may return
jpayne@69 199 * an empty enumeration if this uregion doesn't have any sub-regions that match the given type.
jpayne@69 200 * For example, calling this method with region "150" (Europe) and type URGN_TERRITORY" returns an
jpayne@69 201 * enumeration containing all the territories in Europe: "FR" (France), "IT" (Italy), "DE" (Germany),
jpayne@69 202 * etc. The enumeration must be closed with with uenum_close().
jpayne@69 203 * @stable ICU 52
jpayne@69 204 */
jpayne@69 205 U_STABLE UEnumeration* U_EXPORT2
jpayne@69 206 uregion_getContainedRegionsOfType(const URegion* uregion, URegionType type, UErrorCode *status);
jpayne@69 207
jpayne@69 208 /**
jpayne@69 209 * Returns true if the specified uregion contains the specified otherRegion anywhere in the region
jpayne@69 210 * hierarchy.
jpayne@69 211 * @stable ICU 52
jpayne@69 212 */
jpayne@69 213 U_STABLE UBool U_EXPORT2
jpayne@69 214 uregion_contains(const URegion* uregion, const URegion* otherRegion);
jpayne@69 215
jpayne@69 216 /**
jpayne@69 217 * If the specified uregion is deprecated, returns an enumeration over the canonical codes of the
jpayne@69 218 * regions that are the preferred replacement regions for the specified uregion. If the specified
jpayne@69 219 * uregion is not deprecated, returns NULL. For example, calling this method with uregion
jpayne@69 220 * "SU" (Soviet Union) returns a list of the regions containing "RU" (Russia), "AM" (Armenia),
jpayne@69 221 * "AZ" (Azerbaijan), etc... The enumeration must be closed with with uenum_close().
jpayne@69 222 * @stable ICU 52
jpayne@69 223 */
jpayne@69 224 U_STABLE UEnumeration* U_EXPORT2
jpayne@69 225 uregion_getPreferredValues(const URegion* uregion, UErrorCode *status);
jpayne@69 226
jpayne@69 227 /**
jpayne@69 228 * Returns the specified uregion's canonical code.
jpayne@69 229 * @stable ICU 52
jpayne@69 230 */
jpayne@69 231 U_STABLE const char* U_EXPORT2
jpayne@69 232 uregion_getRegionCode(const URegion* uregion);
jpayne@69 233
jpayne@69 234 /**
jpayne@69 235 * Returns the specified uregion's numeric code, or a negative value if there is no numeric code
jpayne@69 236 * for the specified uregion.
jpayne@69 237 * @stable ICU 52
jpayne@69 238 */
jpayne@69 239 U_STABLE int32_t U_EXPORT2
jpayne@69 240 uregion_getNumericCode(const URegion* uregion);
jpayne@69 241
jpayne@69 242 /**
jpayne@69 243 * Returns the URegionType of the specified uregion.
jpayne@69 244 * @stable ICU 52
jpayne@69 245 */
jpayne@69 246 U_STABLE URegionType U_EXPORT2
jpayne@69 247 uregion_getType(const URegion* uregion);
jpayne@69 248
jpayne@69 249
jpayne@69 250 #endif /* #if !UCONFIG_NO_FORMATTING */
jpayne@69 251
jpayne@69 252 #endif