diff --git a/src/dataStructures/TaggedPairStore.java b/src/dataStructures/TaggedPairStore.java index 25b6a87..8c92aa7 100644 --- a/src/dataStructures/TaggedPairStore.java +++ b/src/dataStructures/TaggedPairStore.java @@ -6,13 +6,15 @@ import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Consumer; +import utils.StringUtils; + // This is a class designed to parse ini inspired key-value pairs that are sectioned off. // The difference here is that this is more permissive than an ini file, and only accepts // a single split character, not the traditional set an ini does. All of the following are valid: // // [ExampleSection] // Key=Value -// Valid Ridiculous Key&\n\t_.:;foo = \tValid Ridiculous Value*&%$()^.[]{}@ +// Valid Ridiculous Key&\n\t_.:;foo = \tValid Ridiculous Value*&%$()^.[]{}@ // EmptyValue= // // Note that the sections are NOT designed to allow for duplicate keys across them. @@ -91,6 +93,20 @@ public class TaggedPairStore Map.Entry internalPair = (Map.Entry)internal.next(); String key = (String)internalPair.getKey(); String value = (String)internalPair.getValue(); + key = StringUtils.ReEscape(key); + value = StringUtils.ReEscape(value); + + if(key.endsWith("\\r")) + { + if(!key.endsWith("\\r\\r")) + key = key.substring(0, key.length() - 2); + } + + if(value.endsWith("\\r")) + { + if(!value.endsWith("\\r\\r")) + value = value.substring(0, value.length() - 2); + } if(key == value) out += (key + PairSplit) + PairLineSeparator; @@ -144,6 +160,9 @@ public class TaggedPairStore String key = line.substring(0, splitPos); String value = line.substring(splitPos + PairSplit.length()); + key = StringUtils.UnEscape(key); + value = StringUtils.UnEscape(value); + taggedPairs.get(sectionName).putIfAbsent(key, value); allPairs.putIfAbsent(key, value); } diff --git a/src/main/Main.java b/src/main/Main.java index 2b7bc6a..1ca3707 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -42,7 +42,7 @@ public class Main extends ListenerAdapter // Bot startup kitty = new JDABuilder(AccountType.BOT).setToken(Ref.TestToken).buildBlocking(); - kitty.getPresence().setGame(Game.playing("with a new build")); + kitty.getPresence().setGame(Game.playing("with digital yarn")); kitty.addEventListener(new Main()); } diff --git a/src/utils/StringUtils.java b/src/utils/StringUtils.java new file mode 100644 index 0000000..026b46d --- /dev/null +++ b/src/utils/StringUtils.java @@ -0,0 +1,29 @@ +package utils; + +public class StringUtils +{ + public static String UnEscape(String str) + { + str = str.replaceAll("\\\\b", "\b"); + str = str.replaceAll("\\\\n", "\n"); + str = str.replaceAll("\\\\t", "\t"); + str = str.replaceAll("\\\\r", "\r"); + str = str.replaceAll("\\\\f", "\f"); + str = str.replaceAll("\\\\\"", "\""); + str = str.replaceAll("\\\\\\\\\\\\", "\\\\"); + + return str; + } + + public static String ReEscape(String str) + { + str = str.replaceAll("\\\b", "\\\\\\b"); + str = str.replaceAll("\\\n", "\\\\\\n"); + str = str.replaceAll("\\\t", "\\\\\\t"); + str = str.replaceAll("\\\r", "\\\\\\r"); + str = str.replaceAll("\\\f", "\\\\\\f"); + + return str; + } + +}