diff --git a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java index 441a099..180e719 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java @@ -94,4 +94,16 @@ public class Respackopts implements ClientModInitializer { } } } + + public static String sanitizeString(String s) { + // This trims whitespace/underscores and removes non-alphabetical or underscore characters + + // ^ = start of string + // $ = end of string + // * = zero or more times + // [\\s_] = whitespace or underscores + // | = or + // [^a-zA-Z_] = not character or underscore + return s.replaceAll("[^a-zA-Z_]|^[\\s_]*|[\\s_]*$", ""); + } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java index 3fe2807..96e8698 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java @@ -83,7 +83,7 @@ public class ConfigBranch extends ConfigEntry>> { @Override public void buildShader(StringBuilder sb, String valueName) { for (Map.Entry> e : super.getValue().entrySet()) { - e.getValue().buildShader(sb, valueName + "_" + e.getKey()); + e.getValue().buildShader(sb, valueName + "_" + Respackopts.sanitizeString(e.getKey())); } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java index 4d0e132..bc0eca3 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java @@ -92,7 +92,7 @@ public class ConfigEnumEntry extends ConfigEntry { sb.append(' '); sb.append(values.indexOf(getValue())); for (int i = 0; i < values.size(); i++) { - String e2 = values.get(i); + String e2 = Respackopts.sanitizeString(values.get(i)); if (version == 1) { sb.append("\n#define "); sb.append(valueName); diff --git a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java index ad83561..c2c9e7b 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java @@ -15,7 +15,7 @@ public class FrexCompat implements FrexInitializer { ShaderConfig.registerShaderConfigSupplier(new Identifier(Respackopts.ID, "config_supplier"), () -> { StringBuilder sb = new StringBuilder(); for (Map.Entry e : Respackopts.CONFIG_BRANCH.entrySet()) { - e.getValue().buildShader(sb, e.getKey()); + e.getValue().buildShader(sb, Respackopts.sanitizeString(e.getKey())); } sb.append("\n#define respackopts_loaded"); return sb.toString();