mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-01-11 01:40:11 +00:00
fix #180: Merge branch 'linefeed-at-eof'
This commit is contained in:
commit
1b5107e5e3
@ -905,6 +905,22 @@ BOOST_AUTO_TEST_CASE(test_files_end_with_empty_lines)
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_file_ends_without_lf)
|
||||
{
|
||||
{
|
||||
const std::string table(
|
||||
"key = \"value\"\n"
|
||||
"[table]\n"
|
||||
"key = \"value\""
|
||||
);
|
||||
std::istringstream iss(table);
|
||||
const auto data = toml::parse(iss,
|
||||
"test_files_end_without_lf.toml");
|
||||
|
||||
BOOST_TEST(toml::find<std::string>(data, "key") == "value");
|
||||
BOOST_TEST(toml::find<std::string>(toml::find(data, "table"), "key") == "value");
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_parse_function_compiles)
|
||||
{
|
||||
|
@ -2209,12 +2209,24 @@ parse(std::istream& is, const std::string& fname = "unknown file")
|
||||
std::vector<char> letters(static_cast<std::size_t>(fsize));
|
||||
is.read(letters.data(), fsize);
|
||||
|
||||
// remove null character if exists
|
||||
while(!letters.empty() && letters.back() == '\0')
|
||||
{
|
||||
letters.pop_back();
|
||||
}
|
||||
assert(letters.empty() || letters.back() != '\0');
|
||||
|
||||
// append LF.
|
||||
// Although TOML does not require LF at the EOF, to make parsing logic
|
||||
// simpler, we "normalize" the content by adding LF if it does not exist.
|
||||
// It also checks if the last char is CR, to avoid changing the meaning.
|
||||
// This is not the *best* way to deal with the last character, but is a
|
||||
// simple and quick fix.
|
||||
if(!letters.empty() && letters.back() != '\n' && letters.back() != '\r')
|
||||
{
|
||||
letters.push_back('\n');
|
||||
}
|
||||
|
||||
detail::location loc(std::move(fname), std::move(letters));
|
||||
|
||||
// skip BOM if exists.
|
||||
|
Loading…
Reference in New Issue
Block a user