diff options
Diffstat (limited to 'src/library/link.rs')
| -rw-r--r-- | src/library/link.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/library/link.rs b/src/library/link.rs new file mode 100644 index 00000000..114d25a1 --- /dev/null +++ b/src/library/link.rs @@ -0,0 +1,29 @@ +use super::prelude::*; +use crate::util::EcoString; + +/// `link`: Link text or other elements. +pub fn link(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { + let url: String = args.expect::<EcoString>("url")?.into(); + let body = args.find().unwrap_or_else(|| { + let mut text = url.as_str(); + for prefix in ["mailto:", "tel:"] { + text = text.trim_start_matches(prefix); + } + Node::Text(text.into()) + }); + + Ok(Value::Node( + body.styled(Styles::one(LinkNode::URL, Some(url))), + )) +} + +/// Host for link styles. +#[derive(Debug, Hash)] +pub struct LinkNode; + +properties! { + LinkNode, + + /// An URL to link to. + URL: Option<String> = None, +} |
