Skip to main content

Evaluator

Struct Evaluator 

Source
struct Evaluator<'a> {
Show 20 fields context: &'a dyn CharstringContext, is_type1: bool, blend_state: Option<BlendState<'a>>, sink: &'a mut dyn CommandSink, is_open: bool, is_flexing: bool, seen_width_command: bool, width_only: bool, have_read_width: bool, stem_count: usize, x: Fixed, y: Fixed, sbx: Fixed, wx: Fixed, stack: Stack, stack_ix: usize, in_seac: bool, ops_done: u32, storage: [Fixed; 32], build_char: SmallVec<[Fixed; 32]>,
}
Expand description

Transient state for evaluating a charstring and handling recursive subroutine calls.

Fields§

§context: &'a dyn CharstringContext§is_type1: bool§blend_state: Option<BlendState<'a>>§sink: &'a mut dyn CommandSink§is_open: bool§is_flexing: bool

When the flex state is active, moveto commands simply accumulate vectors on the stack which will be used to emit curves when the flex is finalized

§seen_width_command: bool

True if we’ve seen a command that might read width

§width_only: bool

Stop as soon as the width is settled, rather than drawing the glyph.

§have_read_width: bool

True if we’ve actually read a width

§stem_count: usize§x: Fixed§y: Fixed§sbx: Fixed

X side-bearing

§wx: Fixed

X width

§stack: Stack§stack_ix: usize§in_seac: bool§ops_done: u32

Number of operators or numbers processed so far

§storage: [Fixed; 32]

The transient array that put and get address.

§build_char: SmallVec<[Fixed; 32]>

The BuildCharArray of a multiple master font, sized on first use.

Implementations§

Source§

impl<'a> Evaluator<'a>

Source

fn new( context: &'a dyn CharstringContext, blend_state: Option<BlendState<'a>>, sink: &'a mut dyn CommandSink, ) -> Self

Source

fn evaluate(&mut self, charstring_data: &[u8]) -> Result<(), Error>

Source

fn evaluate_impl( &mut self, charstring_data: &[u8], nesting_depth: u32, ) -> Result<bool, Error>

Source

fn evaluate_operator( &mut self, operator: Operator, cursor: &mut Cursor<'_>, nesting_depth: u32, ) -> Result<bool, Error>

Evaluates a single charstring operator.

Returns Ok(true) if evaluation should continue.

Source

fn read_width(&mut self) -> Result<(), Error>

Source

fn handle_seac( &mut self, mode: SeacMode, nesting_depth: u32, ) -> Result<(), Error>

Source

fn handle_flex(&mut self) -> Result<(), Error>

Emit two curves for the accumulated flex vectors.

Source

fn handle_mm_blend( &mut self, subr_idx: i32, num_args: usize, ) -> Result<(), Error>

Source

fn handle_build_char( &mut self, subr_idx: i32, num_args: usize, ) -> Result<(), Error>

Handles the othersubrs that compute with the BuildCharArray and the blend, 19 to 25 and 27.

Each takes its arguments from the stack and leaves its result there, for the pop that follows. A wrong number of arguments, an index the array cannot hold or a division by zero fails the glyph, as in FreeType.

The array starts out zeroed for each glyph. FreeType keeps one array for the whole font, so a font that reads an element no earlier othersubr in the glyph wrote can differ.

See https://gitlab.freedesktop.org/freetype/freetype/-/blob/80a507a6b8e3d2906ad2c8ba69329bd2fb2a85ef/src/psaux/psintrp.c#L1911

Source

fn build_char(&mut self, len: usize) -> &mut [Fixed]

Returns the BuildCharArray, sized to len zeroed elements on first use.

Source

fn coords_remaining(&self) -> usize

Source

fn ensure_open(&mut self)

Source

fn emit_line(&mut self, x: Fixed, y: Fixed)

Source

fn emit_curves<const N: usize>( &mut self, modes: [PointMode; N], ) -> Result<(), Error>

Source

fn reset_stack(&mut self)

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Evaluator<'a>

§

impl<'a> !Send for Evaluator<'a>

§

impl<'a> !Sync for Evaluator<'a>

§

impl<'a> !UnwindSafe for Evaluator<'a>

§

impl<'a> Freeze for Evaluator<'a>

§

impl<'a> Unpin for Evaluator<'a>

§

impl<'a> UnsafeUnpin for Evaluator<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.