use write_fonts::{
from_obj::ToOwnedTable,
read::{FontRef, TableProvider},
tables::{
self,
variations::ivs_builder::{VariationIndexRemapping, VariationStoreBuilder},
},
types::{Fixed, LongDateTime},
};
use crate::common::GlyphId16;
mod base;
mod gdef;
mod name;
mod os2;
mod stat;
pub(crate) use base::{BASELINE_TAGS, BaseAxisBuilder, BaseBuilder, ScriptRecord};
pub(crate) use gdef::{GdefBuilder, GlyphClassDefExt};
pub(crate) use name::{NameBuilder, NameSpec};
pub(crate) use os2::{CodePageRange, Os2Builder};
pub(crate) use stat::{AxisLocation, AxisRecord, AxisValue, StatBuilder, StatFallbackName};
#[derive(Clone, Debug, Default)]
pub(crate) struct Tables {
pub head: Option<HeadBuilder>,
pub hhea: Option<tables::hhea::Hhea>,
pub vhea: Option<tables::vhea::Vhea>,
pub vmtx: Option<VmtxBuilder>,
pub name: NameBuilder,
pub gdef: Option<GdefBuilder>,
pub base: Option<BaseBuilder>,
pub os2: Option<Os2Builder>,
pub stat: Option<StatBuilder>,
}
#[derive(Clone, Debug, Default)]
pub(crate) struct HeadBuilder {
pub font_revision: Fixed,
}
#[derive(Clone, Debug, Default)]
pub(crate) struct VmtxBuilder {
pub origins_y: Vec<(GlyphId16, i16)>,
pub advances_y: Vec<(GlyphId16, i16)>,
}
const DATE_2011_12_13_H11_M22_S33: LongDateTime = LongDateTime::new(1323780153);
impl HeadBuilder {
pub(crate) fn build(&self, font: Option<&FontRef>) -> write_fonts::tables::head::Head {
let mut head = font
.and_then(|f| f.head().map(|x| x.to_owned_table()).ok())
.unwrap_or_else(|| {
let mut head = write_fonts::tables::head::Head {
created: DATE_2011_12_13_H11_M22_S33,
modified: DATE_2011_12_13_H11_M22_S33,
..Default::default()
};
head.font_direction_hint = 0;
head
});
head.font_revision = self.font_revision;
head
}
}