#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum BidiControl {
#[default]
None,
Isolate(BidiDirection),
Override(BidiOverride),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BidiDirection {
Auto,
Ltr,
Rtl,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BidiOverride {
Ltr,
Rtl,
}
#[derive(Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
#[repr(transparent)]
pub struct BidiLevel(u8);
impl BidiLevel {
pub const MAX: Self = Self(125);
#[inline(always)]
pub const fn new(level: u8) -> Self {
Self(level)
}
#[inline(always)]
pub const fn to_u8(self) -> u8 {
self.0
}
#[inline(always)]
pub const fn is_ltr(self) -> bool {
self.0.is_multiple_of(2)
}
#[inline(always)]
pub const fn is_rtl(self) -> bool {
!self.is_ltr()
}
#[inline(always)]
pub const fn next_odd(self) -> Self {
Self::new((self.to_u8() + 1) | 1)
}
#[inline(always)]
pub const fn next_even(self) -> Self {
Self::new((self.to_u8() + 2) & !1)
}
}