use crate::prelude::*; use crate::text::TextNode; /// A reference to a label. /// /// Tags: meta. #[func] #[capable(Show)] #[derive(Debug, Hash)] pub struct RefNode(pub EcoString); #[node] impl RefNode { fn construct(_: &Vm, args: &mut Args) -> SourceResult { Ok(Self(args.expect("target")?).pack()) } fn field(&self, name: &str) -> Option { match name { "target" => Some(Value::Str(self.0.clone().into())), _ => None, } } } impl Show for RefNode { fn show(&self, _: &mut Vt, _: &Content, _: StyleChain) -> SourceResult { Ok(TextNode::packed(format_eco!("@{}", self.0))) } }