std::size_t DataApi::num_errors() const
{ return errors_count; }
+std::string DataApi::get_file_line()
+{
+ std::string error_string = "Failed to convert ";
+ error_string += current_file + ":";
+ error_string += std::to_string(current_line);
+ return error_string;
+}
+
void DataApi::failed_conversion(const std::istringstream& stream)
{
// we only need to go through this once.
if (!curr_data_bad)
{
errors->add_text(std::string());
- errors->add_text("Failed to convert the following line:");
+ errors->add_text(get_file_line());
errors->add_text(stream.str());
curr_data_bad = true;
errors_count++;
if (!curr_data_bad)
{
errors->add_text(std::string());
- errors->add_text("Failed to convert the following line:");
+ errors->add_text(get_file_line());
errors->add_text(stream.str());
curr_data_bad = true;
errors_count++;
// caused the failure.
void failed_conversion(const std::istringstream& stream, const std::string unkown_option);
+ void set_current_file(std::string& file)
+ { current_file = file; }
+
+ void set_current_line(unsigned line)
+ { current_line = line; }
+
private:
enum class PrintMode
Comments* errors;
bool curr_data_bad; // keep track whether current 'conversion' is already bad
+ std::string current_file;
+ unsigned current_line;
+
+ std::string get_file_line();
};
#endif
int Converter::parse_file(std::string input_file)
{
+ data_api.set_current_file(input_file);
+
std::ifstream in;
std::string orig_text;
return -1;
in.open(input_file, std::ifstream::in);
+ unsigned line_num = 0;
while (!in.eof())
{
std::string tmp;
std::getline(in, tmp);
util::rtrim(tmp);
+ data_api.set_current_line(++line_num);
+
std::size_t first_non_white_char = tmp.find_first_not_of(' ');
if ((first_non_white_char == std::string::npos) ||
(tmp[first_non_white_char] == '#') ||