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 ).
7 use crate::{errors::ffi::ICU4XError, provider::ffi::ICU4XDataProvider};
9 use diplomat_runtime::DiplomatWriteable;
10 use icu_normalizer::{ComposingNormalizer, DecomposingNormalizer};
13 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer, Struct)]
14 pub struct ICU4XComposingNormalizer(pub ComposingNormalizer);
16 impl ICU4XComposingNormalizer {
17 /// Construct a new ICU4XComposingNormalizer instance for NFC
18 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer::new_nfc, FnInStruct)]
20 provider: &ICU4XDataProvider,
21 ) -> Result<Box<ICU4XComposingNormalizer>, ICU4XError> {
22 Ok(Box::new(ICU4XComposingNormalizer(call_constructor!(
23 ComposingNormalizer::new_nfc [r => Ok(r)],
24 ComposingNormalizer::try_new_nfc_with_any_provider,
25 ComposingNormalizer::try_new_nfc_with_buffer_provider,
30 /// Construct a new ICU4XComposingNormalizer instance for NFKC
31 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer::new_nfkc, FnInStruct)]
33 provider: &ICU4XDataProvider,
34 ) -> Result<Box<ICU4XComposingNormalizer>, ICU4XError> {
35 Ok(Box::new(ICU4XComposingNormalizer(call_constructor!(
36 ComposingNormalizer::new_nfkc [r => Ok(r)],
37 ComposingNormalizer::try_new_nfkc_with_any_provider,
38 ComposingNormalizer::try_new_nfkc_with_buffer_provider,
43 /// Normalize a (potentially ill-formed) UTF8 string
45 /// Errors are mapped to REPLACEMENT CHARACTER
46 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer::normalize_utf8, FnInStruct)]
47 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer::normalize, FnInStruct, hidden)]
48 #[diplomat::rust_link(
49 icu::normalizer::ComposingNormalizer::normalize_to,
53 #[diplomat::rust_link(
54 icu::normalizer::ComposingNormalizer::normalize_utf8_to,
58 pub fn normalize(&self, s: &str, write: &mut DiplomatWriteable) -> Result<(), ICU4XError> {
59 let s = s.as_bytes(); // #2520
60 self.0.normalize_utf8_to(s, write)?;
64 /// Check if a (potentially ill-formed) UTF8 string is normalized
66 /// Errors are mapped to REPLACEMENT CHARACTER
67 #[diplomat::rust_link(icu::normalizer::ComposingNormalizer::is_normalized_utf8, FnInStruct)]
68 #[diplomat::rust_link(
69 icu::normalizer::ComposingNormalizer::is_normalized,
73 pub fn is_normalized(&self, s: &str) -> bool {
74 let s = s.as_bytes(); // #2520
75 self.0.is_normalized_utf8(s)
80 #[diplomat::rust_link(icu::normalizer::DecomposingNormalizer, Struct)]
81 pub struct ICU4XDecomposingNormalizer(pub DecomposingNormalizer);
83 impl ICU4XDecomposingNormalizer {
84 /// Construct a new ICU4XDecomposingNormalizer instance for NFC
85 #[diplomat::rust_link(icu::normalizer::DecomposingNormalizer::new_nfd, FnInStruct)]
87 provider: &ICU4XDataProvider,
88 ) -> Result<Box<ICU4XDecomposingNormalizer>, ICU4XError> {
89 Ok(Box::new(ICU4XDecomposingNormalizer(call_constructor!(
90 DecomposingNormalizer::new_nfd [r => Ok(r)],
91 DecomposingNormalizer::try_new_nfd_with_any_provider,
92 DecomposingNormalizer::try_new_nfd_with_buffer_provider,
97 /// Construct a new ICU4XDecomposingNormalizer instance for NFKC
98 #[diplomat::rust_link(icu::normalizer::DecomposingNormalizer::new_nfkd, FnInStruct)]
100 provider: &ICU4XDataProvider,
101 ) -> Result<Box<ICU4XDecomposingNormalizer>, ICU4XError> {
102 Ok(Box::new(ICU4XDecomposingNormalizer(call_constructor!(
103 DecomposingNormalizer::new_nfkd [r => Ok(r)],
104 DecomposingNormalizer::try_new_nfkd_with_any_provider,
105 DecomposingNormalizer::try_new_nfkd_with_buffer_provider,
110 /// Normalize a (potentially ill-formed) UTF8 string
112 /// Errors are mapped to REPLACEMENT CHARACTER
113 #[diplomat::rust_link(icu::normalizer::DecomposingNormalizer::normalize_utf8, FnInStruct)]
114 #[diplomat::rust_link(
115 icu::normalizer::DecomposingNormalizer::normalize,
119 #[diplomat::rust_link(
120 icu::normalizer::DecomposingNormalizer::normalize_to,
124 #[diplomat::rust_link(
125 icu::normalizer::DecomposingNormalizer::normalize_utf8_to,
129 pub fn normalize(&self, s: &str, write: &mut DiplomatWriteable) -> Result<(), ICU4XError> {
130 let s = s.as_bytes(); // #2520
131 self.0.normalize_utf8_to(s, write)?;
135 /// Check if a (potentially ill-formed) UTF8 string is normalized
137 /// Errors are mapped to REPLACEMENT CHARACTER
138 #[diplomat::rust_link(
139 icu::normalizer::DecomposingNormalizer::is_normalized_utf8,
142 #[diplomat::rust_link(
143 icu::normalizer::DecomposingNormalizer::is_normalized,
147 pub fn is_normalized(&self, s: &str) -> bool {
148 let s = s.as_bytes(); // #2520
149 self.0.is_normalized_utf8(s)