1 | // This file is part of ICU4X. For terms of use, please see the file |
2 | // called LICENSE at the top level of the ICU4X source tree |
3 | // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). |
4 | |
5 | use super::*; |
6 | use icu_locid::extensions::unicode::Key; |
7 | use icu_locid::subtags::{region, script, Language, Region, Script}; |
8 | use icu_provider::prelude::*; |
9 | use zerovec::ule::UnvalidatedStr; |
10 | use zerovec::ZeroMap; |
11 | use zerovec::ZeroMap2d; |
12 | |
13 | /// Locale fallback rules derived from likely subtags data. |
14 | #[icu_provider::data_struct (marker( |
15 | LocaleFallbackLikelySubtagsV1Marker, |
16 | "fallback/likelysubtags@1" , |
17 | singleton |
18 | ))] |
19 | #[derive (Default, Clone, PartialEq, Debug)] |
20 | #[cfg_attr ( |
21 | feature = "datagen" , |
22 | derive(serde::Serialize, databake::Bake), |
23 | databake(path = icu_locid_transform::provider), |
24 | )] |
25 | #[cfg_attr (feature = "serde" , derive(serde::Deserialize))] |
26 | #[yoke(prove_covariance_manually)] |
27 | pub struct LocaleFallbackLikelySubtagsV1<'data> { |
28 | /// Map from language to the default script in that language. Languages whose default script |
29 | /// is `Latn` are not included in the map for data size savings. |
30 | /// |
31 | /// Example: "zh" defaults to "Hans", which is in this map. |
32 | #[cfg_attr (feature = "serde" , serde(borrow))] |
33 | pub l2s: ZeroMap<'data, UnvalidatedLanguage, Script>, |
34 | /// Map from language-region pairs to a script. Only populated if the script is different |
35 | /// from the one in `l2s` for that language. |
36 | /// |
37 | /// Example: "zh-TW" defaults to "Hant", which is in this map. |
38 | #[cfg_attr (feature = "serde" , serde(borrow))] |
39 | pub lr2s: ZeroMap2d<'data, UnvalidatedLanguage, UnvalidatedRegion, Script>, |
40 | /// Map from language to the default region in that language. Languages whose default region |
41 | /// is `ZZ` are not included in the map for data size savings. |
42 | /// |
43 | /// Example: "zh" defaults to "CN". |
44 | #[cfg_attr (feature = "serde" , serde(borrow))] |
45 | pub l2r: ZeroMap<'data, UnvalidatedLanguage, Region>, |
46 | /// Map from language-script pairs to a region. Only populated if the region is different |
47 | /// from the one in `l2r` for that language. |
48 | /// |
49 | /// Example: "zh-Hant" defaults to "TW". |
50 | #[cfg_attr (feature = "serde" , serde(borrow))] |
51 | pub ls2r: ZeroMap2d<'data, UnvalidatedLanguage, UnvalidatedScript, Region>, |
52 | } |
53 | |
54 | /// `Latn` is the most common script, so it is defaulted for data size savings. |
55 | pub const DEFAULT_SCRIPT: Script = script!("Latn" ); |
56 | |
57 | /// `ZZ` is the most common region, so it is defaulted for data size savings. |
58 | pub const DEFAULT_REGION: Region = region!("ZZ" ); |
59 | |
60 | /// Locale fallback rules derived from CLDR parent locales data. |
61 | #[icu_provider::data_struct (marker( |
62 | LocaleFallbackParentsV1Marker, |
63 | "fallback/parents@1" , |
64 | singleton |
65 | ))] |
66 | #[derive (Default, Clone, PartialEq, Debug)] |
67 | #[cfg_attr ( |
68 | feature = "datagen" , |
69 | derive(serde::Serialize, databake::Bake), |
70 | databake(path = icu_locid_transform::provider), |
71 | )] |
72 | #[cfg_attr (feature = "serde" , derive(serde::Deserialize))] |
73 | #[yoke(prove_covariance_manually)] |
74 | pub struct LocaleFallbackParentsV1<'data> { |
75 | /// Map from language identifier to language identifier, indicating that the language on the |
76 | /// left should inherit from the language on the right. |
77 | #[cfg_attr (feature = "serde" , serde(borrow))] |
78 | pub parents: ZeroMap<'data, UnvalidatedStr, (Language, Option<Script>, Option<Region>)>, |
79 | } |
80 | |
81 | /// Key-specific supplemental fallback data. |
82 | #[icu_provider::data_struct (marker( |
83 | CollationFallbackSupplementV1Marker, |
84 | "fallback/supplement/co@1" , |
85 | singleton, |
86 | ))] |
87 | #[derive (Default, Clone, PartialEq, Debug)] |
88 | #[cfg_attr ( |
89 | feature = "datagen" , |
90 | derive(serde::Serialize, databake::Bake), |
91 | databake(path = icu_locid_transform::provider), |
92 | )] |
93 | #[cfg_attr (feature = "serde" , derive(serde::Deserialize))] |
94 | #[yoke(prove_covariance_manually)] |
95 | pub struct LocaleFallbackSupplementV1<'data> { |
96 | /// Additional parent locales to supplement the common ones. |
97 | #[cfg_attr (feature = "serde" , serde(borrow))] |
98 | pub parents: ZeroMap<'data, UnvalidatedStr, (Language, Option<Script>, Option<Region>)>, |
99 | /// Default values for Unicode extension keywords. |
100 | #[cfg_attr (feature = "serde" , serde(borrow))] |
101 | pub unicode_extension_defaults: ZeroMap2d<'data, Key, UnvalidatedStr, UnvalidatedStr>, |
102 | } |
103 | |