summaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/src/base/string.rs6
-rw-r--r--library/src/lib.rs1
-rw-r--r--library/src/prelude.rs2
3 files changed, 8 insertions, 1 deletions
diff --git a/library/src/base/string.rs b/library/src/base/string.rs
index 262dd5c6..9c3b9562 100644
--- a/library/src/base/string.rs
+++ b/library/src/base/string.rs
@@ -14,11 +14,17 @@ pub fn str(_: &Vm, args: &mut Args) -> SourceResult<Value> {
Ok(Value::Str(match v {
Value::Int(v) => format_str!("{}", v),
Value::Float(v) => format_str!("{}", v),
+ Value::Label(label) => label.0.into(),
Value::Str(v) => v,
v => bail!(span, "cannot convert {} to string", v.type_name()),
}))
}
+/// Create a label from a string.
+pub fn label(_: &Vm, args: &mut Args) -> SourceResult<Value> {
+ Ok(Value::Label(Label(args.expect("string")?)))
+}
+
/// Create blind text.
pub fn lorem(_: &Vm, args: &mut Args) -> SourceResult<Value> {
let words: usize = args.expect("number of words")?;
diff --git a/library/src/lib.rs b/library/src/lib.rs
index dd527ed1..ea14c4c1 100644
--- a/library/src/lib.rs
+++ b/library/src/lib.rs
@@ -105,6 +105,7 @@ fn scope() -> Scope {
std.def_fn("cmyk", base::cmyk);
std.def_fn("repr", base::repr);
std.def_fn("str", base::str);
+ std.def_fn("label", base::label);
std.def_fn("regex", base::regex);
std.def_fn("letter", base::letter);
std.def_fn("roman", base::roman);
diff --git a/library/src/prelude.rs b/library/src/prelude.rs
index d2d82d3b..6379e579 100644
--- a/library/src/prelude.rs
+++ b/library/src/prelude.rs
@@ -16,7 +16,7 @@ pub use typst::geom::*;
#[doc(no_inline)]
pub use typst::model::{
array, capability, castable, dict, dynamic, format_str, node, Args, Array, Cast,
- Content, Dict, Finalize, Fold, Func, Node, NodeId, Resolve, Show, Smart, Str,
+ Content, Dict, Finalize, Fold, Func, Label, Node, NodeId, Resolve, Show, Smart, Str,
StyleChain, StyleMap, StyleVec, Unlabellable, Value, Vm,
};
#[doc(no_inline)]