1
0
Fork 0

Ignore whitespace only lines in brewing and furnace recipes (#4332)

This commit is contained in:
peterbell10 2019-06-11 13:39:44 +01:00 committed by GitHub
parent 52e6543ba5
commit 9dc1343bda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 9 deletions

View File

@ -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);

View File

@ -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<const long>(FirstCommentSymbol), ParsingLine.end());
}
if (IsOnlyWhitespace(ParsingLine))
{
// Ignore empty and whitespace only lines
continue;
}
switch (ParsingLine[0])
{
case '#':

View File

@ -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);
}

View File

@ -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);