pub struct TextShaper { /* private fields */ }Expand description
Text shaper using HarfBuzz via rustybuzz
Implementations§
Source§impl TextShaper
impl TextShaper
Sourcepub fn new() -> TextShaper
pub fn new() -> TextShaper
Create a new text shaper with default settings
Sourcepub fn with_cache_size(max_cache_size: usize) -> TextShaper
pub fn with_cache_size(max_cache_size: usize) -> TextShaper
Create a new text shaper with a specific cache size
Sourcepub fn detect_grapheme_clusters<'a>(
&self,
text: &'a str,
) -> Vec<(usize, &'a str)>
pub fn detect_grapheme_clusters<'a>( &self, text: &'a str, ) -> Vec<(usize, &'a str)>
Detect grapheme clusters in the input text
This is crucial for:
- Regional indicator pairs (flag emoji like 🇺🇸)
- ZWJ sequences (emoji like 👨👩👧👦)
- Combining characters (diacritics like é)
- Emoji with skin tone modifiers (👋🏽)
Sourcepub fn is_regional_indicator_pair(&self, grapheme: &str) -> bool
pub fn is_regional_indicator_pair(&self, grapheme: &str) -> bool
Detect regional indicator pairs (flag emoji)
Regional indicators are pairs of characters U+1F1E6-U+1F1FF that combine to form flag emoji (e.g., 🇺🇸 = U+1F1FA + U+1F1F8)
Sourcepub fn contains_zwj(&self, grapheme: &str) -> bool
pub fn contains_zwj(&self, grapheme: &str) -> bool
Check if a grapheme contains a Zero Width Joiner (ZWJ)
ZWJ sequences are used for complex emoji like family emoji (👨👩👧👦)
Sourcepub fn shape_text(
&mut self,
text: &str,
font_data: &[u8],
font_index: usize,
options: ShapingOptions,
) -> Arc<ShapedRun>
pub fn shape_text( &mut self, text: &str, font_data: &[u8], font_index: usize, options: ShapingOptions, ) -> Arc<ShapedRun>
Shape a text run using rustybuzz
This performs the actual text shaping, applying OpenType features like ligatures, kerning, and contextual alternates.
§Arguments
text- The text to shapefont_data- The font data (TrueType/OpenType)font_index- Font index for cache keyoptions- Shaping options
§Returns
A ShapedRun containing the shaped glyphs and metadata
Sourcepub fn clear_cache(&mut self)
pub fn clear_cache(&mut self)
Clear the shape cache
Sourcepub fn cache_size(&self) -> usize
pub fn cache_size(&self) -> usize
Get the current cache size
Trait Implementations§
Source§impl Default for TextShaper
impl Default for TextShaper
Source§fn default() -> TextShaper
fn default() -> TextShaper
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for TextShaper
impl RefUnwindSafe for TextShaper
impl Send for TextShaper
impl Sync for TextShaper
impl Unpin for TextShaper
impl UnsafeUnpin for TextShaper
impl UnwindSafe for TextShaper
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
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.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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>
Converts
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>
Converts
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().