Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP properties return values #1808

Closed
wants to merge 16 commits into from
31 changes: 14 additions & 17 deletions components/properties/src/bidi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@
//! // Create an adapter to provide the data to `BidiInfo`.
//! let provider = icu_testdata::get_provider();
//!
//! let payload = maps::get_bidi_class(&provider).expect("The data should be valid");
//! let data_struct = payload.get();
//! let bc = &data_struct.code_point_trie;
//! let data = maps::get_bidi_class(&provider).expect("The data should be valid");
//! let bc = data.as_borrowed();
//!
//! let adapter = BidiClassAdapter::new(&bc);
//! let adapter = BidiClassAdapter::new(bc);
//! // Resolve embedding levels within the text. Pass `None` to detect the
//! // paragraph level automatically.
//!
Expand All @@ -47,8 +46,8 @@
//! assert_eq!(display, concat!["a", "b", "c", "ג", "ב", "א",]);
//! ```

use crate::maps::CodePointMapDataBorrowed;
use crate::props::BidiClass;
use icu_codepointtrie::CodePointTrie;
use unicode_bidi::data_source::BidiDataSource;
use unicode_bidi::BidiClass as DataSourceBidiClass;

Expand All @@ -65,22 +64,21 @@ use unicode_bidi::BidiClass as DataSourceBidiClass;
///
/// let provider = icu_testdata::get_provider();
///
/// let payload = maps::get_bidi_class(&provider).expect("The data should be valid");
/// let data_struct = payload.get();
/// let bc = &data_struct.code_point_trie;
/// let data = maps::get_bidi_class(&provider).expect("The data should be valid");
/// let bc = data.as_borrowed();
///
/// let adapter = BidiClassAdapter::new(&bc);
/// let adapter = BidiClassAdapter::new(bc);
/// assert_eq!(adapter.bidi_class('a'), DataSourceBidiClass::L);
/// assert_eq!(adapter.bidi_class('ع'), DataSourceBidiClass::AL);
/// ```
pub struct BidiClassAdapter<'a> {
bidi_trie: &'a CodePointTrie<'a, BidiClass>,
data: CodePointMapDataBorrowed<'a, BidiClass>,
}

impl<'a> BidiClassAdapter<'a> {
/// Creates new instance of `BidiClassAdapter`.
pub fn new(bidi_trie: &'a CodePointTrie<'a, BidiClass>) -> BidiClassAdapter<'a> {
BidiClassAdapter { bidi_trie }
pub fn new(data: CodePointMapDataBorrowed<'a, BidiClass>) -> BidiClassAdapter<'a> {
BidiClassAdapter { data }
}
}

Expand All @@ -98,17 +96,16 @@ impl<'a> BidiDataSource for BidiClassAdapter<'a> {
///
/// let provider = icu_testdata::get_provider();
///
/// let payload = maps::get_bidi_class(&provider).expect("The data should be valid");
/// let data_struct = payload.get();
/// let bc = &data_struct.code_point_trie;
/// let data = maps::get_bidi_class(&provider).expect("The data should be valid");
/// let bc = data.as_borrowed();
///
/// let adapter = BidiClassAdapter::new(&bc);
/// let adapter = BidiClassAdapter::new(bc);
/// assert_eq!(adapter.bidi_class('a'), DataSourceBidiClass::L);
/// ```
///
/// [`CodePointTrie`]: icu_codepointtrie::CodePointTrie
fn bidi_class(&self, c: char) -> DataSourceBidiClass {
let bidi_class = self.bidi_trie.get(c as u32);
let bidi_class = self.data.get(c);
match bidi_class {
BidiClass::LeftToRight => DataSourceBidiClass::L,
BidiClass::RightToLeft => DataSourceBidiClass::R,
Expand Down
19 changes: 8 additions & 11 deletions components/properties/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,16 @@
//!
//! // A binary property as a `UnicodeSet`
//!
//! let payload = sets::get_emoji(&provider).expect("The data should be valid");
//! let data_struct = payload.get();
//! let emoji = &data_struct.inv_list;
//! let data = sets::get_emoji(&provider).expect("The data should be valid");
//! let emoji = data.as_borrowed();
//!
//! assert!(emoji.contains('🎃')); // U+1F383 JACK-O-LANTERN
//! assert!(!emoji.contains('木')); // U+6728
//!
//! // An individual enumerated property value as a `UnicodeSet`
//!
//! let payload = maps::get_general_category(&provider).expect("The data should be valid");
//! let data_struct = payload.get();
//! let gc = &data_struct.code_point_trie;
//! let data = maps::get_general_category(&provider).expect("The data should be valid");
//! let gc = data.as_borrowed();
//! let line_sep = gc.get_set_for_value(GeneralCategory::LineSeparator);
//!
//! assert!(line_sep.contains_u32(0x2028));
Expand All @@ -49,12 +47,11 @@
//!
//! let provider = icu_testdata::get_provider();
//!
//! let payload = maps::get_script(&provider).expect("The data should be valid");
//! let data_struct = payload.get();
//! let script = &data_struct.code_point_trie;
//! let map = maps::get_script(&provider).expect("The data should be valid");
//! let script = map.as_borrowed();
//!
//! assert_eq!(script.get('🎃' as u32), Script::Common); // U+1F383 JACK-O-LANTERN
//! assert_eq!(script.get('木' as u32), Script::Han); // U+6728
//! assert_eq!(script.get('🎃'), Script::Common); // U+1F383 JACK-O-LANTERN
//! assert_eq!(script.get('木'), Script::Han); // U+6728
//! ```
//!
//! [`ICU4X`]: ../icu/index.html
Expand Down
Loading