pub struct BidiLevel(/* private fields */);
Expand description
Embedding Level
Embedding Levels are numbers between 0 and 126 (inclusive), where even values denote a left-to-right (LTR) direction and odd values a right-to-left (RTL) direction.
This struct maintains a valid status for level numbers, meaning that creating a new level, or
mutating an existing level, with the value smaller than 0
(before conversion to u8
) or
larger than 125 results in an Error
.
Implementations§
§impl Level
impl Level
pub fn max_implicit_depth() -> u8
pub fn max_implicit_depth() -> u8
Maximum depth of the directional status stack during implicit resolutions.
pub fn max_explicit_depth() -> u8
pub fn max_explicit_depth() -> u8
Maximum depth of the directional status stack during explicit resolutions.
pub fn new(number: u8) -> Result<Level, Error>
pub fn new(number: u8) -> Result<Level, Error>
Create new level, fail if number is larger than max_depth + 1
.
pub fn new_explicit(number: u8) -> Result<Level, Error>
pub fn new_explicit(number: u8) -> Result<Level, Error>
Create new level, fail if number is larger than max_depth
.
pub fn raise(&mut self, amount: u8) -> Result<(), Error>
pub fn raise(&mut self, amount: u8) -> Result<(), Error>
Raise level by amount
, fail if number is larger than max_depth + 1
.
pub fn raise_explicit(&mut self, amount: u8) -> Result<(), Error>
pub fn raise_explicit(&mut self, amount: u8) -> Result<(), Error>
Raise level by amount
, fail if number is larger than max_depth
.
pub fn lower(&mut self, amount: u8) -> Result<(), Error>
pub fn lower(&mut self, amount: u8) -> Result<(), Error>
Lower level by amount
, fail if number goes below zero.
pub fn new_explicit_next_ltr(&self) -> Result<Level, Error>
pub fn new_explicit_next_ltr(&self) -> Result<Level, Error>
The next LTR (even) level greater than this, or fail if number is larger than max_depth
.
pub fn new_explicit_next_rtl(&self) -> Result<Level, Error>
pub fn new_explicit_next_rtl(&self) -> Result<Level, Error>
The next RTL (odd) level greater than this, or fail if number is larger than max_depth
.
pub fn new_lowest_ge_rtl(&self) -> Result<Level, Error>
pub fn new_lowest_ge_rtl(&self) -> Result<Level, Error>
The lowest RTL (odd) level greater than or equal to this, or fail if number is larger than
max_depth + 1
.
pub fn bidi_class(&self) -> BidiClass
pub fn bidi_class(&self) -> BidiClass
Generate a character type based on a level (as specified in steps X10 and N2).
pub fn vec(v: &[u8]) -> Vec<Level>
pub fn from_slice_unchecked(v: &[u8]) -> &[Level]
pub fn from_slice_unchecked(v: &[u8]) -> &[Level]
Converts a byte slice to a slice of Levels
Does not check if each level is within bounds (<=
[MAX_IMPLICIT_DEPTH
]),
which is not a requirement for safety but is a requirement for correctness of the algorithm.
Trait Implementations§
§impl Ord for Level
impl Ord for Level
§impl PartialOrd for Level
impl PartialOrd for Level
impl Copy for Level
impl Eq for Level
impl StructuralPartialEq for Level
Auto Trait Implementations§
impl Freeze for Level
impl RefUnwindSafe for Level
impl Send for Level
impl Sync for Level
impl Unpin for Level
impl UnwindSafe for Level
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
source§impl<T> AnyVarValue for Twhere
T: VarValue,
impl<T> AnyVarValue for Twhere
T: VarValue,
source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
dyn Any
methods.source§fn clone_boxed(&self) -> Box<dyn AnyVarValue>
fn clone_boxed(&self) -> Box<dyn AnyVarValue>
source§fn clone_boxed_var(&self) -> Box<dyn AnyVar>
fn clone_boxed_var(&self) -> Box<dyn AnyVar>
LocalVar<Self>
.source§fn eq_any(&self, other: &(dyn AnyVarValue + 'static)) -> bool
fn eq_any(&self, other: &(dyn AnyVarValue + 'static)) -> bool
self
equals other
.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FsChangeNote for T
impl<T> FsChangeNote for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more