encre_css/plugins/typography/font_variant_numeric/
mod.rs1#![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}