#[allow(unused_imports)]
use crate::codegen_prelude::*;
pub use read_fonts::tables::variations::EntryFormat;
#[derive(Clone, Debug, Default)]
pub struct DeltaSetIndexMapFormat0 {
pub entry_format: EntryFormat,
pub map_count: u16,
pub map_data: Vec<u8>,
}
impl DeltaSetIndexMapFormat0 {
pub fn new(entry_format: EntryFormat, map_count: u16, map_data: Vec<u8>) -> Self {
Self {
entry_format,
map_count,
map_data: map_data.into_iter().map(Into::into).collect(),
}
}
}
impl FontWrite for DeltaSetIndexMapFormat0 {
#[allow(clippy::unnecessary_cast)]
fn write_into(&self, writer: &mut TableWriter) {
(0 as u8).write_into(writer);
self.entry_format.write_into(writer);
self.map_count.write_into(writer);
self.map_data.write_into(writer);
}
}
impl Validate for DeltaSetIndexMapFormat0 {
fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
}
impl<'a> FromObjRef<read_fonts::tables::variations::DeltaSetIndexMapFormat0<'a>>
for DeltaSetIndexMapFormat0
{
fn from_obj_ref(
obj: &read_fonts::tables::variations::DeltaSetIndexMapFormat0<'a>,
_: FontData,
) -> Self {
let offset_data = obj.offset_data();
DeltaSetIndexMapFormat0 {
entry_format: obj.entry_format(),
map_count: obj.map_count(),
map_data: obj.map_data().to_owned_obj(offset_data),
}
}
}
impl<'a> FromTableRef<read_fonts::tables::variations::DeltaSetIndexMapFormat0<'a>>
for DeltaSetIndexMapFormat0
{
}
impl<'a> FontRead<'a> for DeltaSetIndexMapFormat0 {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::DeltaSetIndexMapFormat0 as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}
#[derive(Clone, Debug, Default)]
pub struct DeltaSetIndexMapFormat1 {
pub entry_format: EntryFormat,
pub map_count: u32,
pub map_data: Vec<u8>,
}
impl DeltaSetIndexMapFormat1 {
pub fn new(entry_format: EntryFormat, map_count: u32, map_data: Vec<u8>) -> Self {
Self {
entry_format,
map_count,
map_data: map_data.into_iter().map(Into::into).collect(),
}
}
}
impl FontWrite for DeltaSetIndexMapFormat1 {
#[allow(clippy::unnecessary_cast)]
fn write_into(&self, writer: &mut TableWriter) {
(1 as u8).write_into(writer);
self.entry_format.write_into(writer);
self.map_count.write_into(writer);
self.map_data.write_into(writer);
}
}
impl Validate for DeltaSetIndexMapFormat1 {
fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
}
impl<'a> FromObjRef<read_fonts::tables::variations::DeltaSetIndexMapFormat1<'a>>
for DeltaSetIndexMapFormat1
{
fn from_obj_ref(
obj: &read_fonts::tables::variations::DeltaSetIndexMapFormat1<'a>,
_: FontData,
) -> Self {
let offset_data = obj.offset_data();
DeltaSetIndexMapFormat1 {
entry_format: obj.entry_format(),
map_count: obj.map_count(),
map_data: obj.map_data().to_owned_obj(offset_data),
}
}
}
impl<'a> FromTableRef<read_fonts::tables::variations::DeltaSetIndexMapFormat1<'a>>
for DeltaSetIndexMapFormat1
{
}
impl<'a> FontRead<'a> for DeltaSetIndexMapFormat1 {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::DeltaSetIndexMapFormat1 as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}
#[derive(Clone, Debug)]
pub enum DeltaSetIndexMap {
Format0(DeltaSetIndexMapFormat0),
Format1(DeltaSetIndexMapFormat1),
}
impl DeltaSetIndexMap {
pub fn format_0(entry_format: EntryFormat, map_count: u16, map_data: Vec<u8>) -> Self {
Self::Format0(DeltaSetIndexMapFormat0::new(
entry_format,
map_count,
map_data,
))
}
pub fn format_1(entry_format: EntryFormat, map_count: u32, map_data: Vec<u8>) -> Self {
Self::Format1(DeltaSetIndexMapFormat1::new(
entry_format,
map_count,
map_data,
))
}
}
impl Default for DeltaSetIndexMap {
fn default() -> Self {
Self::Format0(Default::default())
}
}
impl FontWrite for DeltaSetIndexMap {
fn write_into(&self, writer: &mut TableWriter) {
match self {
Self::Format0(item) => item.write_into(writer),
Self::Format1(item) => item.write_into(writer),
}
}
}
impl Validate for DeltaSetIndexMap {
fn validate_impl(&self, ctx: &mut ValidationCtx) {
match self {
Self::Format0(item) => item.validate_impl(ctx),
Self::Format1(item) => item.validate_impl(ctx),
}
}
}
impl FromObjRef<read_fonts::tables::variations::DeltaSetIndexMap<'_>> for DeltaSetIndexMap {
fn from_obj_ref(obj: &read_fonts::tables::variations::DeltaSetIndexMap, _: FontData) -> Self {
use read_fonts::tables::variations::DeltaSetIndexMap as ObjRefType;
match obj {
ObjRefType::Format0(item) => DeltaSetIndexMap::Format0(item.to_owned_table()),
ObjRefType::Format1(item) => DeltaSetIndexMap::Format1(item.to_owned_table()),
}
}
}
impl FromTableRef<read_fonts::tables::variations::DeltaSetIndexMap<'_>> for DeltaSetIndexMap {}
impl<'a> FontRead<'a> for DeltaSetIndexMap {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::DeltaSetIndexMap as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}
impl FontWrite for EntryFormat {
fn write_into(&self, writer: &mut TableWriter) {
writer.write_slice(&self.bits().to_be_bytes())
}
}
#[derive(Clone, Debug, Default)]
pub struct VariationRegionList {
pub variation_regions: Vec<VariationRegion>,
}
impl VariationRegionList {
pub fn new(variation_regions: Vec<VariationRegion>) -> Self {
Self { variation_regions }
}
}
impl FontWrite for VariationRegionList {
#[allow(clippy::unnecessary_cast)]
fn write_into(&self, writer: &mut TableWriter) {
(self.compute_axis_count() as u16).write_into(writer);
(array_len(&self.variation_regions).unwrap() as u16).write_into(writer);
self.variation_regions.write_into(writer);
}
}
impl Validate for VariationRegionList {
fn validate_impl(&self, ctx: &mut ValidationCtx) {
ctx.in_table("VariationRegionList", |ctx| {
ctx.in_field("variation_regions", |ctx| {
if self.variation_regions.len() > (u16::MAX as usize) {
ctx.report("array excedes max length");
}
self.variation_regions.validate_impl(ctx);
});
})
}
}
impl<'a> FromObjRef<read_fonts::tables::variations::VariationRegionList<'a>>
for VariationRegionList
{
fn from_obj_ref(
obj: &read_fonts::tables::variations::VariationRegionList<'a>,
_: FontData,
) -> Self {
let offset_data = obj.offset_data();
VariationRegionList {
variation_regions: obj
.variation_regions()
.iter()
.filter_map(|x| x.map(|x| FromObjRef::from_obj_ref(&x, offset_data)).ok())
.collect(),
}
}
}
impl<'a> FromTableRef<read_fonts::tables::variations::VariationRegionList<'a>>
for VariationRegionList
{
}
impl<'a> FontRead<'a> for VariationRegionList {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::VariationRegionList as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}
#[derive(Clone, Debug, Default)]
pub struct VariationRegion {
pub region_axes: Vec<RegionAxisCoordinates>,
}
impl VariationRegion {
pub fn new(region_axes: Vec<RegionAxisCoordinates>) -> Self {
Self {
region_axes: region_axes.into_iter().map(Into::into).collect(),
}
}
}
impl FontWrite for VariationRegion {
fn write_into(&self, writer: &mut TableWriter) {
self.region_axes.write_into(writer);
}
}
impl Validate for VariationRegion {
fn validate_impl(&self, ctx: &mut ValidationCtx) {
ctx.in_table("VariationRegion", |ctx| {
ctx.in_field("region_axes", |ctx| {
if self.region_axes.len() > (u16::MAX as usize) {
ctx.report("array excedes max length");
}
self.region_axes.validate_impl(ctx);
});
})
}
}
impl FromObjRef<read_fonts::tables::variations::VariationRegion<'_>> for VariationRegion {
fn from_obj_ref(
obj: &read_fonts::tables::variations::VariationRegion,
offset_data: FontData,
) -> Self {
VariationRegion {
region_axes: obj.region_axes().to_owned_obj(offset_data),
}
}
}
#[derive(Clone, Debug, Default)]
pub struct RegionAxisCoordinates {
pub start_coord: F2Dot14,
pub peak_coord: F2Dot14,
pub end_coord: F2Dot14,
}
impl RegionAxisCoordinates {
pub fn new(start_coord: F2Dot14, peak_coord: F2Dot14, end_coord: F2Dot14) -> Self {
Self {
start_coord,
peak_coord,
end_coord,
}
}
}
impl FontWrite for RegionAxisCoordinates {
fn write_into(&self, writer: &mut TableWriter) {
self.start_coord.write_into(writer);
self.peak_coord.write_into(writer);
self.end_coord.write_into(writer);
}
}
impl Validate for RegionAxisCoordinates {
fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
}
impl FromObjRef<read_fonts::tables::variations::RegionAxisCoordinates> for RegionAxisCoordinates {
fn from_obj_ref(
obj: &read_fonts::tables::variations::RegionAxisCoordinates,
_: FontData,
) -> Self {
RegionAxisCoordinates {
start_coord: obj.start_coord(),
peak_coord: obj.peak_coord(),
end_coord: obj.end_coord(),
}
}
}
#[derive(Clone, Debug, Default)]
pub struct ItemVariationStore {
pub format: u16,
pub variation_region_list: OffsetMarker<VariationRegionList, WIDTH_32>,
pub item_variation_datas: Vec<NullableOffsetMarker<ItemVariationData, WIDTH_32>>,
}
impl ItemVariationStore {
pub fn new(
format: u16,
variation_region_list: VariationRegionList,
item_variation_datas: Vec<Option<ItemVariationData>>,
) -> Self {
Self {
format,
variation_region_list: variation_region_list.into(),
item_variation_datas: item_variation_datas.into_iter().map(Into::into).collect(),
}
}
}
impl FontWrite for ItemVariationStore {
#[allow(clippy::unnecessary_cast)]
fn write_into(&self, writer: &mut TableWriter) {
self.format.write_into(writer);
self.variation_region_list.write_into(writer);
(array_len(&self.item_variation_datas).unwrap() as u16).write_into(writer);
self.item_variation_datas.write_into(writer);
}
}
impl Validate for ItemVariationStore {
fn validate_impl(&self, ctx: &mut ValidationCtx) {
ctx.in_table("ItemVariationStore", |ctx| {
ctx.in_field("variation_region_list", |ctx| {
self.variation_region_list.validate_impl(ctx);
});
ctx.in_field("item_variation_datas", |ctx| {
if self.item_variation_datas.len() > (u16::MAX as usize) {
ctx.report("array excedes max length");
}
self.item_variation_datas.validate_impl(ctx);
});
})
}
}
impl<'a> FromObjRef<read_fonts::tables::variations::ItemVariationStore<'a>> for ItemVariationStore {
fn from_obj_ref(
obj: &read_fonts::tables::variations::ItemVariationStore<'a>,
_: FontData,
) -> Self {
ItemVariationStore {
format: obj.format(),
variation_region_list: obj.variation_region_list().to_owned_table(),
item_variation_datas: obj
.item_variation_datas()
.map(|x| x.to_owned_table())
.collect(),
}
}
}
impl<'a> FromTableRef<read_fonts::tables::variations::ItemVariationStore<'a>>
for ItemVariationStore
{
}
impl<'a> FontRead<'a> for ItemVariationStore {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::ItemVariationStore as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}
#[derive(Clone, Debug, Default)]
pub struct ItemVariationData {
pub item_count: u16,
pub word_delta_count: u16,
pub region_indexes: Vec<u16>,
pub delta_sets: Vec<u8>,
}
impl ItemVariationData {
pub fn new(
item_count: u16,
word_delta_count: u16,
region_indexes: Vec<u16>,
delta_sets: Vec<u8>,
) -> Self {
Self {
item_count,
word_delta_count,
region_indexes: region_indexes.into_iter().map(Into::into).collect(),
delta_sets: delta_sets.into_iter().map(Into::into).collect(),
}
}
}
impl FontWrite for ItemVariationData {
#[allow(clippy::unnecessary_cast)]
fn write_into(&self, writer: &mut TableWriter) {
self.item_count.write_into(writer);
self.word_delta_count.write_into(writer);
(array_len(&self.region_indexes).unwrap() as u16).write_into(writer);
self.region_indexes.write_into(writer);
self.delta_sets.write_into(writer);
}
}
impl Validate for ItemVariationData {
fn validate_impl(&self, ctx: &mut ValidationCtx) {
ctx.in_table("ItemVariationData", |ctx| {
ctx.in_field("region_indexes", |ctx| {
if self.region_indexes.len() > (u16::MAX as usize) {
ctx.report("array excedes max length");
}
});
})
}
}
impl<'a> FromObjRef<read_fonts::tables::variations::ItemVariationData<'a>> for ItemVariationData {
fn from_obj_ref(
obj: &read_fonts::tables::variations::ItemVariationData<'a>,
_: FontData,
) -> Self {
let offset_data = obj.offset_data();
ItemVariationData {
item_count: obj.item_count(),
word_delta_count: obj.word_delta_count(),
region_indexes: obj.region_indexes().to_owned_obj(offset_data),
delta_sets: obj.delta_sets().to_owned_obj(offset_data),
}
}
}
impl<'a> FromTableRef<read_fonts::tables::variations::ItemVariationData<'a>> for ItemVariationData {}
impl<'a> FontRead<'a> for ItemVariationData {
fn read(data: FontData<'a>) -> Result<Self, ReadError> {
<read_fonts::tables::variations::ItemVariationData as FontRead>::read(data)
.map(|x| x.to_owned_table())
}
}