diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-03-07 15:17:13 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-03-07 15:17:13 +0100 |
| commit | 25b5bd117529cd04bb789e1988eb3a3db8025a0e (patch) | |
| tree | 2fbb4650903123da047a1f1f11a0abda95286e12 /library/src/meta/reference.rs | |
| parent | 6ab7760822ccd24b4ef126d4737d41f1be15fe19 (diff) | |
Fully untyped model
Diffstat (limited to 'library/src/meta/reference.rs')
| -rw-r--r-- | library/src/meta/reference.rs | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/library/src/meta/reference.rs b/library/src/meta/reference.rs index e64751f7..55051b5e 100644 --- a/library/src/meta/reference.rs +++ b/library/src/meta/reference.rs @@ -1,7 +1,6 @@ use crate::prelude::*; use crate::text::TextNode; -/// # Reference /// A reference to a label. /// /// *Note: This function is currently unimplemented.* @@ -16,33 +15,18 @@ use crate::text::TextNode; /// created by typing an `@` followed by the name of the label (e.g. `[= /// Introduction <intro>]` can be referenced by typing `[@intro]`). /// -/// ## Parameters -/// - target: `Label` (positional, required) -/// The label that should be referenced. -/// -/// ## Category -/// meta -#[func] -#[capable(Show)] -#[derive(Debug, Hash)] -pub struct RefNode(pub EcoString); - -#[node] -impl RefNode { - fn construct(_: &Vm, args: &mut Args) -> SourceResult<Content> { - Ok(Self(args.expect("target")?).pack()) - } - - fn field(&self, name: &str) -> Option<Value> { - match name { - "target" => Some(Value::Str(self.0.clone().into())), - _ => None, - } - } +/// Display: Reference +/// Category: meta +#[node(Show)] +pub struct RefNode { + /// The label that should be referenced. + #[positional] + #[required] + pub target: EcoString, } impl Show for RefNode { fn show(&self, _: &mut Vt, _: &Content, _: StyleChain) -> SourceResult<Content> { - Ok(TextNode::packed(eco_format!("@{}", self.0))) + Ok(TextNode::packed(eco_format!("@{}", self.target()))) } } |
