From ff25573224400673d08b31e576d5a0d87751dbe1 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 30 Aug 2021 16:39:16 +0200 Subject: [PATCH] Lower- and uppercase string conversion functions --- src/library/mod.rs | 2 ++ src/library/utility.rs | 10 ++++++++++ tests/typ/utility/strings.typ | 8 ++++++++ 3 files changed, 20 insertions(+) create mode 100644 tests/typ/utility/strings.typ diff --git a/src/library/mod.rs b/src/library/mod.rs index a549aa727..d02c9608f 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -63,6 +63,8 @@ pub fn new() -> Scope { std.def_func("rgb", rgb); std.def_func("min", min); std.def_func("max", max); + std.def_func("lower", lower); + std.def_func("upper", upper); // Colors. std.def_const("white", RgbaColor::WHITE); diff --git a/src/library/utility.rs b/src/library/utility.rs index 84f1d7ab4..b26ed1549 100644 --- a/src/library/utility.rs +++ b/src/library/utility.rs @@ -75,3 +75,13 @@ fn minmax(args: &mut Arguments, goal: Ordering) -> TypResult { } Ok(extremum) } + +/// `lower`: Convert a string to lowercase. +pub fn lower(_: &mut EvalContext, args: &mut Arguments) -> TypResult { + Ok(args.expect::("string")?.to_lowercase().into()) +} + +/// `upper`: Convert a string to uppercase. +pub fn upper(_: &mut EvalContext, args: &mut Arguments) -> TypResult { + Ok(args.expect::("string")?.to_uppercase().into()) +} diff --git a/tests/typ/utility/strings.typ b/tests/typ/utility/strings.typ new file mode 100644 index 000000000..7c708175c --- /dev/null +++ b/tests/typ/utility/strings.typ @@ -0,0 +1,8 @@ +// Test string functions. +// Ref: false + +--- +#let memes = "ArE mEmEs gReAt?"; +#test(lower(memes), "are memes great?") +#test(upper(memes), "ARE MEMES GREAT?") +#test(upper("Ελλάδα"), "ΕΛΛΆΔΑ")