From 0b6a1a49e899c9e360fae6e514d1f20056733384 Mon Sep 17 00:00:00 2001 From: Jonatan Heyman Date: Sun, 31 Dec 2023 10:43:42 +0100 Subject: [PATCH] Add support for specifying a custom format function within a math block (#99) --- src/editor/block/math.js | 11 ++++++++++- tests/math.spec.js | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/editor/block/math.js b/src/editor/block/math.js index aff548d..e7cf9b2 100644 --- a/src/editor/block/math.js +++ b/src/editor/block/math.js @@ -67,10 +67,19 @@ function mathDeco(view) { // if we got a result from math.js, add the result decoration if (result !== undefined) { + let format = parser.get("format") + let resultWidget if (typeof(result) === "string") { resultWidget = new MathResult(result, result) - } else { + } else if (format !== undefined && typeof(format) === "function") { + try { + resultWidget = new MathResult(format(result), format(result)) + } catch (e) { + // suppress any errors + } + } + if (resultWidget === undefined) { resultWidget = new MathResult( math.format(result, { precision: 8, diff --git a/tests/math.spec.js b/tests/math.spec.js index 7c04d11..d6913e5 100644 --- a/tests/math.spec.js +++ b/tests/math.spec.js @@ -24,3 +24,13 @@ format(1/3, 3) `) await expect(page.locator("css=.heynote-math-result")).toHaveText("0.333") }) + +test("custom format function", async ({ page }) => { + await heynotePage.setContent(` +∞∞∞math +_format = format +format(x) = _format(x, {notation:"exponential"}) +42 +`) + await expect(page.locator("css=.heynote-math-result").last()).toHaveText("4.2e+1") +})