From 9dc1343bda0592f2d27bb216eb21fdec97f73945 Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Tue, 11 Jun 2019 13:39:44 +0100 Subject: Ignore whitespace only lines in brewing and furnace recipes (#4332) --- src/BrewingRecipes.cpp | 3 ++- src/FurnaceRecipe.cpp | 14 ++++++-------- src/StringUtils.cpp | 8 ++++++++ src/StringUtils.h | 3 +++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/BrewingRecipes.cpp b/src/BrewingRecipes.cpp index 3f5173d3d..ca427f9cc 100644 --- a/src/BrewingRecipes.cpp +++ b/src/BrewingRecipes.cpp @@ -45,8 +45,9 @@ void cBrewingRecipes::ReloadRecipes(void) ParsingLine.erase(FirstCommentSymbol); } - if (ParsingLine.empty()) + if (IsOnlyWhitespace(ParsingLine)) { + // Ignore empty and whitespace only lines continue; } AddRecipeFromLine(ParsingLine, LineNum); diff --git a/src/FurnaceRecipe.cpp b/src/FurnaceRecipe.cpp index a4647b7a0..3b3141418 100644 --- a/src/FurnaceRecipe.cpp +++ b/src/FurnaceRecipe.cpp @@ -68,14 +68,6 @@ void cFurnaceRecipe::ReloadRecipes(void) while (std::getline(f, ParsingLine)) { LineNum++; - if (ParsingLine.empty()) - { - // There is a problem here on Android. Text files transferred from another OS may have a newline representation Android's implementation of getline doesn't expect - // Thus, part of a newline may be left in ParsingLine. ::empty() thus thinks the string isn't empty, and the below code outputs interesting errors since it was passed a nearly empty string - // Ref: https://stackoverflow.com/questions/6089231/getting-std-ifstream-to-handle-lf-cr-and-crlf - // TODO: There is a solution in the above reference, but it isn't very pretty. Fix it somehow. - continue; - } // Remove comments from the line: size_t FirstCommentSymbol = ParsingLine.find('#'); @@ -84,6 +76,12 @@ void cFurnaceRecipe::ReloadRecipes(void) ParsingLine.erase(ParsingLine.begin() + static_cast(FirstCommentSymbol), ParsingLine.end()); } + if (IsOnlyWhitespace(ParsingLine)) + { + // Ignore empty and whitespace only lines + continue; + } + switch (ParsingLine[0]) { case '#': diff --git a/src/StringUtils.cpp b/src/StringUtils.cpp index ca9d4b587..ec387437d 100644 --- a/src/StringUtils.cpp +++ b/src/StringUtils.cpp @@ -1071,3 +1071,11 @@ bool StringToFloat(const AString & a_String, float & a_Num) return true; } + + + + +bool IsOnlyWhitespace(const AString & a_String) +{ + return std::all_of(a_String.cbegin(), a_String.cend(), isspace); +} diff --git a/src/StringUtils.h b/src/StringUtils.h index 3751d9946..5fb45a879 100644 --- a/src/StringUtils.h +++ b/src/StringUtils.h @@ -148,6 +148,9 @@ extern AString StringsConcat(const AStringVector & a_Strings, char a_Separator); /** Converts a string into a float. Returns false if the conversion fails. */ extern bool StringToFloat(const AString & a_String, float & a_Num); +/** Returns true if only whitespace characters are present in the string */ +bool IsOnlyWhitespace(const AString & a_String); + -- cgit v1.2.3