diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-03-17 14:39:30 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-03-17 16:04:12 +0100 |
| commit | c47e4cb4969836e7fb8955361728105555b6d722 (patch) | |
| tree | 08b613938b7bc7b82ae358aa8f117af11c1db6a8 /library/src/lib.rs | |
| parent | 312197b276748e1a17258ad21837850f582a467c (diff) | |
State
Diffstat (limited to 'library/src/lib.rs')
| -rw-r--r-- | library/src/lib.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/library/src/lib.rs b/library/src/lib.rs index b397bfb4..83dbe17a 100644 --- a/library/src/lib.rs +++ b/library/src/lib.rs @@ -10,6 +10,7 @@ pub mod symbols; pub mod text; pub mod visualize; +use typst::diag::At; use typst::eval::{LangItems, Library, Module, Scope}; use typst::geom::{Align, Color, Dir, GenAlign, Smart}; use typst::model::{Node, NodeId, StyleMap}; @@ -93,6 +94,7 @@ fn global(math: Module, calc: Module) -> Module { global.define("bibliography", meta::BibliographyNode::id()); global.define("counter", meta::counter); global.define("numbering", meta::numbering); + global.define("state", meta::state); // Symbols. global.define("sym", symbols::sym()); @@ -225,6 +227,15 @@ fn items() -> LangItems { math::AccentNode::new(base, math::Accent::new(accent)).pack() }, math_frac: |num, denom| math::FracNode::new(num, denom).pack(), - counter_method: meta::counter_method, + library_method: |dynamic, method, args, span| { + if let Some(counter) = dynamic.downcast().cloned() { + meta::counter_method(counter, method, args, span) + } else if let Some(state) = dynamic.downcast().cloned() { + meta::state_method(state, method, args, span) + } else { + Err(format!("type {} has no method `{method}`", dynamic.type_name())) + .at(span) + } + }, } } |
