• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zbraniecki / icu4x / 13958601093

19 Mar 2025 04:17PM UTC coverage: 74.164% (-1.5%) from 75.71%
13958601093

push

github

web-flow
Clean up properties docs (#6315)

58056 of 78281 relevant lines covered (74.16%)

819371.32 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/ffi/capi/src/script.rs
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
#[diplomat::bridge]
×
6
#[diplomat::abi_rename = "icu4x_{0}_mv1"]
7
#[diplomat::attr(auto, namespace = "icu4x")]
8
pub mod ffi {
9
    use alloc::boxed::Box;
10

11
    use crate::properties_iter::ffi::CodePointRangeIterator;
12
    use crate::properties_sets::ffi::CodePointSetData;
13
    #[cfg(feature = "buffer_provider")]
14
    use crate::{errors::ffi::DataError, provider::ffi::DataProvider};
15

16
    #[diplomat::opaque]
17
    /// An ICU4X ScriptWithExtensions map object, capable of holding a map of codepoints to scriptextensions values
18
    #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions, Struct)]
19
    pub struct ScriptWithExtensions(pub icu_properties::script::ScriptWithExtensions);
20

21
    #[diplomat::opaque]
22
    /// A slightly faster ScriptWithExtensions object
23
    #[diplomat::rust_link(icu::properties::script::ScriptWithExtensionsBorrowed, Struct)]
24
    pub struct ScriptWithExtensionsBorrowed<'a>(
25
        pub icu_properties::script::ScriptWithExtensionsBorrowed<'a>,
26
    );
27
    #[diplomat::opaque]
28
    /// An object that represents the Script_Extensions property for a single character
29
    #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet, Struct)]
30
    pub struct ScriptExtensionsSet<'a>(pub icu_properties::script::ScriptExtensionsSet<'a>);
31

32
    impl ScriptWithExtensions {
33
        /// Create a map for the `Script`/`Script_Extensions` properties, using compiled data.
34
        #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions::new, FnInStruct)]
35
        #[diplomat::rust_link(
36
            icu::properties::script::ScriptWithExtensionsBorrowed::new,
37
            FnInStruct,
38
            hidden
39
        )]
40
        #[diplomat::attr(auto, constructor)]
41
        #[cfg(feature = "compiled_data")]
42
        pub fn create() -> Box<ScriptWithExtensions> {
×
43
            Box::new(ScriptWithExtensions(
×
44
                icu_properties::script::ScriptWithExtensions::new().static_to_owned(),
×
45
            ))
46
        }
×
47

48
        /// Create a map for the `Script`/`Script_Extensions` properties, using compiled data.
49
        #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions::new, FnInStruct)]
50
        #[diplomat::rust_link(
51
            icu::properties::script::ScriptWithExtensionsBorrowed::new,
52
            FnInStruct,
53
            hidden
54
        )]
55
        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
56
        #[cfg(feature = "buffer_provider")]
57
        pub fn create_with_provider(
×
58
            provider: &DataProvider,
59
        ) -> Result<Box<ScriptWithExtensions>, DataError> {
60
            Ok(Box::new(ScriptWithExtensions(
×
61
                icu_properties::script::ScriptWithExtensions::try_new_with_buffer_provider(
×
62
                    provider.get()?,
×
63
                )?,
×
64
            )))
65
        }
×
66

67
        /// Get the Script property value for a code point
68
        #[diplomat::rust_link(
69
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val,
70
            FnInStruct
71
        )]
72
        #[diplomat::rust_link(
73
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val32,
74
            FnInStruct,
75
            hidden
76
        )]
77
        pub fn get_script_val(&self, ch: DiplomatChar) -> u16 {
×
78
            self.0.as_borrowed().get_script_val32(ch).to_icu4c_value()
×
79
        }
×
80

81
        /// Check if the Script_Extensions property of the given code point covers the given script
82
        #[diplomat::rust_link(
83
            icu::properties::script::ScriptWithExtensionsBorrowed::has_script,
84
            FnInStruct
85
        )]
86
        #[diplomat::rust_link(
87
            icu::properties::script::ScriptWithExtensionsBorrowed::has_script32,
88
            FnInStruct,
89
            hidden
90
        )]
91
        pub fn has_script(&self, ch: DiplomatChar, script: u16) -> bool {
×
92
            self.0
×
93
                .as_borrowed()
94
                .has_script32(ch, icu_properties::props::Script::from_icu4c_value(script))
×
95
        }
×
96

97
        /// Borrow this object for a slightly faster variant with more operations
98
        #[diplomat::rust_link(
99
            icu::properties::script::ScriptWithExtensions::as_borrowed,
100
            FnInStruct
101
        )]
102
        #[diplomat::attr(auto, getter)]
103
        pub fn as_borrowed<'a>(&'a self) -> Box<ScriptWithExtensionsBorrowed<'a>> {
×
104
            Box::new(ScriptWithExtensionsBorrowed(self.0.as_borrowed()))
×
105
        }
×
106

107
        /// Get a list of ranges of code points that contain this script in their Script_Extensions values
108
        #[diplomat::rust_link(
109
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_ranges,
110
            FnInStruct
111
        )]
112
        pub fn iter_ranges_for_script<'a>(
×
113
            &'a self,
114
            script: u16,
115
        ) -> Box<CodePointRangeIterator<'a>> {
116
            Box::new(CodePointRangeIterator(Box::new(
×
117
                self.0.as_borrowed().get_script_extensions_ranges(
×
118
                    icu_properties::props::Script::from_icu4c_value(script),
×
119
                ),
120
            )))
121
        }
×
122
    }
123

124
    impl<'a> ScriptWithExtensionsBorrowed<'a> {
125
        /// Get the Script property value for a code point
126
        #[diplomat::rust_link(
127
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val,
128
            FnInStruct
129
        )]
130
        /// Get the Script property value for a code point
131
        #[diplomat::rust_link(
132
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val32,
133
            FnInStruct,
134
            hidden
135
        )]
136
        pub fn get_script_val(&self, ch: DiplomatChar) -> u16 {
×
137
            self.0.get_script_val32(ch).to_icu4c_value()
×
138
        }
×
139
        /// Get the Script property value for a code point
140
        #[diplomat::rust_link(
141
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_val,
142
            FnInStruct
143
        )]
144
        #[diplomat::rust_link(
145
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_val32,
146
            FnInStruct,
147
            hidden
148
        )]
149
        pub fn get_script_extensions_val(&self, ch: DiplomatChar) -> Box<ScriptExtensionsSet<'a>> {
×
150
            Box::new(ScriptExtensionsSet(self.0.get_script_extensions_val32(ch)))
×
151
        }
×
152
        /// Check if the Script_Extensions property of the given code point covers the given script
153
        #[diplomat::rust_link(
154
            icu::properties::script::ScriptWithExtensionsBorrowed::has_script,
155
            FnInStruct
156
        )]
157
        #[diplomat::rust_link(
158
            icu::properties::script::ScriptWithExtensionsBorrowed::has_script32,
159
            FnInStruct,
160
            hidden
161
        )]
162
        pub fn has_script(&self, ch: DiplomatChar, script: u16) -> bool {
×
163
            self.0
×
164
                .has_script32(ch, icu_properties::props::Script::from_icu4c_value(script))
×
165
        }
×
166

167
        /// Build the CodePointSetData corresponding to a codepoints matching a particular script
168
        /// in their Script_Extensions
169
        #[diplomat::rust_link(
170
            icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_set,
171
            FnInStruct
172
        )]
173
        pub fn get_script_extensions_set(&self, script: u16) -> Box<CodePointSetData> {
×
174
            let list = self
×
175
                .0
176
                .get_script_extensions_set(icu_properties::props::Script::from_icu4c_value(script))
×
177
                .into_owned();
178
            let set = icu_properties::CodePointSetData::from_code_point_inversion_list(list);
×
179
            Box::new(CodePointSetData(set))
×
180
        }
×
181
    }
182
    impl<'a> ScriptExtensionsSet<'a> {
183
        /// Check if the Script_Extensions property of the given code point covers the given script
184
        #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::contains, FnInStruct)]
185
        pub fn contains(&self, script: u16) -> bool {
×
186
            self.0
×
187
                .contains(&icu_properties::props::Script::from_icu4c_value(script))
×
188
        }
×
189

190
        /// Get the number of scripts contained in here
191
        #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::iter, FnInStruct)]
192
        #[diplomat::attr(auto, getter)]
193
        pub fn count(&self) -> usize {
×
194
            self.0.array_len()
×
195
        }
×
196

197
        /// Get script at index
198
        #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::iter, FnInStruct)]
199
        pub fn script_at(&self, index: usize) -> Option<u16> {
×
200
            self.0.array_get(index).map(|x| x.to_icu4c_value())
×
201
        }
×
202
    }
203
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc