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}`);
 	}