summaryrefslogtreecommitdiff
path: root/src/mbgl/util/rapidjson.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/util/rapidjson.cpp')
-rw-r--r--src/mbgl/util/rapidjson.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mbgl/util/rapidjson.cpp b/src/mbgl/util/rapidjson.cpp
index 32a3c0b929..0504f8c002 100644
--- a/src/mbgl/util/rapidjson.cpp
+++ b/src/mbgl/util/rapidjson.cpp
@@ -1,11 +1,17 @@
#include <mbgl/util/rapidjson.hpp>
#include <mbgl/util/string.hpp>
+#include <algorithm>
+
namespace mbgl {
-std::string formatJSONParseError(const JSDocument& doc) {
- return std::string{ rapidjson::GetParseError_En(doc.GetParseError()) } + " at offset " +
- util::toString(doc.GetErrorOffset());
+std::string formatJSONParseError(const std::string& json, const JSDocument& doc) {
+ const size_t offset = std::min(doc.GetErrorOffset(), json.length());
+ const size_t lastBreak = json.find_last_of('\n', offset);
+ const size_t col = offset - (lastBreak == std::string::npos ? 0 : lastBreak);
+ const size_t line = lastBreak == std::string::npos ? 1 : std::count(json.data(), json.data() + lastBreak, '\n') + 2;
+ return "on line " + util::toString(line) + " col " + util::toString(col) + ": " +
+ rapidjson::GetParseError_En(doc.GetParseError());
}
} // namespace mbgl