Coverage Report

Created: 2026-01-10 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/icu_properties-1.5.1/src/provider.rs
Line
Count
Source
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
// Provider structs must be stable
6
#![allow(clippy::exhaustive_structs, clippy::exhaustive_enums)]
7
8
//! 🚧 \[Unstable\] Data provider struct definitions for this ICU4X component.
9
//!
10
//! <div class="stab unstable">
11
//! 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
12
//! including in SemVer minor releases. While the serde representation of data structs is guaranteed
13
//! to be stable, their Rust representation might not be. Use with caution.
14
//! </div>
15
//!
16
//! Read more about data providers: [`icu_provider`]
17
18
pub mod names;
19
20
use crate::script::ScriptWithExt;
21
use crate::Script;
22
23
use core::ops::RangeInclusive;
24
use core::str;
25
use icu_collections::codepointinvlist::CodePointInversionList;
26
use icu_collections::codepointinvliststringlist::CodePointInversionListAndStringList;
27
use icu_collections::codepointtrie::{CodePointMapRange, CodePointTrie, TrieValue};
28
use icu_provider::prelude::*;
29
use icu_provider::{DataKeyMetadata, FallbackPriority};
30
use zerofrom::ZeroFrom;
31
32
use zerovec::{VarZeroVec, ZeroSlice, ZeroVecError};
33
34
#[cfg(feature = "compiled_data")]
35
#[derive(Debug)]
36
/// Baked data
37
///
38
/// <div class="stab unstable">
39
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
40
/// including in SemVer minor releases. In particular, the `DataProvider` implementations are only
41
/// guaranteed to match with this version's `*_unstable` providers. Use with caution.
42
/// </div>
43
pub struct Baked;
44
45
#[cfg(feature = "compiled_data")]
46
const _: () = {
47
    pub mod icu {
48
        pub use crate as properties;
49
        pub use icu_collections as collections;
50
        #[allow(unused_imports)] // baked data may or may not need this
51
        pub use icu_locid_transform as locid_transform;
52
    }
53
    icu_properties_data::make_provider!(Baked);
54
    icu_properties_data::impl_propnames_from_gcb_v1!(Baked);
55
    icu_properties_data::impl_propnames_from_bc_v1!(Baked);
56
    icu_properties_data::impl_propnames_from_ccc_v1!(Baked);
57
    icu_properties_data::impl_propnames_from_ea_v1!(Baked);
58
    icu_properties_data::impl_propnames_from_gc_v1!(Baked);
59
    icu_properties_data::impl_propnames_from_gcm_v1!(Baked);
60
    icu_properties_data::impl_propnames_from_hst_v1!(Baked);
61
    icu_properties_data::impl_propnames_from_insc_v1!(Baked);
62
    icu_properties_data::impl_propnames_from_jt_v1!(Baked);
63
    icu_properties_data::impl_propnames_from_lb_v1!(Baked);
64
    icu_properties_data::impl_propnames_from_sb_v1!(Baked);
65
    icu_properties_data::impl_propnames_from_sc_v1!(Baked);
66
    icu_properties_data::impl_propnames_from_wb_v1!(Baked);
67
    icu_properties_data::impl_propnames_to_long_linear_bc_v1!(Baked);
68
    icu_properties_data::impl_propnames_to_long_linear_ea_v1!(Baked);
69
    icu_properties_data::impl_propnames_to_long_linear_gc_v1!(Baked);
70
    icu_properties_data::impl_propnames_to_long_linear_gcb_v1!(Baked);
71
    icu_properties_data::impl_propnames_to_long_linear_hst_v1!(Baked);
72
    icu_properties_data::impl_propnames_to_long_linear_insc_v1!(Baked);
73
    icu_properties_data::impl_propnames_to_long_linear_jt_v1!(Baked);
74
    icu_properties_data::impl_propnames_to_long_linear_lb_v1!(Baked);
75
    icu_properties_data::impl_propnames_to_long_linear_sb_v1!(Baked);
76
    icu_properties_data::impl_propnames_to_long_linear_sc_v1!(Baked);
77
    icu_properties_data::impl_propnames_to_long_linear_wb_v1!(Baked);
78
    icu_properties_data::impl_propnames_to_long_sparse_ccc_v1!(Baked);
79
    icu_properties_data::impl_propnames_to_short_linear_bc_v1!(Baked);
80
    icu_properties_data::impl_propnames_to_short_linear_ea_v1!(Baked);
81
    icu_properties_data::impl_propnames_to_short_linear_gc_v1!(Baked);
82
    icu_properties_data::impl_propnames_to_short_linear_gcb_v1!(Baked);
83
    icu_properties_data::impl_propnames_to_short_linear_hst_v1!(Baked);
84
    icu_properties_data::impl_propnames_to_short_linear_insc_v1!(Baked);
85
    icu_properties_data::impl_propnames_to_short_linear_jt_v1!(Baked);
86
    icu_properties_data::impl_propnames_to_short_linear_lb_v1!(Baked);
87
    icu_properties_data::impl_propnames_to_short_linear_sb_v1!(Baked);
88
    icu_properties_data::impl_propnames_to_short_linear_wb_v1!(Baked);
89
    icu_properties_data::impl_propnames_to_short_linear4_sc_v1!(Baked);
90
    icu_properties_data::impl_propnames_to_short_sparse_ccc_v1!(Baked);
91
    icu_properties_data::impl_props_ahex_v1!(Baked);
92
    icu_properties_data::impl_props_alnum_v1!(Baked);
93
    icu_properties_data::impl_props_alpha_v1!(Baked);
94
    icu_properties_data::impl_props_basic_emoji_v1!(Baked);
95
    icu_properties_data::impl_props_bc_v1!(Baked);
96
    icu_properties_data::impl_props_bidi_c_v1!(Baked);
97
    icu_properties_data::impl_props_bidi_m_v1!(Baked);
98
    icu_properties_data::impl_props_bidiauxiliaryprops_v1!(Baked);
99
    icu_properties_data::impl_props_blank_v1!(Baked);
100
    icu_properties_data::impl_props_cased_v1!(Baked);
101
    icu_properties_data::impl_props_ccc_v1!(Baked);
102
    icu_properties_data::impl_props_ci_v1!(Baked);
103
    icu_properties_data::impl_props_comp_ex_v1!(Baked);
104
    icu_properties_data::impl_props_cwcf_v1!(Baked);
105
    icu_properties_data::impl_props_cwcm_v1!(Baked);
106
    icu_properties_data::impl_props_cwkcf_v1!(Baked);
107
    icu_properties_data::impl_props_cwl_v1!(Baked);
108
    icu_properties_data::impl_props_cwt_v1!(Baked);
109
    icu_properties_data::impl_props_cwu_v1!(Baked);
110
    icu_properties_data::impl_props_dash_v1!(Baked);
111
    icu_properties_data::impl_props_dep_v1!(Baked);
112
    icu_properties_data::impl_props_di_v1!(Baked);
113
    icu_properties_data::impl_props_dia_v1!(Baked);
114
    icu_properties_data::impl_props_ea_v1!(Baked);
115
    icu_properties_data::impl_props_ebase_v1!(Baked);
116
    icu_properties_data::impl_props_ecomp_v1!(Baked);
117
    icu_properties_data::impl_props_emod_v1!(Baked);
118
    icu_properties_data::impl_props_emoji_v1!(Baked);
119
    icu_properties_data::impl_props_epres_v1!(Baked);
120
    icu_properties_data::impl_props_exemplarchars_auxiliary_v1!(Baked);
121
    icu_properties_data::impl_props_exemplarchars_index_v1!(Baked);
122
    icu_properties_data::impl_props_exemplarchars_main_v1!(Baked);
123
    icu_properties_data::impl_props_exemplarchars_numbers_v1!(Baked);
124
    icu_properties_data::impl_props_exemplarchars_punctuation_v1!(Baked);
125
    icu_properties_data::impl_props_ext_v1!(Baked);
126
    icu_properties_data::impl_props_extpict_v1!(Baked);
127
    icu_properties_data::impl_props_gc_v1!(Baked);
128
    icu_properties_data::impl_props_gcb_v1!(Baked);
129
    icu_properties_data::impl_props_gr_base_v1!(Baked);
130
    icu_properties_data::impl_props_gr_ext_v1!(Baked);
131
    icu_properties_data::impl_props_gr_link_v1!(Baked);
132
    icu_properties_data::impl_props_graph_v1!(Baked);
133
    icu_properties_data::impl_props_hex_v1!(Baked);
134
    icu_properties_data::impl_props_hst_v1!(Baked);
135
    icu_properties_data::impl_props_hyphen_v1!(Baked);
136
    icu_properties_data::impl_props_idc_v1!(Baked);
137
    icu_properties_data::impl_props_ideo_v1!(Baked);
138
    icu_properties_data::impl_props_ids_v1!(Baked);
139
    icu_properties_data::impl_props_idsb_v1!(Baked);
140
    icu_properties_data::impl_props_idst_v1!(Baked);
141
    icu_properties_data::impl_props_insc_v1!(Baked);
142
    icu_properties_data::impl_props_join_c_v1!(Baked);
143
    icu_properties_data::impl_props_jt_v1!(Baked);
144
    icu_properties_data::impl_props_lb_v1!(Baked);
145
    icu_properties_data::impl_props_loe_v1!(Baked);
146
    icu_properties_data::impl_props_lower_v1!(Baked);
147
    icu_properties_data::impl_props_math_v1!(Baked);
148
    icu_properties_data::impl_props_nchar_v1!(Baked);
149
    icu_properties_data::impl_props_nfcinert_v1!(Baked);
150
    icu_properties_data::impl_props_nfdinert_v1!(Baked);
151
    icu_properties_data::impl_props_nfkcinert_v1!(Baked);
152
    icu_properties_data::impl_props_nfkdinert_v1!(Baked);
153
    icu_properties_data::impl_props_pat_syn_v1!(Baked);
154
    icu_properties_data::impl_props_pat_ws_v1!(Baked);
155
    icu_properties_data::impl_props_pcm_v1!(Baked);
156
    icu_properties_data::impl_props_print_v1!(Baked);
157
    icu_properties_data::impl_props_qmark_v1!(Baked);
158
    icu_properties_data::impl_props_radical_v1!(Baked);
159
    icu_properties_data::impl_props_ri_v1!(Baked);
160
    icu_properties_data::impl_props_sb_v1!(Baked);
161
    icu_properties_data::impl_props_sc_v1!(Baked);
162
    icu_properties_data::impl_props_scx_v1!(Baked);
163
    icu_properties_data::impl_props_sd_v1!(Baked);
164
    icu_properties_data::impl_props_segstart_v1!(Baked);
165
    icu_properties_data::impl_props_sensitive_v1!(Baked);
166
    icu_properties_data::impl_props_sterm_v1!(Baked);
167
    icu_properties_data::impl_props_term_v1!(Baked);
168
    icu_properties_data::impl_props_uideo_v1!(Baked);
169
    icu_properties_data::impl_props_upper_v1!(Baked);
170
    icu_properties_data::impl_props_vs_v1!(Baked);
171
    icu_properties_data::impl_props_wb_v1!(Baked);
172
    icu_properties_data::impl_props_wspace_v1!(Baked);
173
    icu_properties_data::impl_props_xdigit_v1!(Baked);
174
    icu_properties_data::impl_props_xidc_v1!(Baked);
175
    icu_properties_data::impl_props_xids_v1!(Baked);
176
};
177
178
// include the specialized structs for the compact representation of Bidi property data
179
pub mod bidi_data;
180
181
/// A set of characters which share a particular property value.
182
///
183
/// This data enum is extensible, more backends may be added in the future.
184
/// Old data can be used with newer code but not vice versa.
185
///
186
/// <div class="stab unstable">
187
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
188
/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
189
/// to be stable, their Rust representation might not be. Use with caution.
190
/// </div>
191
#[derive(Debug, Eq, PartialEq, Clone, yoke::Yokeable, zerofrom::ZeroFrom)]
192
#[cfg_attr(
193
    feature = "datagen", 
194
    derive(serde::Serialize, databake::Bake),
195
    databake(path = icu_properties::provider),
196
)]
197
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
198
#[non_exhaustive]
199
pub enum PropertyCodePointSetV1<'data> {
200
    /// The set of characters, represented as an inversion list
201
    InversionList(#[cfg_attr(feature = "serde", serde(borrow))] CodePointInversionList<'data>),
202
    // new variants should go BELOW existing ones
203
    // Serde serializes based on variant name and index in the enum
204
    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
205
}
206
207
/// A map efficiently storing data about individual characters.
208
///
209
/// This data enum is extensible, more backends may be added in the future.
210
/// Old data can be used with newer code but not vice versa.
211
///
212
/// <div class="stab unstable">
213
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
214
/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
215
/// to be stable, their Rust representation might not be. Use with caution.
216
/// </div>
217
#[derive(Clone, Debug, Eq, PartialEq, yoke::Yokeable, zerofrom::ZeroFrom)]
218
#[cfg_attr(
219
    feature = "datagen", 
220
    derive(serde::Serialize, databake::Bake),
221
    databake(path = icu_properties::provider),
222
)]
223
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
224
#[non_exhaustive]
225
pub enum PropertyCodePointMapV1<'data, T: TrieValue> {
226
    /// A codepoint trie storing the data
227
    CodePointTrie(#[cfg_attr(feature = "serde", serde(borrow))] CodePointTrie<'data, T>),
228
    // new variants should go BELOW existing ones
229
    // Serde serializes based on variant name and index in the enum
230
    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
231
}
232
233
/// A set of characters and strings which share a particular property value.
234
///
235
/// <div class="stab unstable">
236
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
237
/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
238
/// to be stable, their Rust representation might not be. Use with caution.
239
/// </div>
240
#[derive(Debug, Eq, PartialEq, Clone, yoke::Yokeable, zerofrom::ZeroFrom)]
241
#[cfg_attr(
242
    feature = "datagen", 
243
    derive(serde::Serialize, databake::Bake),
244
    databake(path = icu_properties::provider),
245
)]
246
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
247
#[non_exhaustive]
248
pub enum PropertyUnicodeSetV1<'data> {
249
    /// A set representing characters in an inversion list, and the strings in a list.
250
    CPInversionListStrList(
251
        #[cfg_attr(feature = "serde", serde(borrow))] CodePointInversionListAndStringList<'data>,
252
    ),
253
    // new variants should go BELOW existing ones
254
    // Serde serializes based on variant name and index in the enum
255
    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
256
}
257
258
impl<'data> PropertyUnicodeSetV1<'data> {
259
    #[inline]
260
0
    pub(crate) fn contains(&self, s: &str) -> bool {
261
0
        match *self {
262
0
            Self::CPInversionListStrList(ref l) => l.contains(s),
263
        }
264
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyUnicodeSetV1>::contains
Unexecuted instantiation: <icu_properties::provider::PropertyUnicodeSetV1>::contains
265
266
    #[inline]
267
0
    pub(crate) fn contains32(&self, cp: u32) -> bool {
268
0
        match *self {
269
0
            Self::CPInversionListStrList(ref l) => l.contains32(cp),
270
        }
271
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyUnicodeSetV1>::contains32
Unexecuted instantiation: <icu_properties::provider::PropertyUnicodeSetV1>::contains32
272
273
    #[inline]
274
0
    pub(crate) fn contains_char(&self, ch: char) -> bool {
275
0
        match *self {
276
0
            Self::CPInversionListStrList(ref l) => l.contains_char(ch),
277
        }
278
0
    }
279
280
    #[inline]
281
0
    pub(crate) fn from_code_point_inversion_list_string_list(
282
0
        l: CodePointInversionListAndStringList<'static>,
283
0
    ) -> Self {
284
0
        Self::CPInversionListStrList(l)
285
0
    }
286
287
    #[inline]
288
0
    pub(crate) fn as_code_point_inversion_list_string_list(
289
0
        &'_ self,
290
0
    ) -> Option<&'_ CodePointInversionListAndStringList<'data>> {
291
0
        match *self {
292
0
            Self::CPInversionListStrList(ref l) => Some(l),
293
            // any other backing data structure that cannot return a CPInversionListStrList in O(1) time should return None
294
        }
295
0
    }
296
297
    #[inline]
298
0
    pub(crate) fn to_code_point_inversion_list_string_list(
299
0
        &self,
300
0
    ) -> CodePointInversionListAndStringList<'_> {
301
0
        match *self {
302
0
            Self::CPInversionListStrList(ref t) => ZeroFrom::zero_from(t),
303
        }
304
0
    }
305
}
306
307
/// A struct that efficiently stores `Script` and `Script_Extensions` property data.
308
///
309
/// <div class="stab unstable">
310
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
311
/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
312
/// to be stable, their Rust representation might not be. Use with caution.
313
/// </div>
314
#[icu_provider::data_struct(marker(
315
    ScriptWithExtensionsPropertyV1Marker,
316
    "props/scx@1",
317
    singleton
318
))]
319
#[derive(Debug, Eq, PartialEq, Clone)]
320
#[cfg_attr(
321
    feature = "datagen", 
322
    derive(serde::Serialize, databake::Bake),
323
    databake(path = icu_properties::provider),
324
)]
325
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
326
pub struct ScriptWithExtensionsPropertyV1<'data> {
327
    /// Note: The `ScriptWithExt` values in this array will assume a 12-bit layout. The 2
328
    /// higher order bits 11..10 will indicate how to deduce the Script value and
329
    /// Script_Extensions value, nearly matching the representation
330
    /// [in ICU](https://github.com/unicode-org/icu/blob/main/icu4c/source/common/uprops.h):
331
    ///
332
    /// | High order 2 bits value | Script                                                 | Script_Extensions                                              |
333
    /// |-------------------------|--------------------------------------------------------|----------------------------------------------------------------|
334
    /// | 3                       | First value in sub-array, index given by lower 10 bits | Sub-array excluding first value, index given by lower 10 bits  |
335
    /// | 2                       | Script=Inherited                                       | Entire sub-array, index given by lower 10 bits                 |
336
    /// | 1                       | Script=Common                                          | Entire sub-array, index given by lower 10 bits                 |
337
    /// | 0                       | Value in lower 10 bits                                 | `[ Script value ]` single-element array                        |
338
    ///
339
    /// When the lower 10 bits of the value are used as an index, that index is
340
    /// used for the outer-level vector of the nested `extensions` structure.
341
    #[cfg_attr(feature = "serde", serde(borrow))]
342
    pub trie: CodePointTrie<'data, ScriptWithExt>,
343
344
    /// This companion structure stores Script_Extensions values, which are
345
    /// themselves arrays / vectors. This structure only stores the values for
346
    /// cases in which `scx(cp) != [ sc(cp) ]`. Each sub-vector is distinct. The
347
    /// sub-vector represents the Script_Extensions array value for a code point,
348
    /// and may also indicate Script value, as described for the `trie` field.
349
    #[cfg_attr(feature = "serde", serde(borrow))]
350
    pub extensions: VarZeroVec<'data, ZeroSlice<Script>>,
351
}
352
353
impl<'data> ScriptWithExtensionsPropertyV1<'data> {
354
    // This method is intended to be used by constructors of deserialized data
355
    // in a data provider.
356
    #[doc(hidden)]
357
0
    pub fn new(
358
0
        trie: CodePointTrie<'data, ScriptWithExt>,
359
0
        extensions: VarZeroVec<'data, ZeroSlice<Script>>,
360
0
    ) -> ScriptWithExtensionsPropertyV1<'data> {
361
0
        ScriptWithExtensionsPropertyV1 { trie, extensions }
362
0
    }
363
}
364
365
// See CodePointSetData for documentation of these functions
366
impl<'data> PropertyCodePointSetV1<'data> {
367
    #[inline]
368
0
    pub(crate) fn contains(&self, ch: char) -> bool {
369
0
        match *self {
370
0
            Self::InversionList(ref l) => l.contains(ch),
371
        }
372
0
    }
373
374
    #[inline]
375
0
    pub(crate) fn contains32(&self, ch: u32) -> bool {
376
0
        match *self {
377
0
            Self::InversionList(ref l) => l.contains32(ch),
378
        }
379
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::contains32
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::contains32
380
381
    #[inline]
382
0
    pub(crate) fn iter_ranges(&self) -> impl Iterator<Item = RangeInclusive<u32>> + '_ {
383
0
        match *self {
384
0
            Self::InversionList(ref l) => l.iter_ranges(),
385
        }
386
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::iter_ranges
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::iter_ranges
387
388
    #[inline]
389
0
    pub(crate) fn iter_ranges_complemented(
390
0
        &self,
391
0
    ) -> impl Iterator<Item = RangeInclusive<u32>> + '_ {
392
0
        match *self {
393
0
            Self::InversionList(ref l) => l.iter_ranges_complemented(),
394
        }
395
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::iter_ranges_complemented
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointSetV1>::iter_ranges_complemented
396
397
    #[inline]
398
0
    pub(crate) fn from_code_point_inversion_list(l: CodePointInversionList<'static>) -> Self {
399
0
        Self::InversionList(l)
400
0
    }
401
402
    #[inline]
403
0
    pub(crate) fn as_code_point_inversion_list(
404
0
        &'_ self,
405
0
    ) -> Option<&'_ CodePointInversionList<'data>> {
406
0
        match *self {
407
0
            Self::InversionList(ref l) => Some(l),
408
            // any other backing data structure that cannot return a CPInvList in O(1) time should return None
409
        }
410
0
    }
411
412
    #[inline]
413
0
    pub(crate) fn to_code_point_inversion_list(&self) -> CodePointInversionList<'_> {
414
0
        match *self {
415
0
            Self::InversionList(ref t) => ZeroFrom::zero_from(t),
416
        }
417
0
    }
418
}
419
420
// See CodePointMapData for documentation of these functions
421
impl<'data, T: TrieValue> PropertyCodePointMapV1<'data, T> {
422
    #[inline]
423
0
    pub(crate) fn get32(&self, ch: u32) -> T {
424
0
        match *self {
425
0
            Self::CodePointTrie(ref t) => t.get32(ch),
426
        }
427
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::GeneralCategory>>::get32
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u8>>::get32
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u16>>::get32
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::BidiClass>>::get32
428
429
    #[inline]
430
0
    pub(crate) fn try_into_converted<P>(
431
0
        self,
432
0
    ) -> Result<PropertyCodePointMapV1<'data, P>, ZeroVecError>
433
0
    where
434
0
        P: TrieValue,
435
    {
436
0
        match self {
437
0
            Self::CodePointTrie(t) => t
438
0
                .try_into_converted()
439
0
                .map(PropertyCodePointMapV1::CodePointTrie),
440
        }
441
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::JoiningType>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::SentenceBreak>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::EastAsianWidth>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::GeneralCategory>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::HangulSyllableType>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::GraphemeClusterBreak>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::IndicSyllabicCategory>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::Script>>::try_into_converted::<u16>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::BidiClass>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::LineBreak>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::WordBreak>>::try_into_converted::<u8>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<_>>::try_into_converted::<_>
442
443
    #[inline]
444
0
    pub(crate) fn get_set_for_value(&self, value: T) -> CodePointInversionList<'static> {
445
0
        match *self {
446
0
            Self::CodePointTrie(ref t) => t.get_set_for_value(value),
447
        }
448
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u8>>::get_set_for_value
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u16>>::get_set_for_value
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<_>>::get_set_for_value
449
450
    #[inline]
451
0
    pub(crate) fn iter_ranges(&self) -> impl Iterator<Item = CodePointMapRange<T>> + '_ {
452
0
        match *self {
453
0
            Self::CodePointTrie(ref t) => t.iter_ranges(),
454
        }
455
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u8>>::iter_ranges
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u16>>::iter_ranges
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::GeneralCategory>>::iter_ranges
456
    #[inline]
457
0
    pub(crate) fn iter_ranges_mapped<'a, U: Eq + 'a>(
458
0
        &'a self,
459
0
        map: impl FnMut(T) -> U + Copy + 'a,
460
0
    ) -> impl Iterator<Item = CodePointMapRange<U>> + 'a {
461
0
        match *self {
462
0
            Self::CodePointTrie(ref t) => t.iter_ranges_mapped(map),
463
        }
464
0
    }
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u8>>::iter_ranges_mapped::<bool, <icu_capi::properties_maps::ffi::ICU4XCodePointMapData8>::iter_ranges_for_mask::{closure#0}>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u8>>::iter_ranges_mapped::<bool, <icu_properties::maps::CodePointMapDataBorrowed<u8>>::iter_ranges_for_value_complemented::{closure#0}>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<u16>>::iter_ranges_mapped::<bool, <icu_properties::maps::CodePointMapDataBorrowed<u16>>::iter_ranges_for_value_complemented::{closure#0}>
Unexecuted instantiation: <icu_properties::provider::PropertyCodePointMapV1<icu_properties::props::GeneralCategory>>::iter_ranges_mapped::<bool, <icu_properties::maps::CodePointMapDataBorrowed<icu_properties::props::GeneralCategory>>::iter_ranges_for_group::{closure#0}>
465
466
    #[inline]
467
0
    pub(crate) fn from_code_point_trie(trie: CodePointTrie<'static, T>) -> Self {
468
0
        Self::CodePointTrie(trie)
469
0
    }
470
471
    #[inline]
472
0
    pub(crate) fn as_code_point_trie(&self) -> Option<&CodePointTrie<'data, T>> {
473
0
        match *self {
474
0
            Self::CodePointTrie(ref t) => Some(t),
475
            // any other backing data structure that cannot return a CPT in O(1) time should return None
476
        }
477
0
    }
478
479
    #[inline]
480
0
    pub(crate) fn to_code_point_trie(&self) -> CodePointTrie<'_, T> {
481
0
        match *self {
482
0
            Self::CodePointTrie(ref t) => ZeroFrom::zero_from(t),
483
        }
484
0
    }
485
}
486
487
macro_rules! expand {
488
    (
489
        ($(($code_point_set_marker:ident, $bin_cp_s:literal),)+),
490
        ($(($unicode_set_marker:ident, $bin_us_s:literal, $us_singleton:literal),)+),
491
        ($(($code_point_map_marker:ident,
492
            $name_value_marker:ident,
493
494
            $((sparse: $value_short_name_marker_sparse:ident, $value_long_name_marker_sparse:ident),)?
495
            $((linear: $value_short_name_marker_linear:ident, $value_long_name_marker_linear:ident ),)?
496
            $((linear4: $value_short_name_marker_linear4:ident, $value_long_name_marker_linear4:ident ),)?
497
            $enum_s:literal, $value_ty:ident),)+)
498
    ) => {
499
500
            // Data keys that return code point sets (represented as CodePointSetData).
501
            // For now, synonymous with binary properties of code points only.
502
            $(
503
                #[doc = core::concat!("Data marker for the '", $bin_cp_s, "' Unicode property")]
504
                #[derive(Debug, Default)]
505
                #[cfg_attr(
506
                    feature = "datagen",
507
                    derive(databake::Bake),
508
                    databake(path = icu_properties::provider),
509
                )]
510
                pub struct $code_point_set_marker;
511
512
                impl DataMarker for $code_point_set_marker {
513
                    type Yokeable = PropertyCodePointSetV1<'static>;
514
                }
515
                impl KeyedDataMarker for $code_point_set_marker {
516
                    const KEY: DataKey = data_key!(concat!("props/", $bin_cp_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
517
                }
518
519
            )+
520
521
            // Data keys that return sets of strings + code points (represented as UnicodeSetData).
522
            // Includes:
523
            //   - binary properties of strings + code points
524
            //   - exemplar characters
525
            $(
526
                #[doc = core::concat!("Data marker for the '", $bin_us_s, "' Unicode property")]
527
                #[derive(Debug, Default)]
528
                #[cfg_attr(
529
                    feature = "datagen",
530
                    derive(databake::Bake),
531
                    databake(path = icu_properties::provider),
532
                )]
533
                pub struct $unicode_set_marker;
534
535
                impl DataMarker for $unicode_set_marker {
536
                    type Yokeable = PropertyUnicodeSetV1<'static>;
537
                }
538
                impl KeyedDataMarker for $unicode_set_marker {
539
                    const KEY: DataKey = data_key!(concat!("props/", $bin_us_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, $us_singleton));
540
                }
541
            )+
542
543
            // Data keys that return code point map (represented as CodePointMapData).
544
            // For now, synonymous with enumerated properties [of code points only].
545
            $(
546
                #[doc = core::concat!("Data marker for the '", $enum_s, "' Unicode property")]
547
                #[derive(Debug, Default)]
548
                #[cfg_attr(
549
                    feature = "datagen",
550
                    derive(databake::Bake),
551
                    databake(path = icu_properties::provider),
552
                )]
553
                pub struct $code_point_map_marker;
554
555
                impl DataMarker for $code_point_map_marker {
556
                    type Yokeable = PropertyCodePointMapV1<'static, crate::$value_ty>;
557
                }
558
559
                impl KeyedDataMarker for $code_point_map_marker {
560
                    const KEY: DataKey = data_key!(concat!("props/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
561
                }
562
563
564
                #[doc = core::concat!("Data marker for parsing the names of the values of the '", $enum_s, "' Unicode property")]
565
                #[derive(Debug, Default)]
566
                #[cfg_attr(
567
                    feature = "datagen",
568
                    derive(databake::Bake),
569
                    databake(path = icu_properties::provider),
570
                )]
571
                pub struct $name_value_marker;
572
573
                impl DataMarker for $name_value_marker {
574
                    type Yokeable = names::PropertyValueNameToEnumMapV1<'static>;
575
                }
576
577
                impl KeyedDataMarker for $name_value_marker {
578
                    const KEY: DataKey = data_key!(concat!("propnames/from/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
579
                }
580
581
                $(
582
                    #[doc = core::concat!("Data marker for producing short names of the values of the '", $enum_s, "' Unicode property")]
583
                    #[derive(Debug, Default)]
584
                    #[cfg_attr(
585
                        feature = "datagen",
586
                        derive(databake::Bake),
587
                        databake(path = icu_properties::provider),
588
                    )]
589
                    pub struct $value_short_name_marker_sparse;
590
591
                    impl DataMarker for $value_short_name_marker_sparse {
592
                        type Yokeable = names::PropertyEnumToValueNameSparseMapV1<'static>;
593
                    }
594
595
                    impl KeyedDataMarker for $value_short_name_marker_sparse {
596
                        const KEY: DataKey = data_key!(concat!("propnames/to/short/sparse/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
597
                    }
598
599
                    #[doc = core::concat!("Data marker for producing long names of the values of the '", $enum_s, "' Unicode property")]
600
                    #[derive(Debug, Default)]
601
                    #[cfg_attr(
602
                        feature = "datagen",
603
                        derive(databake::Bake),
604
                        databake(path = icu_properties::provider),
605
                    )]
606
                    pub struct $value_long_name_marker_sparse;
607
608
                    impl DataMarker for $value_long_name_marker_sparse {
609
                        type Yokeable = names::PropertyEnumToValueNameSparseMapV1<'static>;
610
                    }
611
612
                    impl KeyedDataMarker for $value_long_name_marker_sparse {
613
                        const KEY: DataKey = data_key!(concat!("propnames/to/long/sparse/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
614
                    }
615
                )?
616
617
                $(
618
                    #[doc = core::concat!("Data marker for producing short names of the values of the '", $enum_s, "' Unicode property")]
619
                    #[derive(Debug, Default)]
620
                    #[cfg_attr(
621
                        feature = "datagen",
622
                        derive(databake::Bake),
623
                        databake(path = icu_properties::provider),
624
                    )]
625
                    pub struct $value_short_name_marker_linear;
626
627
                    impl DataMarker for $value_short_name_marker_linear {
628
                        type Yokeable = names::PropertyEnumToValueNameLinearMapV1<'static>;
629
                    }
630
631
                    impl KeyedDataMarker for $value_short_name_marker_linear {
632
                        const KEY: DataKey = data_key!(concat!("propnames/to/short/linear/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
633
                    }
634
635
                    #[doc = core::concat!("Data marker for producing long names of the values of the '", $enum_s, "' Unicode property")]
636
                    #[derive(Debug, Default)]
637
                    #[cfg_attr(
638
                        feature = "datagen",
639
                        derive(databake::Bake),
640
                        databake(path = icu_properties::provider),
641
                    )]
642
                    pub struct $value_long_name_marker_linear;
643
644
                    impl DataMarker for $value_long_name_marker_linear {
645
                        type Yokeable = names::PropertyEnumToValueNameLinearMapV1<'static>;
646
                    }
647
648
                    impl KeyedDataMarker for $value_long_name_marker_linear {
649
                        const KEY: DataKey = data_key!(concat!("propnames/to/long/linear/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
650
                    }
651
                )?
652
653
                $(
654
                    #[doc = core::concat!("Data marker for producing short names of the values of the '", $enum_s, "' Unicode property")]
655
                    #[derive(Debug, Default)]
656
                    #[cfg_attr(
657
                        feature = "datagen",
658
                        derive(databake::Bake),
659
                        databake(path = icu_properties::provider),
660
                    )]
661
                    pub struct $value_short_name_marker_linear4;
662
663
                    impl DataMarker for $value_short_name_marker_linear4 {
664
                        type Yokeable = names::PropertyEnumToValueNameLinearTiny4MapV1<'static>;
665
                    }
666
667
                    impl KeyedDataMarker for $value_short_name_marker_linear4 {
668
                        const KEY: DataKey = data_key!(concat!("propnames/to/short/linear4/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
669
                    }
670
671
                    #[doc = core::concat!("Data marker for producing long names of the values of the '", $enum_s, "' Unicode property")]
672
                    #[derive(Debug, Default)]
673
                    #[cfg_attr(
674
                        feature = "datagen",
675
                        derive(databake::Bake),
676
                        databake(path = icu_properties::provider),
677
                    )]
678
                    pub struct $value_long_name_marker_linear4;
679
680
                    impl DataMarker for $value_long_name_marker_linear4 {
681
                        // Tiny4 is only for short names
682
                        type Yokeable = names::PropertyEnumToValueNameLinearMapV1<'static>;
683
                    }
684
685
                    impl KeyedDataMarker for $value_long_name_marker_linear4 {
686
                        const KEY: DataKey = data_key!(concat!("propnames/to/long/linear/", $enum_s, "@1"), DataKeyMetadata::construct_internal(FallbackPriority::Language, None, None, true));
687
                    }
688
                )?
689
            )+
690
691
        /// All data keys in this module.
692
        pub const KEYS: &[DataKey] = &[
693
            $($code_point_set_marker::KEY,)+
694
            $($unicode_set_marker::KEY,)+
695
            $(
696
                $code_point_map_marker::KEY,
697
                $name_value_marker::KEY,
698
                $($value_short_name_marker_sparse::KEY, $value_long_name_marker_sparse::KEY,)?
699
                $($value_short_name_marker_linear::KEY, $value_long_name_marker_linear::KEY,)?
700
                $($value_short_name_marker_linear4::KEY, $value_long_name_marker_linear4::KEY,)?
701
            )+
702
            bidi_data::BidiAuxiliaryPropertiesV1Marker::KEY,
703
            GeneralCategoryMaskNameToValueV1Marker::KEY,
704
            ScriptWithExtensionsPropertyV1Marker::KEY,
705
        ];
706
    };
707
}
708
709
pub use self::names::GeneralCategoryMaskNameToValueV1Marker;
710
711
expand!(
712
    (
713
        // code point sets
714
        (AsciiHexDigitV1Marker, "AHex"),
715
        (AlnumV1Marker, "alnum"),
716
        (AlphabeticV1Marker, "Alpha"),
717
        (BidiControlV1Marker, "Bidi_C"),
718
        (BidiMirroredV1Marker, "Bidi_M"),
719
        (BlankV1Marker, "blank"),
720
        (CasedV1Marker, "Cased"),
721
        (CaseIgnorableV1Marker, "CI"),
722
        (FullCompositionExclusionV1Marker, "Comp_Ex"),
723
        (ChangesWhenCasefoldedV1Marker, "CWCF"),
724
        (ChangesWhenCasemappedV1Marker, "CWCM"),
725
        (ChangesWhenNfkcCasefoldedV1Marker, "CWKCF"),
726
        (ChangesWhenLowercasedV1Marker, "CWL"),
727
        (ChangesWhenTitlecasedV1Marker, "CWT"),
728
        (ChangesWhenUppercasedV1Marker, "CWU"),
729
        (DashV1Marker, "Dash"),
730
        (DeprecatedV1Marker, "Dep"),
731
        (DefaultIgnorableCodePointV1Marker, "DI"),
732
        (DiacriticV1Marker, "Dia"),
733
        (EmojiModifierBaseV1Marker, "EBase"),
734
        (EmojiComponentV1Marker, "EComp"),
735
        (EmojiModifierV1Marker, "EMod"),
736
        (EmojiV1Marker, "Emoji"),
737
        (EmojiPresentationV1Marker, "EPres"),
738
        (ExtenderV1Marker, "Ext"),
739
        (ExtendedPictographicV1Marker, "ExtPict"),
740
        (GraphV1Marker, "graph"),
741
        (GraphemeBaseV1Marker, "Gr_Base"),
742
        (GraphemeExtendV1Marker, "Gr_Ext"),
743
        (GraphemeLinkV1Marker, "Gr_Link"),
744
        (HexDigitV1Marker, "Hex"),
745
        (HyphenV1Marker, "Hyphen"),
746
        (IdContinueV1Marker, "IDC"),
747
        (IdeographicV1Marker, "Ideo"),
748
        (IdStartV1Marker, "IDS"),
749
        (IdsBinaryOperatorV1Marker, "IDSB"),
750
        (IdsTrinaryOperatorV1Marker, "IDST"),
751
        (JoinControlV1Marker, "Join_C"),
752
        (LogicalOrderExceptionV1Marker, "LOE"),
753
        (LowercaseV1Marker, "Lower"),
754
        (MathV1Marker, "Math"),
755
        (NoncharacterCodePointV1Marker, "NChar"),
756
        (NfcInertV1Marker, "nfcinert"),
757
        (NfdInertV1Marker, "nfdinert"),
758
        (NfkcInertV1Marker, "nfkcinert"),
759
        (NfkdInertV1Marker, "nfkdinert"),
760
        (PatternSyntaxV1Marker, "Pat_Syn"),
761
        (PatternWhiteSpaceV1Marker, "Pat_WS"),
762
        (PrependedConcatenationMarkV1Marker, "PCM"),
763
        (PrintV1Marker, "print"),
764
        (QuotationMarkV1Marker, "QMark"),
765
        (RadicalV1Marker, "Radical"),
766
        (RegionalIndicatorV1Marker, "RI"),
767
        (SoftDottedV1Marker, "SD"),
768
        (SegmentStarterV1Marker, "segstart"),
769
        (CaseSensitiveV1Marker, "Sensitive"),
770
        (SentenceTerminalV1Marker, "STerm"),
771
        (TerminalPunctuationV1Marker, "Term"),
772
        (UnifiedIdeographV1Marker, "UIdeo"),
773
        (UppercaseV1Marker, "Upper"),
774
        (VariationSelectorV1Marker, "VS"),
775
        (WhiteSpaceV1Marker, "WSpace"),
776
        (XdigitV1Marker, "xdigit"),
777
        (XidContinueV1Marker, "XIDC"),
778
        (XidStartV1Marker, "XIDS"),
779
    ),
780
    (
781
        // UnicodeSets (code points + strings)
782
        (BasicEmojiV1Marker, "Basic_Emoji", true),
783
        (ExemplarCharactersMainV1Marker, "exemplarchars/main", false),
784
        (
785
            ExemplarCharactersAuxiliaryV1Marker,
786
            "exemplarchars/auxiliary",
787
            false
788
        ),
789
        (
790
            ExemplarCharactersPunctuationV1Marker,
791
            "exemplarchars/punctuation",
792
            false
793
        ),
794
        (
795
            ExemplarCharactersNumbersV1Marker,
796
            "exemplarchars/numbers",
797
            false
798
        ),
799
        (
800
            ExemplarCharactersIndexV1Marker,
801
            "exemplarchars/index",
802
            false
803
        ),
804
    ),
805
    (
806
        // code point maps
807
        (
808
            CanonicalCombiningClassV1Marker,
809
            CanonicalCombiningClassNameToValueV1Marker,
810
            (
811
                sparse: CanonicalCombiningClassValueToShortNameV1Marker,
812
                CanonicalCombiningClassValueToLongNameV1Marker
813
            ),
814
            "ccc",
815
            CanonicalCombiningClass
816
        ),
817
        (
818
            GeneralCategoryV1Marker,
819
            GeneralCategoryNameToValueV1Marker,
820
            (
821
                linear: GeneralCategoryValueToShortNameV1Marker,
822
                GeneralCategoryValueToLongNameV1Marker
823
            ),
824
            "gc",
825
            GeneralCategory
826
        ),
827
        (
828
            BidiClassV1Marker,
829
            BidiClassNameToValueV1Marker,
830
            (
831
                linear: BidiClassValueToShortNameV1Marker,
832
                BidiClassValueToLongNameV1Marker
833
            ),
834
            "bc",
835
            BidiClass
836
        ),
837
        (
838
            ScriptV1Marker,
839
            ScriptNameToValueV1Marker,
840
            (
841
                linear4: ScriptValueToShortNameV1Marker,
842
                ScriptValueToLongNameV1Marker
843
            ),
844
            "sc",
845
            Script
846
        ),
847
        (
848
            HangulSyllableTypeV1Marker,
849
            HangulSyllableTypeNameToValueV1Marker,
850
            (
851
                linear: HangulSyllableTypeValueToShortNameV1Marker,
852
                HangulSyllableTypeValueToLongNameV1Marker
853
            ),
854
            "hst",
855
            HangulSyllableType
856
        ),
857
        (
858
            EastAsianWidthV1Marker,
859
            EastAsianWidthNameToValueV1Marker,
860
            (
861
                linear: EastAsianWidthValueToShortNameV1Marker,
862
                EastAsianWidthValueToLongNameV1Marker
863
            ),
864
            "ea",
865
            EastAsianWidth
866
        ),
867
        (
868
            LineBreakV1Marker,
869
            LineBreakNameToValueV1Marker,
870
            (
871
                linear: LineBreakValueToShortNameV1Marker,
872
                LineBreakValueToLongNameV1Marker
873
            ),
874
            "lb",
875
            LineBreak
876
        ),
877
        (
878
            GraphemeClusterBreakV1Marker,
879
            GraphemeClusterBreakNameToValueV1Marker,
880
            (
881
                linear: GraphemeClusterBreakValueToShortNameV1Marker,
882
                GraphemeClusterBreakValueToLongNameV1Marker
883
            ),
884
            "GCB",
885
            GraphemeClusterBreak
886
        ),
887
        (
888
            WordBreakV1Marker,
889
            WordBreakNameToValueV1Marker,
890
            (
891
                linear: WordBreakValueToShortNameV1Marker,
892
                WordBreakValueToLongNameV1Marker
893
            ),
894
            "WB",
895
            WordBreak
896
        ),
897
        (
898
            SentenceBreakV1Marker,
899
            SentenceBreakNameToValueV1Marker,
900
            (
901
                linear: SentenceBreakValueToShortNameV1Marker,
902
                SentenceBreakValueToLongNameV1Marker
903
            ),
904
            "SB",
905
            SentenceBreak
906
        ),
907
        (
908
            IndicSyllabicCategoryV1Marker,
909
            IndicSyllabicCategoryNameToValueV1Marker,
910
            (
911
                linear: IndicSyllabicCategoryValueToShortNameV1Marker,
912
                IndicSyllabicCategoryValueToLongNameV1Marker
913
            ),
914
            "InSC",
915
            IndicSyllabicCategory
916
        ),
917
        (
918
            JoiningTypeV1Marker,
919
            JoiningTypeNameToValueV1Marker,
920
            (
921
                linear: JoiningTypeValueToShortNameV1Marker,
922
                JoiningTypeValueToLongNameV1Marker
923
            ),
924
            "jt",
925
            JoiningType
926
        ),
927
        // note: the names key for the GCM mask is handled above
928
    )
929
);