From c04b75b2e36b69f59b93b70703c6f13dc3eba083 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sun, 9 Dec 2018 18:08:04 +0900 Subject: [PATCH] consider LF in the range when writing error msg --- toml/region.hpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/toml/region.hpp b/toml/region.hpp index 05a00a4..b7fc9f9 100644 --- a/toml/region.hpp +++ b/toml/region.hpp @@ -76,13 +76,14 @@ struct region_base region_base& operator=(const region_base&) = default; region_base& operator=(region_base&& ) = default; - virtual bool is_ok() const noexcept {return false;} + virtual bool is_ok() const noexcept {return false;} virtual std::string str() const {return std::string("unknown region");} virtual std::string name() const {return std::string("unknown file");} virtual std::string line() const {return std::string("unknown line");} virtual std::string line_num() const {return std::string("?");} + virtual std::size_t before() const noexcept {return 0;} virtual std::size_t size() const noexcept {return 0;} virtual std::size_t after() const noexcept {return 0;} @@ -136,6 +137,11 @@ struct region final : public region_base std::string str() const override {return make_string(first_, last_);} std::string line() const override { + if(this->contain_newline()) + { + return make_string(this->line_begin(), + std::find(this->line_begin(), this->last(), '\n')); + } return make_string(this->line_begin(), this->line_end()); } std::string line_num() const override @@ -156,6 +162,11 @@ struct region final : public region_base return std::distance(this->last(), this->line_end()); } + bool contain_newline() const noexcept + { + return std::find(this->first(), this->last(), '\n') != this->last(); + } + const_iterator line_begin() const noexcept { using reverse_iterator = std::reverse_iterator;