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: boolWhen 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: boolTrue if we’ve seen a command that might read width
width_only: boolStop as soon as the width is settled, rather than drawing the glyph.
have_read_width: boolTrue if we’ve actually read a width
stem_count: usize§x: Fixed§y: Fixed§sbx: FixedX side-bearing
wx: FixedX width
stack: Stack§stack_ix: usize§in_seac: bool§ops_done: u32Number 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>
impl<'a> Evaluator<'a>
fn new( context: &'a dyn CharstringContext, blend_state: Option<BlendState<'a>>, sink: &'a mut dyn CommandSink, ) -> Self
fn evaluate(&mut self, charstring_data: &[u8]) -> Result<(), Error>
fn evaluate_impl( &mut self, charstring_data: &[u8], nesting_depth: u32, ) -> Result<bool, Error>
Sourcefn evaluate_operator(
&mut self,
operator: Operator,
cursor: &mut Cursor<'_>,
nesting_depth: u32,
) -> Result<bool, Error>
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.
fn read_width(&mut self) -> Result<(), Error>
Sourcefn handle_seac(
&mut self,
mode: SeacMode,
nesting_depth: u32,
) -> Result<(), Error>
fn handle_seac( &mut self, mode: SeacMode, nesting_depth: u32, ) -> Result<(), Error>
See endchar in Appendix C at https://adobe-type-tools.github.io/font-tech-notes/pdfs/5177.Type2.pdf#page=35
Sourcefn handle_flex(&mut self) -> Result<(), Error>
fn handle_flex(&mut self) -> Result<(), Error>
Emit two curves for the accumulated flex vectors.
Sourcefn handle_mm_blend(
&mut self,
subr_idx: i32,
num_args: usize,
) -> Result<(), Error>
fn handle_mm_blend( &mut self, subr_idx: i32, num_args: usize, ) -> Result<(), Error>
Handle point blending for multiple master fonts.
Sourcefn handle_build_char(
&mut self,
subr_idx: i32,
num_args: usize,
) -> Result<(), Error>
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.
Sourcefn build_char(&mut self, len: usize) -> &mut [Fixed]
fn build_char(&mut self, len: usize) -> &mut [Fixed]
Returns the BuildCharArray, sized to len zeroed elements on first
use.