use std::collections::BTreeMap;
use zenith_core::{BlockStyle, FontProvider, ResolvedToken, Style};
use zenith_layout::{RustybuzzEngine, TextDirection};
use crate::ir::Color;
use super::super::anchor::AnchorMap;
use super::super::chain::ChainAssignments;
use super::super::markdown_resolve::MdBlockMap;
use super::WordMetrics;
#[derive(Clone, Copy)]
pub(in crate::compile) struct ShapeEnv<'a> {
pub(in crate::compile) engine: &'a RustybuzzEngine,
pub(in crate::compile) fonts: &'a dyn FontProvider,
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct NodeShape {
pub(in crate::compile) font_size: f32,
pub(in crate::compile) base_weight: u16,
pub(in crate::compile) direction: TextDirection,
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct EmitStyle<'a> {
pub(in crate::compile) align: &'a str,
pub(in crate::compile) metrics: WordMetrics,
pub(in crate::compile) font_size: f32,
pub(in crate::compile) deco_thickness: f64,
pub(in crate::compile) justify_final_line: bool,
pub(in crate::compile) direction: TextDirection,
pub(in crate::compile) glyph_stroke: (Option<Color>, Option<f64>),
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct TextCompileEnv<'a> {
pub(in crate::compile) resolved: &'a BTreeMap<String, ResolvedToken>,
pub(in crate::compile) style_map: &'a BTreeMap<&'a str, &'a Style>,
pub(in crate::compile) fonts: &'a dyn FontProvider,
pub(in crate::compile) engine: &'a RustybuzzEngine,
pub(in crate::compile) chains: &'a ChainAssignments,
pub(in crate::compile) footnote_markers: &'a BTreeMap<String, String>,
pub(in crate::compile) node_boxes: &'a BTreeMap<String, (f64, f64, f64, f64)>,
pub(in crate::compile) anchors: &'a AnchorMap,
pub(in crate::compile) md_blocks: &'a MdBlockMap,
pub(in crate::compile) page_block_styles: &'a [BlockStyle],
pub(in crate::compile) doc_block_styles: &'a [BlockStyle],
}
pub(in crate::compile) fn empty_md_blocks() -> &'static MdBlockMap {
use std::sync::OnceLock;
static EMPTY: OnceLock<MdBlockMap> = OnceLock::new();
EMPTY.get_or_init(MdBlockMap::new)
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct ChainMemberPlace {
pub(in crate::compile) font_size: f32,
pub(in crate::compile) text_x: f64,
pub(in crate::compile) text_y: f64,
pub(in crate::compile) baseline_grid: Option<f64>,
pub(in crate::compile) glyph_stroke: (Option<Color>, Option<f64>),
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct TabLeaderArgs<'a> {
pub(in crate::compile) font_size: f32,
pub(in crate::compile) node_fill_prop: Option<&'a zenith_core::PropertyValue>,
pub(in crate::compile) node_weight_prop: Option<&'a zenith_core::PropertyValue>,
pub(in crate::compile) node_opacity: f64,
pub(in crate::compile) resolved: &'a BTreeMap<String, ResolvedToken>,
pub(in crate::compile) env: ShapeEnv<'a>,
pub(in crate::compile) text_x: f64,
pub(in crate::compile) text_y: f64,
pub(in crate::compile) ctx: super::super::RenderCtx,
pub(in crate::compile) glyph_stroke: (Option<Color>, Option<f64>),
}
#[derive(Clone, Copy)]
pub(in crate::compile) struct UniformGeom {
pub(in crate::compile) text_x: f64,
pub(in crate::compile) box_w: f64,
}
impl UniformGeom {
pub(in crate::compile) fn at(self, _line_index: usize) -> (f64, f64) {
(self.text_x, self.box_w)
}
}