vector_text_hershey/
lib.rs1#![no_std]
2
3extern crate alloc;
9
10use alloc::vec::Vec;
11use vector_text_core::{Glyph, PackedPoint, Point, Renderer};
12
13include!(concat!(env!("OUT_DIR"), "/hershey_font.rs"));
14
15pub struct HersheyRenderer;
17
18impl Renderer<HersheyFont> for HersheyRenderer {
19 fn render_text(text: &str, font: HersheyFont) -> Vec<Point> {
20 let mut result = Vec::new();
21 let mut x_idx = 0;
22
23 let mapping = font.table();
24
25 for character in text.chars() {
26 if character > 255 as char {
27 continue;
28 }
29
30 let hershey_id = mapping[character as usize] as usize;
31
32 if hershey_id == 0 || hershey_id >= HERSHEY_FONT.len() {
33 continue;
34 }
35
36 if let Some(glyph) = HERSHEY_FONT[hershey_id] {
37 result.extend(glyph.strokes.iter().map(|point| Point {
38 x: point.x as i16 - glyph.left as i16 + x_idx,
39 y: point.y as i16,
40 pen: point.pen,
41 }));
42 x_idx += glyph.right as i16 - glyph.left as i16;
43 }
44 }
45
46 result
47 }
48}