diff --git a/toml/literal.hpp b/toml/literal.hpp index d7194ed..0e61cc9 100644 --- a/toml/literal.hpp +++ b/toml/literal.hpp @@ -73,6 +73,9 @@ inline ::toml::value operator""_toml(const char* str, std::size_t len) if(auto data = ::toml::detail::parse_toml_file(loc)) { loc.reset(loc.begin()); // rollback to the top of the literal + // skip needless characters for error message + skip_line::invoke(loc); // skip the first several needless lines + skip_ws::invoke(loc); // skip the first several needless whitespaces return ::toml::value(std::move(data.unwrap()), ::toml::detail::region>(std::move(loc))); } diff --git a/toml/region.hpp b/toml/region.hpp index 1720a7f..6ef6f9b 100644 --- a/toml/region.hpp +++ b/toml/region.hpp @@ -343,7 +343,8 @@ inline std::string format_underline(const std::string& message, { // invalid // ~~~~~~~ - retval << make_string(reg->size(), '~'); + const auto underline_len = std::min(reg->size(), reg->line().size()); + retval << make_string(underline_len, '~'); } retval << ' ';