use carriage return depending on env

This commit is contained in:
ToruNiina 2018-12-12 23:22:31 +09:00
parent 47cd6f5a41
commit c69969733f

View File

@ -201,18 +201,25 @@ inline std::string format_underline(const std::string& message,
const region_base& reg, const std::string& comment_for_underline, const region_base& reg, const std::string& comment_for_underline,
std::vector<std::string> helps = {}) std::vector<std::string> helps = {})
{ {
#ifdef _WIN32
const auto newline = "\r\n";
#else
const char newline = '\n';
#endif
const auto line = reg.line(); const auto line = reg.line();
const auto line_number = reg.line_num(); const auto line_number = reg.line_num();
std::string retval; std::string retval;
retval += message; retval += message;
retval += "\n --> "; retval += newline;
retval += " --> ";
retval += reg.name(); retval += reg.name();
retval += "\n "; retval += newline;
retval += ' ';
retval += line_number; retval += line_number;
retval += " | "; retval += " | ";
retval += line; retval += line;
retval += '\n'; retval += newline;
retval += make_string(line_number.size() + 1, ' '); retval += make_string(line_number.size() + 1, ' ');
retval += " | "; retval += " | ";
retval += make_string(reg.before(), ' '); retval += make_string(reg.before(), ' ');
@ -221,12 +228,13 @@ inline std::string format_underline(const std::string& message,
retval += comment_for_underline; retval += comment_for_underline;
if(helps.size() != 0) if(helps.size() != 0)
{ {
retval += '\n'; retval += newline;
retval += make_string(line_number.size() + 1, ' '); retval += make_string(line_number.size() + 1, ' ');
retval += " | "; retval += " | ";
for(const auto help : helps) for(const auto help : helps)
{ {
retval += "\nHint: "; retval += newline;
retval += "Hint: ";
retval += help; retval += help;
} }
} }
@ -240,6 +248,11 @@ format_underline(const std::string& message, const location<Container>& loc,
const std::string& comment_for_underline, const std::string& comment_for_underline,
std::vector<std::string> helps = {}) std::vector<std::string> helps = {})
{ {
#ifdef _WIN32
const auto newline = "\r\n";
#else
const char newline = '\n';
#endif
using const_iterator = typename location<Container>::const_iterator; using const_iterator = typename location<Container>::const_iterator;
using reverse_iterator = std::reverse_iterator<const_iterator>; using reverse_iterator = std::reverse_iterator<const_iterator>;
const auto line_begin = std::find(reverse_iterator(loc.iter()), const auto line_begin = std::find(reverse_iterator(loc.iter()),
@ -252,13 +265,15 @@ format_underline(const std::string& message, const location<Container>& loc,
std::string retval; std::string retval;
retval += message; retval += message;
retval += "\n --> "; retval += newline;
retval += " --> ";
retval += loc.name(); retval += loc.name();
retval += "\n "; retval += newline;
retval += ' ';
retval += line_number; retval += line_number;
retval += " | "; retval += " | ";
retval += make_string(line_begin, line_end); retval += make_string(line_begin, line_end);
retval += '\n'; retval += newline;
retval += make_string(line_number.size() + 1, ' '); retval += make_string(line_number.size() + 1, ' ');
retval += " | "; retval += " | ";
retval += make_string(std::distance(line_begin, loc.iter()),' '); retval += make_string(std::distance(line_begin, loc.iter()),' ');
@ -268,12 +283,13 @@ format_underline(const std::string& message, const location<Container>& loc,
retval += comment_for_underline; retval += comment_for_underline;
if(helps.size() != 0) if(helps.size() != 0)
{ {
retval += '\n'; retval += newline;
retval += make_string(line_number.size() + 1, ' '); retval += make_string(line_number.size() + 1, ' ');
retval += " | "; retval += " | ";
for(const auto help : helps) for(const auto help : helps)
{ {
retval += "\nHint: "; retval += newline;
retval += "Hint: ";
retval += help; retval += help;
} }
} }