#ifndef PUGIXML_LOC_H #define PUGIXML_LOC_H /* * This file contains utilities for the PUGI XML parser, * hanlding the retrieval of line numbers (useful for error messages) */ #include #include "pugixml.hpp" namespace pugiutil { //pugi offset to line/col data based on: https://stackoverflow.com/questions/21003471/convert-pugixmls-result-offset-to-column-line class loc_data { public: loc_data() = default; loc_data(std::string filename_val) : filename_(filename_val) { build_loc_data(); } //The filename this location data is for const std::string& filename() const { return filename_; } const char* filename_c_str() const { return filename_.c_str(); } //Convenience wrapper which takes xml_nodes std::size_t line(pugi::xml_node node) const { return line(node.offset_debug()); } //Convenience wrapper which takes xml_nodes std::size_t col(pugi::xml_node node) const { return col(node.offset_debug()); } //Return the line number from the given offset std::size_t line(std::ptrdiff_t offset) const; //Return the column number from the given offset std::size_t col(std::ptrdiff_t offset) const; private: void build_loc_data(); std::string filename_; std::vector offsets_; }; } // namespace pugiutil #endif