pub struct GlyphFlags(pub(crate) u32);Expand description
Flags that describe the properties of a glyph.
Tuple Fields§
§0: u32Implementations§
Source§impl GlyphFlags
impl GlyphFlags
Sourcepub const UNSAFE_TO_BREAK: Self
pub const UNSAFE_TO_BREAK: Self
Indicates that if input text is broken at the beginning of the cluster this glyph is part of, then both sides need to be re-shaped, as the result might be different.
On the flip side, it means that when this flag is not present, then it’s safe to break the glyph-run at the beginning of this cluster, and the two sides represent the exact same result one would get if breaking input text at the beginning of this cluster and shaping the two sides separately. This can be used to optimize paragraph layout, by avoiding re-shaping of each line after line-breaking, or limiting the reshaping to a small piece around the breaking point only.
Sourcepub const UNSAFE_TO_CONCAT: Self
pub const UNSAFE_TO_CONCAT: Self
Indicates that if input text is changed on one side of the beginning of the cluster this glyph is part of, then the shaping results for the other side might change. Note that the absence of this flag will NOT by itself mean that it IS safe to concat text. Only two pieces of text both of which clear of this flag can be concatenated safely.
This can be used to optimize paragraph layout, by avoiding re-shaping of each line after line-breaking, by limiting the reshaping to a small piece around the breaking position only, even if the breaking position carries the unsafe-to-break flag or when hyphenation or other text transformation happens at line-break position, in the following way:
- Iterate back from the line-break position until the first cluster start position that is NOT unsafe-to-concat.
- Shape the segment from there till the end of line.
- Check whether the resulting glyph-run also is clear of the unsafe-to-concat at its start-of-text position; if it is, just splice it into place and the line is shaped; If not, move on to a position further back that is clear of unsafe-to-concat and retry from there, and repeat.
At the start of next line a similar algorithm can be implemented. That is:
- Iterate forward from the line-break position until the first cluster start position that is NOT unsafe-to-concat.
- Shape the segment from beginning of the line to that position.
- Check whether the resulting glyph-run also is clear of the unsafe-to-concat at its end-of-text
position; if it is, just splice it into place and the beginning is shaped; If not, move on to a
position further forward that is clear of unsafe-to-concat and retry up to there, and repeat. A
slight complication will arise in the implementation of the algorithm above, because while our
buffer API has a way to return flags for position corresponding to start-of-text, there is currently
no position corresponding to end-of-text. This limitation can be alleviated by shaping more text
than needed and looking for unsafe-to-concat flag within text clusters. The unsafe-to-break flag will
always imply this flag. To use this flag, you must enable the buffer flag
BufferFlags::PRODUCE_UNSAFE_TO_CONCATduring shaping, otherwise the buffer flag will not be reliably produced.
Sourcepub const SAFE_TO_INSERT_TATWEEL: Self
pub const SAFE_TO_INSERT_TATWEEL: Self
In scripts that use elongation (Arabic, Mongolian, Syriac, etc.), this flag signifies that it is safe to insert a U+0640 TATWEEL character before this cluster for elongation. This flag does not determine the script-specific elongation places, but only when it is safe to do the elongation without interrupting text shaping.
pub(crate) const DEFINED_BITS: u32 = 0x0000_0007
Sourcepub const fn from_bits_truncate(bits: u32) -> Self
pub const fn from_bits_truncate(bits: u32) -> Self
Creates a GlyphFlags from the given bits, ignoring any bits that are not defined.
Sourcepub const fn is_unsafe_to_break(self) -> bool
pub const fn is_unsafe_to_break(self) -> bool
Indicates that if input text is broken at the beginning of the cluster this glyph is part of, then both sides need to be re-shaped, as the result might be different.
See Self::UNSAFE_TO_BREAK for more details.
Sourcepub const fn is_unsafe_to_concat(self) -> bool
pub const fn is_unsafe_to_concat(self) -> bool
Indicates that if input text is changed on one side of the beginning of the cluster this glyph is part of, then the shaping results for the other side might change.
See Self::UNSAFE_TO_CONCAT for more details.
Sourcepub const fn is_safe_to_insert_tatweel(self) -> bool
pub const fn is_safe_to_insert_tatweel(self) -> bool
In scripts that use elongation (Arabic, Mongolian, Syriac, etc.), this flag signifies that it is safe to insert a U+0640 TATWEEL character before this cluster for elongation.
See Self::SAFE_TO_INSERT_TATWEEL for more details.
Sourcepub const fn contains(self, other: Self) -> bool
pub const fn contains(self, other: Self) -> bool
Returns true if all of the flags in other are contained within self.
Sourcepub const fn intersects(self, other: Self) -> bool
pub const fn intersects(self, other: Self) -> bool
Returns true if any of the flags in other are contained within self.
Trait Implementations§
Source§impl BitAnd for GlyphFlags
impl BitAnd for GlyphFlags
Source§impl BitAndAssign for GlyphFlags
impl BitAndAssign for GlyphFlags
Source§fn bitand_assign(&mut self, rhs: Self)
fn bitand_assign(&mut self, rhs: Self)
&= operation. Read moreSource§impl BitOr for GlyphFlags
impl BitOr for GlyphFlags
Source§impl BitOrAssign for GlyphFlags
impl BitOrAssign for GlyphFlags
Source§fn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
|= operation. Read moreSource§impl Clone for GlyphFlags
impl Clone for GlyphFlags
Source§fn clone(&self) -> GlyphFlags
fn clone(&self) -> GlyphFlags
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GlyphFlags
impl Debug for GlyphFlags
Source§impl Hash for GlyphFlags
impl Hash for GlyphFlags
Source§impl Not for GlyphFlags
impl Not for GlyphFlags
Source§impl PartialEq for GlyphFlags
impl PartialEq for GlyphFlags
Source§fn eq(&self, other: &GlyphFlags) -> bool
fn eq(&self, other: &GlyphFlags) -> bool
self and other values to be equal, and is used by ==.