summaryrefslogtreecommitdiff
path: root/library/src/compute/foundations.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-07-02 19:59:52 +0200
committerLaurenz <laurmaedje@gmail.com>2023-07-02 20:07:43 +0200
commitebfdb1dafa430786db10dad2ef7d5467c1bdbed1 (patch)
tree2bbc24ddb4124c4bb14dec0e536129d4de37b056 /library/src/compute/foundations.rs
parent3ab19185093d7709f824b95b979060ce125389d8 (diff)
Move everything into `crates/` directory
Diffstat (limited to 'library/src/compute/foundations.rs')
-rw-r--r--library/src/compute/foundations.rs215
1 files changed, 0 insertions, 215 deletions
diff --git a/library/src/compute/foundations.rs b/library/src/compute/foundations.rs
deleted file mode 100644
index f83d71a0..00000000
--- a/library/src/compute/foundations.rs
+++ /dev/null
@@ -1,215 +0,0 @@
-use crate::prelude::*;
-
-/// Determines the type of a value.
-///
-/// Returns the name of the value's type.
-///
-/// ## Example { #example }
-/// ```example
-/// #type(12) \
-/// #type(14.7) \
-/// #type("hello") \
-/// #type(none) \
-/// #type([Hi]) \
-/// #type(x => x + 1)
-/// ```
-///
-/// Display: Type
-/// Category: foundations
-#[func]
-pub fn type_(
- /// The value whose type's to determine.
- value: Value,
-) -> Str {
- value.type_name().into()
-}
-
-/// Returns the string representation of a value.
-///
-/// When inserted into content, most values are displayed as this representation
-/// in monospace with syntax-highlighting. The exceptions are `{none}`,
-/// integers, floats, strings, content, and functions.
-///
-/// **Note:** This function is for debugging purposes. Its output should not be
-/// considered stable and may change at any time!
-///
-/// ## Example { #example }
-/// ```example
-/// #none vs #repr(none) \
-/// #"hello" vs #repr("hello") \
-/// #(1, 2) vs #repr((1, 2)) \
-/// #[*Hi*] vs #repr([*Hi*])
-/// ```
-///
-/// Display: Representation
-/// Category: foundations
-#[func]
-pub fn repr(
- /// The value whose string representation to produce.
- value: Value,
-) -> Str {
- value.repr()
-}
-
-/// Fails with an error.
-///
-/// ## Example { #example }
-/// The code below produces the error `panicked with: "this is wrong"`.
-/// ```typ
-/// #panic("this is wrong")
-/// ```
-///
-/// Display: Panic
-/// Category: foundations
-#[func]
-pub fn panic(
- /// The values to panic with.
- #[variadic]
- values: Vec<Value>,
-) -> StrResult<Never> {
- let mut msg = EcoString::from("panicked");
- if !values.is_empty() {
- msg.push_str(" with: ");
- for (i, value) in values.iter().enumerate() {
- if i > 0 {
- msg.push_str(", ");
- }
- msg.push_str(&value.repr());
- }
- }
- Err(msg)
-}
-
-/// Ensures that a condition is fulfilled.
-///
-/// Fails with an error if the condition is not fulfilled. Does not
-/// produce any output in the document.
-///
-/// If you wish to test equality between two values, see
-/// [`assert.eq`]($func/assert.eq) and [`assert.ne`]($func/assert.ne).
-///
-/// ## Example { #example }
-/// ```typ
-/// #assert(1 < 2, message: "math broke")
-/// ```
-///
-/// Display: Assert
-/// Category: foundations
-#[func]
-#[scope(
- scope.define("eq", assert_eq_func());
- scope.define("ne", assert_ne_func());
- scope
-)]
-pub fn assert(
- /// The condition that must be true for the assertion to pass.
- condition: bool,
- /// The error message when the assertion fails.
- #[named]
- message: Option<EcoString>,
-) -> StrResult<NoneValue> {
- if !condition {
- if let Some(message) = message {
- bail!("assertion failed: {message}");
- } else {
- bail!("assertion failed");
- }
- }
- Ok(NoneValue)
-}
-
-/// Ensures that two values are equal.
-///
-/// Fails with an error if the first value is not equal to the second. Does not
-/// produce any output in the document.
-///
-/// ## Example { #example }
-/// ```typ
-/// #assert.eq(10, 10)
-/// ```
-///
-/// Display: Assert Equals
-/// Category: foundations
-#[func]
-pub fn assert_eq(
- /// The first value to compare.
- left: Value,
-
- /// The second value to compare.
- right: Value,
-
- /// An optional message to display on error instead of the representations
- /// of the compared values.
- #[named]
- message: Option<EcoString>,
-) -> StrResult<NoneValue> {
- if left != right {
- if let Some(message) = message {
- bail!("equality assertion failed: {message}");
- } else {
- bail!("equality assertion failed: value {left:?} was not equal to {right:?}");
- }
- }
- Ok(NoneValue)
-}
-
-/// Ensures that two values are not equal.
-///
-/// Fails with an error if the first value is equal to the second. Does not
-/// produce any output in the document.
-///
-/// ## Example { #example }
-/// ```typ
-/// #assert.ne(3, 4)
-/// ```
-///
-/// Display: Assert Not Equals
-/// Category: foundations
-#[func]
-pub fn assert_ne(
- /// The first value to compare.
- left: Value,
-
- /// The second value to compare.
- right: Value,
-
- /// An optional message to display on error instead of the representations
- /// of the compared values.
- #[named]
- message: Option<EcoString>,
-) -> StrResult<NoneValue> {
- if left == right {
- if let Some(message) = message {
- bail!("inequality assertion failed: {message}");
- } else {
- bail!("inequality assertion failed: value {left:?} was equal to {right:?}");
- }
- }
- Ok(NoneValue)
-}
-
-/// Evaluates a string as Typst code.
-///
-/// This function should only be used as a last resort.
-///
-/// ## Example { #example }
-/// ```example
-/// #eval("1 + 1") \
-/// #eval("(1, 2, 3, 4)").len() \
-/// #eval("[*Strong text*]")
-/// ```
-///
-/// Display: Evaluate
-/// Category: foundations
-#[func]
-pub fn eval(
- /// A string of Typst code to evaluate.
- ///
- /// The code in the string cannot interact with the file system.
- source: Spanned<String>,
- /// The virtual machine.
- vm: &mut Vm,
-) -> SourceResult<Value> {
- let Spanned { v: text, span } = source;
- typst::eval::eval_string(vm.world(), &text, span)
-}