mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-18 10:28:09 +08:00
enable to show err msg for 2 different location
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <iostream>
|
#include <iomanip>
|
||||||
|
|
||||||
namespace toml
|
namespace toml
|
||||||
{
|
{
|
||||||
@@ -241,6 +241,64 @@ inline std::string format_underline(const std::string& message,
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// to show a better error message.
|
||||||
|
inline std::string format_underline(const std::string& message,
|
||||||
|
const region_base& reg1, const std::string& comment_for_underline1,
|
||||||
|
const region_base& reg2, const std::string& comment_for_underline2,
|
||||||
|
std::vector<std::string> helps = {})
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
const auto newline = "\r\n";
|
||||||
|
#else
|
||||||
|
const char newline = '\n';
|
||||||
|
#endif
|
||||||
|
const auto line1 = reg1.line();
|
||||||
|
const auto line_number1 = reg1.line_num();
|
||||||
|
const auto line2 = reg2.line();
|
||||||
|
const auto line_number2 = reg2.line_num();
|
||||||
|
const auto line_num_width =
|
||||||
|
std::max(line_number1.size(), line_number2.size());
|
||||||
|
|
||||||
|
std::ostringstream retval;
|
||||||
|
retval << message;
|
||||||
|
retval << newline;
|
||||||
|
retval << " --> ";
|
||||||
|
retval << reg1.name() << newline;;
|
||||||
|
// ---------------------------------------
|
||||||
|
retval << ' ' << std::setw(line_num_width) << line_number1;
|
||||||
|
retval << " | " << line1 << newline;
|
||||||
|
retval << make_string(line_num_width + 1, ' ');
|
||||||
|
retval << " | ";
|
||||||
|
retval << make_string(reg1.before(), ' ');
|
||||||
|
retval << make_string(reg1.size(), '~');
|
||||||
|
retval << ' ';
|
||||||
|
retval << comment_for_underline1 << newline;
|
||||||
|
// ---------------------------------------
|
||||||
|
retval << " ..." << newline;
|
||||||
|
retval << ' ' << std::setw(line_num_width) << line_number2;
|
||||||
|
retval << " | " << line2 << newline;
|
||||||
|
retval << make_string(line_num_width + 1, ' ');
|
||||||
|
retval << " | ";
|
||||||
|
retval << make_string(reg2.before(), ' ');
|
||||||
|
retval << make_string(reg2.size(), '~');
|
||||||
|
retval << ' ';
|
||||||
|
retval << comment_for_underline2;
|
||||||
|
if(helps.size() != 0)
|
||||||
|
{
|
||||||
|
retval << newline;
|
||||||
|
retval << make_string(line_num_width + 1, ' ');
|
||||||
|
retval << " | ";
|
||||||
|
for(const auto help : helps)
|
||||||
|
{
|
||||||
|
retval << newline;
|
||||||
|
retval << "Hint: ";
|
||||||
|
retval << help;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retval.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// to show a better error message.
|
// to show a better error message.
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
std::string
|
std::string
|
||||||
|
Reference in New Issue
Block a user