diff options
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/library.rs | 7 | ||||
| -rw-r--r-- | src/eval/mod.rs | 11 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/eval/library.rs b/src/eval/library.rs index 13825d7e..25f715f8 100644 --- a/src/eval/library.rs +++ b/src/eval/library.rs @@ -103,6 +103,8 @@ pub struct LangItems { pub math_accent: fn(base: Content, accent: char) -> Content, /// A fraction in math: `x/2`. pub math_frac: fn(num: Content, denom: Content) -> Content, + /// A root in math: `√x`, `∛x` or `∜x`. + pub math_root: fn(index: Option<Content>, radicand: Content) -> Content, /// Dispatch a method on a library value. pub library_method: fn( vm: &mut Vm, @@ -134,9 +136,12 @@ impl Hash for LangItems { self.strong.hash(state); self.emph.hash(state); self.raw.hash(state); + self.raw_languages.hash(state); self.link.hash(state); self.reference.hash(state); + (self.bibliography_keys as usize).hash(state); self.heading.hash(state); + self.heading_func.hash(state); self.list_item.hash(state); self.enum_item.hash(state); self.term_item.hash(state); @@ -146,6 +151,8 @@ impl Hash for LangItems { self.math_attach.hash(state); self.math_accent.hash(state); self.math_frac.hash(state); + self.math_root.hash(state); + (self.library_method as usize).hash(state); } } diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 2719c298..fe1fac3b 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -438,6 +438,7 @@ impl Eval for ast::Expr { Self::MathDelimited(v) => v.eval(vm).map(Value::Content), Self::MathAttach(v) => v.eval(vm).map(Value::Content), Self::MathFrac(v) => v.eval(vm).map(Value::Content), + Self::MathRoot(v) => v.eval(vm).map(Value::Content), Self::Ident(v) => v.eval(vm), Self::None(v) => v.eval(vm), Self::Auto(v) => v.eval(vm), @@ -726,6 +727,16 @@ impl Eval for ast::MathFrac { } } +impl Eval for ast::MathRoot { + type Output = Content; + + fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> { + let index = self.index().map(|i| (vm.items.text)(eco_format!("{i}"))); + let radicand = self.radicand().eval_display(vm)?; + Ok((vm.items.math_root)(index, radicand)) + } +} + impl Eval for ast::Ident { type Output = Value; |
