encre_css/plugins/typography/font_variant_numeric/
mod.rs

1#![doc = include_str!("README.md")]
2#![doc(alias = "typography")]
3use crate::prelude::build_plugin::*;
4
5#[derive(Debug)]
6pub(crate) struct PluginDefinition;
7
8impl Plugin for PluginDefinition {
9    fn can_handle(&self, context: ContextCanHandle) -> bool {
10        matches!(
11            context.modifier,
12            Modifier::Builtin {
13                value: "normal-nums"
14                    | "ordinal"
15                    | "slashed-zero"
16                    | "lining-nums"
17                    | "oldstyle-nums"
18                    | "proportional-nums"
19                    | "tabular-nums"
20                    | "diagonal-fractions"
21                    | "stacked-fractions",
22                ..
23            }
24        )
25    }
26
27    fn handle(&self, context: &mut ContextHandle) {
28        match context.modifier {
29            Modifier::Builtin { value, .. } => match *value {
30                "normal-nums" => return context.buffer.line("font-variant-numeric: normal;"),
31                "ordinal" => context.buffer.line("--en-ordinal: ordinal;"),
32                "slashed-zero" => context.buffer.line("--en-slashed-zero: slashed-zero;"),
33                "lining-nums" => context.buffer.line("--en-numeric-figure: lining-nums;"),
34                "oldstyle-nums" => context.buffer.line("--en-numeric-figure: oldstyle-nums;"),
35                "proportional-nums" => {
36                    context
37                        .buffer
38                        .line("--en-numeric-spacing: proportional-nums;");
39                }
40                "tabular-nums" => context.buffer.line("--en-numeric-spacing: tabular-nums;"),
41                "diagonal-fractions" => {
42                    context
43                        .buffer
44                        .line("--en-numeric-fraction: diagonal-fractions;");
45                }
46                "stacked-fractions" => {
47                    context
48                        .buffer
49                        .line("--en-numeric-fraction: stacked-fractions;");
50                }
51                _ => unreachable!(),
52            },
53            Modifier::Arbitrary { .. } => unreachable!(),
54        }
55
56        context.buffer.line("font-variant-numeric: var(--en-ordinal) var(--en-slashed-zero) var(--en-numeric-figure) var(--en-numeric-spacing) var(--en-numeric-fraction);");
57    }
58}