From 07ae295ebde47861f112c731bd9a5f5a52541dfb Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 13 Jul 2021 15:33:07 +0000 Subject: [PATCH] Merge pull request #55 from messense/ascii --- --- a/crates/jrsonnet-evaluator/src/builtin/mod.rs +++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs @@ -126,6 +126,8 @@ ("strReplace".into(), builtin_str_replace), ("splitLimit".into(), builtin_splitlimit), ("parseJson".into(), builtin_parse_json), + ("asciiUpper".into(), builtin_ascii_upper), + ("asciiLower".into(), builtin_ascii_lower), ].iter().cloned().collect() }; } @@ -828,6 +830,30 @@ }) } +fn builtin_ascii_upper( + context: Context, + _loc: Option<&ExprLocation>, + args: &ArgsDesc, +) -> Result { + parse_args!(context, "asciiUpper", args, 1, [ + 0, str: ty!(string) => Val::Str; + ], { + Ok(Val::Str(str.to_ascii_uppercase().into())) + }) +} + +fn builtin_ascii_lower( + context: Context, + _loc: Option<&ExprLocation>, + args: &ArgsDesc, +) -> Result { + parse_args!(context, "asciiLower", args, 1, [ + 0, str: ty!(string) => Val::Str; + ], { + Ok(Val::Str(str.to_ascii_lowercase().into())) + }) +} + pub fn call_builtin( context: Context, loc: Option<&ExprLocation>, --- a/crates/jrsonnet-evaluator/src/lib.rs +++ b/crates/jrsonnet-evaluator/src/lib.rs @@ -1045,4 +1045,10 @@ .unwrap_err(); assert_eq!(error.error().to_string(), "assert failed: is number"); } + + #[test] + fn test_ascii_upper_lower() { + assert_eval!(r#"std.assertEqual(std.asciiUpper("aBc😀"), "ABC😀")"#); + assert_eval!(r#"std.assertEqual(std.asciiLower("aBc😀"), "abc😀")"#); + } } --- a/crates/jrsonnet-stdlib/src/std.jsonnet +++ b/crates/jrsonnet-stdlib/src/std.jsonnet @@ -128,21 +128,9 @@ strReplace:: $intrinsic(strReplace), - asciiUpper(str):: - local cp = std.codepoint; - local up_letter(c) = if cp(c) >= 97 && cp(c) < 123 then - std.char(cp(c) - 32) - else - c; - std.join('', std.map(up_letter, std.stringChars(str))), + asciiUpper:: $intrinsic(asciiUpper), - asciiLower(str):: - local cp = std.codepoint; - local down_letter(c) = if cp(c) >= 65 && cp(c) < 91 then - std.char(cp(c) + 32) - else - c; - std.join('', std.map(down_letter, std.stringChars(str))), + asciiLower:: $intrinsic(asciiLower), range:: $intrinsic(range), -- gitstuff