aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/sbbuilder
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/sbbuilder')
-rw-r--r--desktop/modules/sbbuilder/Store.qml4
-rw-r--r--desktop/modules/sbbuilder/Toml.js4
-rw-r--r--desktop/modules/sbbuilder/test_toml.js4
3 files changed, 9 insertions, 3 deletions
diff --git a/desktop/modules/sbbuilder/Store.qml b/desktop/modules/sbbuilder/Store.qml
index 7036f36..e6e9b09 100644
--- a/desktop/modules/sbbuilder/Store.qml
+++ b/desktop/modules/sbbuilder/Store.qml
@@ -74,7 +74,9 @@ QtObject {
if (section === "manifests" && t === "") return st.markInvalid(section + "/" + key, true);
if (t === null || t === "") return st.put(section, key, null);
const d = st.fallback(section, key);
- st.put(section, key, Array.isArray(d) ? t.split(/\s+/).filter(x => x !== "")
+ const words = t.split(/\s+/).filter(x => x !== "");
+ // A list of numbers stays one, deck-it's workspaces for one.
+ st.put(section, key, Array.isArray(d) ? (typeof d[0] === "number" ? words.map(Number) : words)
: typeof d === "number" ? Number(t)
: typeof d === "boolean" ? t === "true" : t);
}
diff --git a/desktop/modules/sbbuilder/Toml.js b/desktop/modules/sbbuilder/Toml.js
index dddb6f7..eb29c88 100644
--- a/desktop/modules/sbbuilder/Toml.js
+++ b/desktop/modules/sbbuilder/Toml.js
@@ -17,7 +17,7 @@
// set again is activated. Top-level keys are section "".
//
// ponytail: the TOML these files use, one key per line: strings, integers,
-// booleans, one-line arrays. A value with anything but a comment after it
+// plain decimals, booleans, one-line arrays. A value with anything but a comment after it
// (multi-line strings and arrays included) is refused: entries() skips it and
// set() throws rather than write a duplicate key; such a file is edited by
// hand. Also not recognised: CRLF line endings, `[ spaced ]` and `[[array]]`
@@ -67,7 +67,7 @@ function val(s, i) {
}
return { v: out, i: i + 1 };
}
- const m = /^(true|false|[+-]?[0-9][0-9_]*)(?=[\s#,\]]|$)/.exec(s.slice(i));
+ const m = /^(true|false|[+-]?[0-9][0-9_]*(?:\.[0-9][0-9_]*)?)(?=[\s#,\]]|$)/.exec(s.slice(i));
if (!m) return null;
const v = m[1] === "true" ? true : m[1] === "false" ? false : Number(m[1].replace(/_/g, ""));
return { v: v, i: i + m[1].length };
diff --git a/desktop/modules/sbbuilder/test_toml.js b/desktop/modules/sbbuilder/test_toml.js
index c86741d..7e62b4e 100644
--- a/desktop/modules/sbbuilder/test_toml.js
+++ b/desktop/modules/sbbuilder/test_toml.js
@@ -102,4 +102,8 @@ assert.deepStrictEqual(T.sections(file), ["manifests", "refresh"]);
assert.deepStrictEqual(T.sections("a = 1\n[manifests]\n"), ["manifests"]);
assert.deepStrictEqual(T.sections("a = 1\n"), []);
+// Decimals: read, and rewritten in place (deck-it's display scale).
+assert.strictEqual(T.get("[display]\nscale = 1.5 # hi\n", "display", "scale"), 1.5);
+assert.strictEqual(T.set("[display]\nscale = 1.5 # hi\n", "display", "scale", 2), "[display]\nscale = 2 # hi\n");
+
console.log("test_toml: ok");