#[derive(Clone, Default, Debug)]
struct PerTableData<T> {
ankr: T,
avar: T,
base: T,
cff: T,
cff2: T,
cbdt: T,
cblc: T,
colr: T,
cpal: T,
cmap: T,
cvar: T,
cvt: T,
dsig: T,
ebdt: T,
eblc: T,
feat: T,
fpgm: T,
fvar: T,
gasp: T,
gdef: T,
glyf: T,
gpos: T,
gsub: T,
gvar: T,
hdmx: T,
head: T,
hhea: T,
hmtx: T,
hvar: T,
ift: T,
iftx: T,
jstf: T,
kern: T,
kerx: T,
loca: T,
ltag: T,
math: T,
maxp: T,
meta: T,
morx: T,
mvar: T,
name: T,
os2: T,
post: T,
prep: T,
sbix: T,
stat: T,
svg: T,
trak: T,
varc: T,
vhea: T,
vmtx: T,
vorg: T,
vvar: T,
}
impl<T> PerTableData<T> {
fn init_all(&mut self, f: impl Fn(Tag, &mut T)) {
f(Tag::new(b"ankr"), &mut self.ankr);
f(Tag::new(b"avar"), &mut self.avar);
f(Tag::new(b"BASE"), &mut self.base);
f(Tag::new(b"CFF "), &mut self.cff);
f(Tag::new(b"CFF2"), &mut self.cff2);
f(Tag::new(b"CBDT"), &mut self.cbdt);
f(Tag::new(b"CBLC"), &mut self.cblc);
f(Tag::new(b"COLR"), &mut self.colr);
f(Tag::new(b"CPAL"), &mut self.cpal);
f(Tag::new(b"cmap"), &mut self.cmap);
f(Tag::new(b"cvar"), &mut self.cvar);
f(Tag::new(b"cvt "), &mut self.cvt);
f(Tag::new(b"DSIG"), &mut self.dsig);
f(Tag::new(b"EBDT"), &mut self.ebdt);
f(Tag::new(b"EBLC"), &mut self.eblc);
f(Tag::new(b"feat"), &mut self.feat);
f(Tag::new(b"fpgm"), &mut self.fpgm);
f(Tag::new(b"fvar"), &mut self.fvar);
f(Tag::new(b"gasp"), &mut self.gasp);
f(Tag::new(b"GDEF"), &mut self.gdef);
f(Tag::new(b"glyf"), &mut self.glyf);
f(Tag::new(b"GPOS"), &mut self.gpos);
f(Tag::new(b"GSUB"), &mut self.gsub);
f(Tag::new(b"gvar"), &mut self.gvar);
f(Tag::new(b"hdmx"), &mut self.hdmx);
f(Tag::new(b"head"), &mut self.head);
f(Tag::new(b"hhea"), &mut self.hhea);
f(Tag::new(b"hmtx"), &mut self.hmtx);
f(Tag::new(b"HVAR"), &mut self.hvar);
f(Tag::new(b"IFT "), &mut self.ift);
f(Tag::new(b"IFTX"), &mut self.iftx);
f(Tag::new(b"JSTF"), &mut self.jstf);
f(Tag::new(b"kern"), &mut self.kern);
f(Tag::new(b"kerx"), &mut self.kerx);
f(Tag::new(b"loca"), &mut self.loca);
f(Tag::new(b"ltag"), &mut self.ltag);
f(Tag::new(b"MATH"), &mut self.math);
f(Tag::new(b"maxp"), &mut self.maxp);
f(Tag::new(b"meta"), &mut self.meta);
f(Tag::new(b"morx"), &mut self.morx);
f(Tag::new(b"MVAR"), &mut self.mvar);
f(Tag::new(b"name"), &mut self.name);
f(Tag::new(b"OS/2"), &mut self.os2);
f(Tag::new(b"post"), &mut self.post);
f(Tag::new(b"prep"), &mut self.prep);
f(Tag::new(b"sbix"), &mut self.sbix);
f(Tag::new(b"STAT"), &mut self.stat);
f(Tag::new(b"SVG "), &mut self.svg);
f(Tag::new(b"trak"), &mut self.trak);
f(Tag::new(b"VARC"), &mut self.varc);
f(Tag::new(b"vhea"), &mut self.vhea);
f(Tag::new(b"vmtx"), &mut self.vmtx);
f(Tag::new(b"VORG"), &mut self.vorg);
f(Tag::new(b"VVAR"), &mut self.vvar);
}
}
trait TableDataProvider<'a> where Self: 'a {
type Entry;
fn tables(&self) -> &'a PerTableData<Self::Entry>;
fn table_state(&self, tag: Tag, entry: &'a Self::Entry) -> Option<TableState<'a>>;
fn ankr(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"ankr"), &self.tables().ankr)
}
fn avar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"avar"), &self.tables().avar)
}
fn base(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"BASE"), &self.tables().base)
}
fn cff(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"CFF "), &self.tables().cff)
}
fn cff2(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"CFF2"), &self.tables().cff2)
}
fn cbdt(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"CBDT"), &self.tables().cbdt)
}
fn cblc(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"CBLC"), &self.tables().cblc)
}
fn colr(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"COLR"), &self.tables().colr)
}
fn cpal(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"CPAL"), &self.tables().cpal)
}
fn cmap(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"cmap"), &self.tables().cmap)
}
fn cvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"cvar"), &self.tables().cvar)
}
fn cvt(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"cvt "), &self.tables().cvt)
}
fn dsig(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"DSIG"), &self.tables().dsig)
}
fn ebdt(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"EBDT"), &self.tables().ebdt)
}
fn eblc(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"EBLC"), &self.tables().eblc)
}
fn feat(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"feat"), &self.tables().feat)
}
fn fpgm(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"fpgm"), &self.tables().fpgm)
}
fn fvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"fvar"), &self.tables().fvar)
}
fn gasp(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"gasp"), &self.tables().gasp)
}
fn gdef(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"GDEF"), &self.tables().gdef)
}
fn glyf(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"glyf"), &self.tables().glyf)
}
fn gpos(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"GPOS"), &self.tables().gpos)
}
fn gsub(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"GSUB"), &self.tables().gsub)
}
fn gvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"gvar"), &self.tables().gvar)
}
fn hdmx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"hdmx"), &self.tables().hdmx)
}
fn head(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"head"), &self.tables().head)
}
fn hhea(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"hhea"), &self.tables().hhea)
}
fn hmtx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"hmtx"), &self.tables().hmtx)
}
fn hvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"HVAR"), &self.tables().hvar)
}
fn ift(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"IFT "), &self.tables().ift)
}
fn iftx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"IFTX"), &self.tables().iftx)
}
fn jstf(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"JSTF"), &self.tables().jstf)
}
fn kern(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"kern"), &self.tables().kern)
}
fn kerx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"kerx"), &self.tables().kerx)
}
fn loca(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"loca"), &self.tables().loca)
}
fn ltag(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"ltag"), &self.tables().ltag)
}
fn math(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"MATH"), &self.tables().math)
}
fn maxp(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"maxp"), &self.tables().maxp)
}
fn meta(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"meta"), &self.tables().meta)
}
fn morx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"morx"), &self.tables().morx)
}
fn mvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"MVAR"), &self.tables().mvar)
}
fn name(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"name"), &self.tables().name)
}
fn os2(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"OS/2"), &self.tables().os2)
}
fn post(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"post"), &self.tables().post)
}
fn prep(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"prep"), &self.tables().prep)
}
fn sbix(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"sbix"), &self.tables().sbix)
}
fn stat(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"STAT"), &self.tables().stat)
}
fn svg(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"SVG "), &self.tables().svg)
}
fn trak(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"trak"), &self.tables().trak)
}
fn varc(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"VARC"), &self.tables().varc)
}
fn vhea(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"vhea"), &self.tables().vhea)
}
fn vmtx(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"vmtx"), &self.tables().vmtx)
}
fn vorg(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"VORG"), &self.tables().vorg)
}
fn vvar(&self) -> Option<TableState<'a>> {
self.table_state(Tag::new(b"VVAR"), &self.tables().vvar)
}
}
impl FontTables {
pub fn ankr_data(&self) -> Option<&'_ [u8]> {
self.ankr_state().map(|state| state.data)
}
fn ankr_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.ankr(),
TableSource::Function(func) => func.ankr(),
}
}
pub fn avar_data(&self) -> Option<&'_ [u8]> {
self.avar_state().map(|state| state.data)
}
fn avar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.avar(),
TableSource::Function(func) => func.avar(),
}
}
pub fn base_data(&self) -> Option<&'_ [u8]> {
self.base_state().map(|state| state.data)
}
fn base_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.base(),
TableSource::Function(func) => func.base(),
}
}
pub fn cff_data(&self) -> Option<&'_ [u8]> {
self.cff_state().map(|state| state.data)
}
fn cff_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cff(),
TableSource::Function(func) => func.cff(),
}
}
pub fn cff2_data(&self) -> Option<&'_ [u8]> {
self.cff2_state().map(|state| state.data)
}
fn cff2_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cff2(),
TableSource::Function(func) => func.cff2(),
}
}
pub fn cbdt_data(&self) -> Option<&'_ [u8]> {
self.cbdt_state().map(|state| state.data)
}
fn cbdt_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cbdt(),
TableSource::Function(func) => func.cbdt(),
}
}
pub fn cblc_data(&self) -> Option<&'_ [u8]> {
self.cblc_state().map(|state| state.data)
}
fn cblc_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cblc(),
TableSource::Function(func) => func.cblc(),
}
}
pub fn colr_data(&self) -> Option<&'_ [u8]> {
self.colr_state().map(|state| state.data)
}
fn colr_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.colr(),
TableSource::Function(func) => func.colr(),
}
}
pub fn cpal_data(&self) -> Option<&'_ [u8]> {
self.cpal_state().map(|state| state.data)
}
fn cpal_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cpal(),
TableSource::Function(func) => func.cpal(),
}
}
pub fn cmap_data(&self) -> Option<&'_ [u8]> {
self.cmap_state().map(|state| state.data)
}
fn cmap_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cmap(),
TableSource::Function(func) => func.cmap(),
}
}
pub fn cvar_data(&self) -> Option<&'_ [u8]> {
self.cvar_state().map(|state| state.data)
}
fn cvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cvar(),
TableSource::Function(func) => func.cvar(),
}
}
pub fn cvt_data(&self) -> Option<&'_ [u8]> {
self.cvt_state().map(|state| state.data)
}
fn cvt_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.cvt(),
TableSource::Function(func) => func.cvt(),
}
}
pub fn dsig_data(&self) -> Option<&'_ [u8]> {
self.dsig_state().map(|state| state.data)
}
fn dsig_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.dsig(),
TableSource::Function(func) => func.dsig(),
}
}
pub fn ebdt_data(&self) -> Option<&'_ [u8]> {
self.ebdt_state().map(|state| state.data)
}
fn ebdt_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.ebdt(),
TableSource::Function(func) => func.ebdt(),
}
}
pub fn eblc_data(&self) -> Option<&'_ [u8]> {
self.eblc_state().map(|state| state.data)
}
fn eblc_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.eblc(),
TableSource::Function(func) => func.eblc(),
}
}
pub fn feat_data(&self) -> Option<&'_ [u8]> {
self.feat_state().map(|state| state.data)
}
fn feat_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.feat(),
TableSource::Function(func) => func.feat(),
}
}
pub fn fpgm_data(&self) -> Option<&'_ [u8]> {
self.fpgm_state().map(|state| state.data)
}
fn fpgm_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.fpgm(),
TableSource::Function(func) => func.fpgm(),
}
}
pub fn fvar_data(&self) -> Option<&'_ [u8]> {
self.fvar_state().map(|state| state.data)
}
fn fvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.fvar(),
TableSource::Function(func) => func.fvar(),
}
}
pub fn gasp_data(&self) -> Option<&'_ [u8]> {
self.gasp_state().map(|state| state.data)
}
fn gasp_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.gasp(),
TableSource::Function(func) => func.gasp(),
}
}
pub fn gdef_data(&self) -> Option<&'_ [u8]> {
self.gdef_state().map(|state| state.data)
}
fn gdef_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.gdef(),
TableSource::Function(func) => func.gdef(),
}
}
pub fn glyf_data(&self) -> Option<&'_ [u8]> {
self.glyf_state().map(|state| state.data)
}
fn glyf_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.glyf(),
TableSource::Function(func) => func.glyf(),
}
}
pub fn gpos_data(&self) -> Option<&'_ [u8]> {
self.gpos_state().map(|state| state.data)
}
fn gpos_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.gpos(),
TableSource::Function(func) => func.gpos(),
}
}
pub fn gsub_data(&self) -> Option<&'_ [u8]> {
self.gsub_state().map(|state| state.data)
}
fn gsub_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.gsub(),
TableSource::Function(func) => func.gsub(),
}
}
pub fn gvar_data(&self) -> Option<&'_ [u8]> {
self.gvar_state().map(|state| state.data)
}
fn gvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.gvar(),
TableSource::Function(func) => func.gvar(),
}
}
pub fn hdmx_data(&self) -> Option<&'_ [u8]> {
self.hdmx_state().map(|state| state.data)
}
fn hdmx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.hdmx(),
TableSource::Function(func) => func.hdmx(),
}
}
pub fn head_data(&self) -> Option<&'_ [u8]> {
self.head_state().map(|state| state.data)
}
fn head_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.head(),
TableSource::Function(func) => func.head(),
}
}
pub fn hhea_data(&self) -> Option<&'_ [u8]> {
self.hhea_state().map(|state| state.data)
}
fn hhea_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.hhea(),
TableSource::Function(func) => func.hhea(),
}
}
pub fn hmtx_data(&self) -> Option<&'_ [u8]> {
self.hmtx_state().map(|state| state.data)
}
fn hmtx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.hmtx(),
TableSource::Function(func) => func.hmtx(),
}
}
pub fn hvar_data(&self) -> Option<&'_ [u8]> {
self.hvar_state().map(|state| state.data)
}
fn hvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.hvar(),
TableSource::Function(func) => func.hvar(),
}
}
pub fn ift_data(&self) -> Option<&'_ [u8]> {
self.ift_state().map(|state| state.data)
}
fn ift_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.ift(),
TableSource::Function(func) => func.ift(),
}
}
pub fn iftx_data(&self) -> Option<&'_ [u8]> {
self.iftx_state().map(|state| state.data)
}
fn iftx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.iftx(),
TableSource::Function(func) => func.iftx(),
}
}
pub fn jstf_data(&self) -> Option<&'_ [u8]> {
self.jstf_state().map(|state| state.data)
}
fn jstf_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.jstf(),
TableSource::Function(func) => func.jstf(),
}
}
pub fn kern_data(&self) -> Option<&'_ [u8]> {
self.kern_state().map(|state| state.data)
}
fn kern_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.kern(),
TableSource::Function(func) => func.kern(),
}
}
pub fn kerx_data(&self) -> Option<&'_ [u8]> {
self.kerx_state().map(|state| state.data)
}
fn kerx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.kerx(),
TableSource::Function(func) => func.kerx(),
}
}
pub fn loca_data(&self) -> Option<&'_ [u8]> {
self.loca_state().map(|state| state.data)
}
fn loca_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.loca(),
TableSource::Function(func) => func.loca(),
}
}
pub fn ltag_data(&self) -> Option<&'_ [u8]> {
self.ltag_state().map(|state| state.data)
}
fn ltag_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.ltag(),
TableSource::Function(func) => func.ltag(),
}
}
pub fn math_data(&self) -> Option<&'_ [u8]> {
self.math_state().map(|state| state.data)
}
fn math_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.math(),
TableSource::Function(func) => func.math(),
}
}
pub fn maxp_data(&self) -> Option<&'_ [u8]> {
self.maxp_state().map(|state| state.data)
}
fn maxp_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.maxp(),
TableSource::Function(func) => func.maxp(),
}
}
pub fn meta_data(&self) -> Option<&'_ [u8]> {
self.meta_state().map(|state| state.data)
}
fn meta_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.meta(),
TableSource::Function(func) => func.meta(),
}
}
pub fn morx_data(&self) -> Option<&'_ [u8]> {
self.morx_state().map(|state| state.data)
}
fn morx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.morx(),
TableSource::Function(func) => func.morx(),
}
}
pub fn mvar_data(&self) -> Option<&'_ [u8]> {
self.mvar_state().map(|state| state.data)
}
fn mvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.mvar(),
TableSource::Function(func) => func.mvar(),
}
}
pub fn name_data(&self) -> Option<&'_ [u8]> {
self.name_state().map(|state| state.data)
}
fn name_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.name(),
TableSource::Function(func) => func.name(),
}
}
pub fn os2_data(&self) -> Option<&'_ [u8]> {
self.os2_state().map(|state| state.data)
}
fn os2_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.os2(),
TableSource::Function(func) => func.os2(),
}
}
pub fn post_data(&self) -> Option<&'_ [u8]> {
self.post_state().map(|state| state.data)
}
fn post_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.post(),
TableSource::Function(func) => func.post(),
}
}
pub fn prep_data(&self) -> Option<&'_ [u8]> {
self.prep_state().map(|state| state.data)
}
fn prep_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.prep(),
TableSource::Function(func) => func.prep(),
}
}
pub fn sbix_data(&self) -> Option<&'_ [u8]> {
self.sbix_state().map(|state| state.data)
}
fn sbix_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.sbix(),
TableSource::Function(func) => func.sbix(),
}
}
pub fn stat_data(&self) -> Option<&'_ [u8]> {
self.stat_state().map(|state| state.data)
}
fn stat_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.stat(),
TableSource::Function(func) => func.stat(),
}
}
pub fn svg_data(&self) -> Option<&'_ [u8]> {
self.svg_state().map(|state| state.data)
}
fn svg_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.svg(),
TableSource::Function(func) => func.svg(),
}
}
pub fn trak_data(&self) -> Option<&'_ [u8]> {
self.trak_state().map(|state| state.data)
}
fn trak_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.trak(),
TableSource::Function(func) => func.trak(),
}
}
pub fn varc_data(&self) -> Option<&'_ [u8]> {
self.varc_state().map(|state| state.data)
}
fn varc_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.varc(),
TableSource::Function(func) => func.varc(),
}
}
pub fn vhea_data(&self) -> Option<&'_ [u8]> {
self.vhea_state().map(|state| state.data)
}
fn vhea_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.vhea(),
TableSource::Function(func) => func.vhea(),
}
}
pub fn vmtx_data(&self) -> Option<&'_ [u8]> {
self.vmtx_state().map(|state| state.data)
}
fn vmtx_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.vmtx(),
TableSource::Function(func) => func.vmtx(),
}
}
pub fn vorg_data(&self) -> Option<&'_ [u8]> {
self.vorg_state().map(|state| state.data)
}
fn vorg_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.vorg(),
TableSource::Function(func) => func.vorg(),
}
}
pub fn vvar_data(&self) -> Option<&'_ [u8]> {
self.vvar_state().map(|state| state.data)
}
fn vvar_state(&self) -> Option<TableState<'_>> {
match &self.0 {
TableSource::None => None,
TableSource::Blob(blob) => blob.vvar(),
TableSource::Function(func) => func.vvar(),
}
}
}