css_minify/optimizations/
font.rs1use crate::optimizations::transformer::Transform;
2use crate::structure::{Parameters, Value};
3
4#[derive(Default, Debug, Clone)]
5pub(crate) struct FontTransformer;
6
7impl Transform for FontTransformer {
8 fn transform_parameters(&self, mut parameters: Parameters) -> Parameters {
9 parameters
10 .iter_mut()
11 .filter(|(name, _)| matches!(name.as_str(), "font-weight"))
12 .for_each(|(_, value): (_, &mut Value)| {
13 *value = value
14 .replace("normal", "400")
15 .replace("bold", "700")
16 .replace('\"', "");
17 });
18 parameters
19 }
20}
21
22#[cfg(test)]
23mod test {
24 use crate::optimizations::font::FontTransformer;
25 use crate::optimizations::transformer::Transform;
26 use crate::structure::{Block, CssEntities, CssEntity, Selector, SelectorWithPseudoClasses};
27 use indexmap::map::IndexMap;
28
29 #[test]
30 fn test_blocks() {
31 assert_eq!(
32 FontTransformer::default().transform_many(CssEntities(vec![CssEntity::Block(Block {
33 selectors: vec![SelectorWithPseudoClasses(
34 Some(Selector::Class("test".into())),
35 vec![],
36 )]
37 .into(),
38 parameters: {
39 let mut tmp = IndexMap::new();
40 tmp.insert("font-weight".into(), "bold".into());
41 tmp.into()
42 },
43 }),])),
44 CssEntities(vec![CssEntity::Block(Block {
45 selectors: vec![SelectorWithPseudoClasses(
46 Some(Selector::Class("test".into())),
47 vec![],
48 )]
49 .into(),
50 parameters: {
51 let mut tmp = IndexMap::new();
52 tmp.insert("font-weight".into(), "700".into());
53 tmp.into()
54 },
55 }),])
56 )
57 }
58}