use super::*;
pub(crate) mod font_family;
pub(crate) mod font_size;
pub(crate) mod font_smoothing;
pub(crate) mod font_style;
pub(crate) mod font_variant_numeric;
pub(crate) mod font_weight;
pub fn font_adaptor(pattern: &[&str], arbitrary: &TailwindArbitrary) -> Result<Box<dyn TailwindInstance>> {
let out = match pattern {
["thin"] => TailwindFontWeight::THIN.boxed(),
["extralight"] => TailwindFontWeight::EXTRA_LIGHT.boxed(),
["light"] => TailwindFontWeight::LIGHT.boxed(),
["normal"] => TailwindFontWeight::NORMAL.boxed(),
["medium"] => TailwindFontWeight::MEDIUM.boxed(),
["semibold"] => TailwindFontWeight::SEMI_BOLD.boxed(),
["bold"] => TailwindFontWeight::BOLD.boxed(),
["extrabold"] => TailwindFontWeight::EXTRA_BOLD.boxed(),
["black"] => TailwindFontWeight::BLACK.boxed(),
["size"] => TailwindFontSize::parse(pattern, arbitrary)?.boxed(),
["size", n] => {
let a = TailwindArbitrary::from(*n);
TailwindFontSize::parse(pattern, &a)?.boxed()
},
["family", rest @ ..] => {
if rest.is_empty() && arbitrary.is_some() {
return Ok(TailwindFontFamily::from(arbitrary.get_properties()).boxed())
}
TailwindFontFamily::from(rest.join("-")).boxed()
},
[n] => {
let a = TailwindArbitrary::from(*n);
maybe_weight(&a)?
},
[_, _rest @ ..] => {
TailwindFontFamily::from(pattern.join("-")).boxed()
},
[] => {
maybe_weight(arbitrary)
.or_else(|_| Ok::<Box<dyn TailwindInstance>, TailwindError>(
TailwindFontFamily::from(arbitrary.get_properties()).boxed()
))?
}
};
Ok(out)
}
fn maybe_weight(arbitrary: &TailwindArbitrary) -> Result<Box<dyn TailwindInstance>> {
let w = arbitrary.as_integer()?;
Ok(TailwindFontWeight::new(w).boxed())
}