From 593a4f4666f0bc42790d6d033e64a2b38449090f Mon Sep 17 00:00:00 2001 From: Lorenzo Bodini <32436755+topongo@users.noreply.github.com> Date: Tue, 14 Jan 2025 20:11:56 +0100 Subject: [PATCH] add `log` to expressions (#1271) * feat: add `log` to expressions * changelog: add `log` --- CHANGELOG.md | 1 + crates/simplexpr/src/eval.rs | 8 ++++++++ docs/src/expression_language.md | 1 + 3 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 123475c..96154b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ All notable changes to eww will be listed here, starting at changes since versio - Add `transform-origin-x`/`transform-origin-y` properties to transform widget (By: mario-kr) - Add keyboard support for button presses (By: julianschuler) - Support empty string for safe access operator (By: ModProg) +- Add `log` function calls to simplexpr (By: topongo) ## [0.6.0] (21.04.2024) diff --git a/crates/simplexpr/src/eval.rs b/crates/simplexpr/src/eval.rs index d75c2c4..8ee0d84 100644 --- a/crates/simplexpr/src/eval.rs +++ b/crates/simplexpr/src/eval.rs @@ -500,6 +500,14 @@ fn call_expr_function(name: &str, args: Vec) -> Result Err(EvalError::WrongArgCount(name.to_string())), }, + "log" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_f64()?; + Ok(DynVal::from(f64::log(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, _ => Err(EvalError::UnknownFunction(name.to_string())), } diff --git a/docs/src/expression_language.md b/docs/src/expression_language.md index 726ff79..106776a 100644 --- a/docs/src/expression_language.md +++ b/docs/src/expression_language.md @@ -44,6 +44,7 @@ Supported currently are the following features: - `sin(number)`, `cos(number)`, `tan(number)`, `cot(number)`: Calculate the trigonometric value of a given number in **radians** - `min(a, b)`, `max(a, b)`: Get the smaller or bigger number out of two given numbers - `powi(num, n)`, `powf(num, n)`: Raise number `num` to power `n`. `powi` expects `n` to be of type `i32` + - `log(num, n)`: Calculate the base `n` logarithm of `num`. `num`, `n` and return type are `f64` - `degtorad(number)`: Converts a number from degrees to radians - `radtodeg(number)`: Converts a number from radians to degrees - `replace(string, regex, replacement)`: Replace matches of a given regex in a string