#[cfg(feature = "fs")]
use std::collections::HashMap;
#[cfg(feature = "fs")]
use serde_json::{Map, Value};
pub(crate) mod color;
pub use color::ColorGlyphSelection;
#[cfg(feature = "fs")]
pub enum GlyphChange {
Added { name: Option<String> },
Changed { name: Option<String> },
Removed,
}
#[cfg(feature = "fs")]
pub struct GlyphChangeEntry {
pub path: String,
pub change_type: String,
pub name: Option<String>,
}
#[cfg(feature = "fs")]
pub enum RegenerationFiles {
Single(Vec<String>),
Variants(Vec<VariantFileSet>),
}
#[cfg(feature = "fs")]
pub struct VariantFileSet {
pub variant: String,
pub files: Vec<String>,
}
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "lowercase")
)]
pub enum FontType {
Svg,
Ttf,
Eot,
Woff,
Woff2,
}
#[derive(Clone)]
#[cfg_attr(
feature = "cli",
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
#[cfg(feature = "fs")]
pub struct FontVariant {
pub name: String,
pub files: Vec<String>,
pub weight: Option<u16>,
pub default: Option<bool>,
}
#[derive(Clone, Copy, PartialEq, Eq)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "lowercase")
)]
pub enum MissingGlyphBehavior {
Blank,
Error,
Fallback,
}
#[derive(Clone)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct MissingGlyphOptions {
pub behavior: MissingGlyphBehavior,
pub variant: Option<String>,
}
impl FontType {
#[inline]
pub fn css_format(self) -> &'static str {
match self {
FontType::Svg => "svg",
FontType::Ttf => "truetype",
FontType::Eot => "embedded-opentype",
FontType::Woff => "woff",
FontType::Woff2 => "woff2",
}
}
#[inline]
pub fn as_extension(self) -> &'static str {
match self {
FontType::Svg => "svg",
FontType::Ttf => "ttf",
FontType::Eot => "eot",
FontType::Woff => "woff",
FontType::Woff2 => "woff2",
}
}
}
#[derive(Clone, Default)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct SvgFormatOptions {
pub center_vertically: Option<bool>,
pub font_id: Option<String>,
pub metadata: Option<String>,
pub optimize_output: Option<bool>,
pub preserve_aspect_ratio: Option<bool>,
}
#[derive(Clone)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct TtfFormatOptions {
pub copyright: Option<String>,
pub description: Option<String>,
pub ts: Option<i64>,
pub url: Option<String>,
pub version: Option<String>,
}
#[derive(Clone)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct WoffFormatOptions {
pub metadata: Option<String>,
}
#[derive(Clone)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct Woff2FormatOptions {
pub compression_quality: Option<u8>,
}
#[derive(Clone, Default)]
#[cfg_attr(
any(feature = "cli", feature = "in_memory"),
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct FormatOptions {
pub svg: Option<SvgFormatOptions>,
pub ttf: Option<TtfFormatOptions>,
pub woff: Option<WoffFormatOptions>,
pub woff2: Option<Woff2FormatOptions>,
}
#[derive(Clone)]
pub struct TemplateVariant {
pub name: String,
pub weight: u32,
pub default: bool,
pub class_name: String,
pub selector: String,
}
#[derive(Clone)]
#[cfg(feature = "fs")]
pub struct CssContext {
pub color_slots: HashMap<String, u32>,
pub font_name: String,
pub src: String,
pub codepoints: HashMap<String, String>,
pub variants: Option<Vec<TemplateVariant>>,
pub variant_class_prefix: Option<String>,
pub default_weight: Option<u32>,
pub font_style: Option<String>,
}
#[derive(Clone)]
#[cfg(feature = "fs")]
pub struct HtmlContext {
pub font_name: String,
pub names: Vec<String>,
pub styles: String,
pub codepoints: HashMap<String, u32>,
pub variants: Option<Vec<TemplateVariant>>,
pub variant_class_prefix: Option<String>,
pub default_weight: Option<u32>,
pub font_style: Option<String>,
}
#[derive(Clone, Default)]
#[cfg_attr(
feature = "cli",
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
#[cfg(feature = "fs")]
pub struct GenerateWebfontsOptions {
#[cfg_attr(
feature = "cli",
serde(default, deserialize_with = "color::deserialize_selection")
)]
pub color_glyphs: Option<ColorGlyphSelection>,
pub color_slots: Option<HashMap<String, String>>,
pub cache_location: Option<String>,
pub ascent: Option<f64>,
pub center_horizontally: Option<bool>,
pub center_vertically: Option<bool>,
pub css: Option<bool>,
pub css_dest: Option<String>,
pub css_template: Option<String>,
pub codepoints: Option<HashMap<String, u32>>,
pub css_fonts_url: Option<String>,
pub descent: Option<f64>,
pub dest: String,
#[cfg_attr(feature = "cli", serde(default))]
pub files: Vec<String>,
pub fixed_width: Option<bool>,
pub format_options: Option<FormatOptions>,
pub html: Option<bool>,
pub ts: Option<bool>,
pub ts_dest: Option<String>,
pub html_dest: Option<String>,
pub html_template: Option<String>,
pub incremental: Option<bool>,
pub font_height: Option<f64>,
pub font_name: Option<String>,
pub font_style: Option<String>,
pub font_weight: Option<String>,
pub ligature: Option<bool>,
pub missing_glyphs: Option<MissingGlyphOptions>,
pub normalize: Option<bool>,
pub order: Option<Vec<FontType>>,
pub optimize_output: Option<bool>,
pub preserve_aspect_ratio: Option<bool>,
pub round: Option<f64>,
pub start_codepoint: Option<u32>,
pub template_options: Option<Map<String, Value>>,
pub threads: Option<std::num::NonZeroUsize>,
pub types: Option<Vec<FontType>>,
pub variant_class_prefix: Option<String>,
pub variants: Option<Vec<FontVariant>>,
pub write_files: Option<bool>,
}