summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorKevin K <xkeviota@gmail.com>2023-08-26 17:35:52 +0200
committerGitHub <noreply@github.com>2023-08-26 17:35:52 +0200
commit45bd58fbaac4419a45246865cf44ded7920d5b84 (patch)
tree871fe5a273b5cd46880e76200284661bf6c7c115 /crates
parentcd13e55dd1577fd98943982b686f245940d5ab72 (diff)
Implement `rev()` method on string (#2013)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/eval/methods.rs1
-rw-r--r--crates/typst/src/eval/str.rs5
2 files changed, 6 insertions, 0 deletions
diff --git a/crates/typst/src/eval/methods.rs b/crates/typst/src/eval/methods.rs
index 6127a807..ed11d8a7 100644
--- a/crates/typst/src/eval/methods.rs
+++ b/crates/typst/src/eval/methods.rs
@@ -82,6 +82,7 @@ pub fn call(
let count = args.named("count")?;
string.replace(vm, pattern, with, count)?.into_value()
}
+ "rev" => string.rev().into_value(),
"trim" => {
let pattern = args.eat()?;
let at = args.named("at")?;
diff --git a/crates/typst/src/eval/str.rs b/crates/typst/src/eval/str.rs
index 30139f10..b21d2ff9 100644
--- a/crates/typst/src/eval/str.rs
+++ b/crates/typst/src/eval/str.rs
@@ -324,6 +324,11 @@ impl Str {
Ok(Self(self.0.repeat(n)))
}
+ /// Reverse the string.
+ pub fn rev(&self) -> Self {
+ self.as_str().graphemes(true).rev().collect::<String>().into()
+ }
+
/// Resolve an index or throw an out of bounds error.
fn locate(&self, index: i64) -> StrResult<usize> {
self.locate_opt(index)?