diff --git a/src/dataStructures/TaggedPairStore.java b/src/dataStructures/TaggedPairStore.java index d38fe8e..944c8bd 100644 --- a/src/dataStructures/TaggedPairStore.java +++ b/src/dataStructures/TaggedPairStore.java @@ -6,6 +6,8 @@ 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: @@ -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.substring(0, key.length() - 2); + } + + if(value.endsWith("\\r")) + { + if(!value.endsWith("\\r\\r")) + 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/utils/StringUtils.java b/src/utils/StringUtils.java index 7f2fef5..026b46d 100644 --- a/src/utils/StringUtils.java +++ b/src/utils/StringUtils.java @@ -10,8 +10,20 @@ public class StringUtils str = str.replaceAll("\\\\r", "\r"); str = str.replaceAll("\\\\f", "\f"); str = str.replaceAll("\\\\\"", "\""); - 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; + } + }