diff --git a/assets/config.csv b/assets/config.csv index 4494448..4105517 100644 --- a/assets/config.csv +++ b/assets/config.csv @@ -81,7 +81,7 @@ "Localized Strings","BoopInfo","Kitty will react with a counter" "Localized Strings","BoopMultiple","%s booped several others - %s!" "Localized Strings","BoopPerson","%s booped %s!" -"Localized Strings","BoopStandard","Woah! %s booped me! That's %s total!" +"Localized Strings","BoopStandard","Woah! %s booped me! That's %s total! " "Localized Strings","CatchInfo","Play catch with yourself or with a friend with @!" "Localized Strings","ChangeIndicatorChanged","Indicator changed to `%s`" "Localized Strings","ChangeIndicatorError","Please specify a letter or symbol to use!" @@ -184,7 +184,7 @@ "Localized Strings","LeaderboardInfo","Shows you the 10 users with the most beans on the server" "Localized Strings","LeaderboardTitle","Server Leaderboard" "Localized Strings","MapHeight","" -"Localized Strings","MapInfo","Generates a map! You can pass additional information if you want with the flags `-s`. If one of the fields isn't provided, its default will be used. Note that adjusting the width and height impacts the map outcomes.nn**Defaults**nDefault Seed: Random,nDefault Width: 35(max %s),nDefault Height: 25(max %s)nn**Key**nLand: ~nMountain: â–²nBeach: " +"Localized Strings","MapInfo","Generates a map! You can pass additional information if you want with the flags `-s`. If one of the fields isn't provided, its default will be used. Note that adjusting the width and height impacts the map outcomes.nn**Defaults**nDefault Seed: Random,nDefault Width: 35(max %s),nDefault Height: 25(max %s)nn**Key**nLand: ~nMountain: \u25B2nBeach: " "Localized Strings","MapInvalid","Invalid arguments provided!" "Localized Strings","MapSeed","Seed" "Localized Strings","MapVersion","Using mapgen v0.1" diff --git a/src/core/ConfigCSV.java b/src/core/ConfigCSV.java index 7b644d0..f4280ff 100644 --- a/src/core/ConfigCSV.java +++ b/src/core/ConfigCSV.java @@ -14,8 +14,10 @@ import java.util.Vector; import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import com.opencsv.CSVWriter; +import com.opencsv.RFC4180ParserBuilder; import utils.GlobalLog; +import utils.StringUtils; public class ConfigCSV { @@ -41,7 +43,7 @@ public class ConfigCSV return new CSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER, - '\\', + CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END); } @@ -60,7 +62,7 @@ public class ConfigCSV } Reader reader = Files.newBufferedReader(Paths.get(filepath)); - CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build(); + CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).withCSVParser(new RFC4180ParserBuilder().build()).build(); fileContents.clear(); // Read contents. As for the line number, we not only start counting at 1, we also skip the header. @@ -74,7 +76,7 @@ public class ConfigCSV continue; } - ConfigItem parsedLine = new ConfigItem(record[0], record[1], record[2]); + ConfigItem parsedLine = new ConfigItem(StringUtils.unEscape(record[0]), StringUtils.unEscape(record[1]), StringUtils.unEscape(record[2])); fileContents.add(parsedLine); ++line; } diff --git a/src/core/ConfigItem.java b/src/core/ConfigItem.java index 5e73eb5..7f556d2 100644 --- a/src/core/ConfigItem.java +++ b/src/core/ConfigItem.java @@ -1,5 +1,7 @@ package core; +import utils.StringUtils; + // Everything in here must be a string type. This class does not // perform any parsing past naming columns, and just holds the raw data. public class ConfigItem @@ -30,7 +32,7 @@ public class ConfigItem public String[] getAll() { - return new String[] {type, key, value}; + return new String[] {StringUtils.reEscape(type), StringUtils.reEscape(key), StringUtils.reEscape(value) }; } public String toString() diff --git a/src/utils/StringUtils.java b/src/utils/StringUtils.java index 04c3dec..2da6f75 100644 --- a/src/utils/StringUtils.java +++ b/src/utils/StringUtils.java @@ -1,29 +1,18 @@ package utils; +import org.apache.commons.lang3.StringEscapeUtils; + +@SuppressWarnings("deprecation") 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; + return StringEscapeUtils.unescapeJava(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; + return StringEscapeUtils.escapeJava(str); } // Finds first whitespace in the string