summaryrefslogtreecommitdiff
path: root/library/src/lib.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-03-19 10:19:24 +0100
committerLaurenz <laurmaedje@gmail.com>2023-03-19 10:19:34 +0100
commit0ba99ab8aa523645e2f0a0d9f6333ad4e48f5daa (patch)
tree2de7ce344b6d579dca8ae346c68b1931a6e79b25 /library/src/lib.rs
parentc7f4d6b12ee3138c752402889eeaa603ac69351d (diff)
Measurement and introspection rework
Diffstat (limited to 'library/src/lib.rs')
-rw-r--r--library/src/lib.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/library/src/lib.rs b/library/src/lib.rs
index 14fea66d..2f951b92 100644
--- a/library/src/lib.rs
+++ b/library/src/lib.rs
@@ -74,6 +74,7 @@ fn global(math: Module, calc: Module) -> Module {
global.define("scale", layout::ScaleNode::id());
global.define("rotate", layout::RotateNode::id());
global.define("hide", layout::HideNode::id());
+ global.define("measure", layout::measure);
// Visualize.
global.define("image", visualize::ImageNode::id());
@@ -92,6 +93,8 @@ fn global(math: Module, calc: Module) -> Module {
global.define("figure", meta::FigureNode::id());
global.define("cite", meta::CiteNode::id());
global.define("bibliography", meta::BibliographyNode::id());
+ global.define("locate", meta::locate);
+ global.define("style", meta::style);
global.define("counter", meta::counter);
global.define("numbering", meta::numbering);
global.define("state", meta::state);
@@ -228,11 +231,11 @@ fn items() -> LangItems {
math::AccentNode::new(base, math::Accent::new(accent)).pack()
},
math_frac: |num, denom| math::FracNode::new(num, denom).pack(),
- 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)
+ library_method: |vm, dynamic, method, args, span| {
+ if let Some(counter) = dynamic.downcast::<meta::Counter>().cloned() {
+ counter.call_method(vm, method, args, span)
+ } else if let Some(state) = dynamic.downcast::<meta::State>().cloned() {
+ state.call_method(vm, method, args, span)
} else {
Err(format!("type {} has no method `{method}`", dynamic.type_name()))
.at(span)