diff --git a/source/data/transformer.mjs b/source/data/transformer.mjs index 434c425f7cccc35cf9829fb575b22817b67aca34..9580e33a1d488afebb0eec80235a84d36b92e08a 100644 --- a/source/data/transformer.mjs +++ b/source/data/transformer.mjs @@ -775,7 +775,39 @@ function transform(value) { defaultValue = convertSpecialStrings(defaultValue, value); return translations.getText(key, defaultValue); - + + case "set-toggle": + case "set-set": + case "set-remove": + let modifier = args.shift(); + let delimiter = args.shift(); + if (delimiter === undefined) { + delimiter = " "; + } + + const set = new Set(value.split(delimiter)); + const toggle = new Set(modifier.split(delimiter)); + if (this.command === "set-toggle") { + for (const t of toggle) { + if (set.has(t)) { + set.delete(t); + } else { + set.add(t); + } + } + } else if (this.command === "set-set") { + for (const t of toggle) { + set.add(t); + } + } else if (this.command === "set-remove") { + for (const t of toggle) { + set.delete(t); + } + } + return Array.from(set).join(delimiter); + + + default: throw new Error(`unknown command ${this.command}`); }