use crate::maps::CodePointMapDataBorrowed;
use crate::props::BidiClass;
use unicode_bidi::data_source::BidiDataSource;
use unicode_bidi::BidiClass as DataSourceBidiClass;
pub struct BidiClassAdapter<'a> {
data: CodePointMapDataBorrowed<'a, BidiClass>,
}
impl<'a> BidiClassAdapter<'a> {
pub fn new(data: CodePointMapDataBorrowed<'a, BidiClass>) -> BidiClassAdapter<'a> {
BidiClassAdapter { data }
}
}
impl<'a> BidiDataSource for BidiClassAdapter<'a> {
fn bidi_class(&self, c: char) -> DataSourceBidiClass {
let bidi_class = self.data.get(c);
match bidi_class {
BidiClass::LeftToRight => DataSourceBidiClass::L,
BidiClass::RightToLeft => DataSourceBidiClass::R,
BidiClass::EuropeanNumber => DataSourceBidiClass::EN,
BidiClass::EuropeanSeparator => DataSourceBidiClass::ES,
BidiClass::EuropeanTerminator => DataSourceBidiClass::ET,
BidiClass::ArabicNumber => DataSourceBidiClass::AN,
BidiClass::CommonSeparator => DataSourceBidiClass::CS,
BidiClass::ParagraphSeparator => DataSourceBidiClass::B,
BidiClass::SegmentSeparator => DataSourceBidiClass::S,
BidiClass::WhiteSpace => DataSourceBidiClass::WS,
BidiClass::OtherNeutral => DataSourceBidiClass::ON,
BidiClass::LeftToRightEmbedding => DataSourceBidiClass::LRE,
BidiClass::LeftToRightOverride => DataSourceBidiClass::LRO,
BidiClass::ArabicLetter => DataSourceBidiClass::AL,
BidiClass::RightToLeftEmbedding => DataSourceBidiClass::RLE,
BidiClass::RightToLeftOverride => DataSourceBidiClass::RLO,
BidiClass::PopDirectionalFormat => DataSourceBidiClass::PDF,
BidiClass::NonspacingMark => DataSourceBidiClass::NSM,
BidiClass::BoundaryNeutral => DataSourceBidiClass::BN,
BidiClass::FirstStrongIsolate => DataSourceBidiClass::FSI,
BidiClass::LeftToRightIsolate => DataSourceBidiClass::LRI,
BidiClass::RightToLeftIsolate => DataSourceBidiClass::RLI,
BidiClass::PopDirectionalIsolate => DataSourceBidiClass::PDI,
_ =>
{
DataSourceBidiClass::ON
}
}
}
}