#include "module.h" #include "../settings.h" #include #include #include #include #include #include #include std::string to_utf8(std::wstring wide_string) { static std::wstring_convert> utf8_conv; return utf8_conv.to_bytes(wide_string); } std::wstring from_utf8(std::string string) { static std::wstring_convert> utf8_conv; return utf8_conv.from_bytes(string); } Module::Module() {} Module::Module(std::string path) { std::ifstream settings_file(path); nlohmann::json settings = nlohmann::json::parse(settings_file); this->name = from_utf8(settings["name"]); this->goods_name_regex = from_utf8(settings["goods_name_regex"]); this->goods_price_regex = from_utf8(settings["goods_price_regex"]); this->goods_quantity_regex = from_utf8(settings["goods_quantity_regex"]); this->check_start_regex = from_utf8(settings["check_start_regex"]); this->check_end_regex = from_utf8(settings["check_end_regex"]); #ifdef DEBUG std::wcout << "Name: " << this->name << std::endl; std::wcout << "Goods name regex: " << this->goods_name_regex << std::endl; std::wcout << "Goods price regex: " << this->goods_price_regex << std::endl; std::wcout << "Goods quantity regex: " << this->goods_quantity_regex << std::endl; std::wcout << "Check start regex: " << this->check_start_regex << std::endl; std::wcout << "Check end regex: " << this->check_end_regex << std::endl; #endif } std::vector Module::parse_name(std::wstring str) { std::vector result; std::wregex r(this->goods_name_regex, std::regex::collate); for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end; it++) { result.push_back(to_utf8(it->str())); } return result; } std::vector Module::parse_price(std::wstring str) { std::vector result; std::wregex r(this->goods_price_regex, std::regex::collate); for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end; it++) { result.push_back(to_utf8(it->str())); } return result; } std::vector Module::parse_quantity(std::wstring str) { std::vector result; std::wregex r(this->goods_quantity_regex, std::regex::collate); for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end; it++) { result.push_back(to_utf8(it->str())); } return result; } std::wstring Module::trim_check(std::wstring& check) { unsigned int start_pos; unsigned int end_pos; std::wregex start_regex(this->check_start_regex, std::regex::collate); std::wregex end_regex(this->check_end_regex, std::regex::collate); for (std::wsregex_iterator it{check.begin(), check.end(), start_regex}, end{}; it != end; it++) { start_pos = it->position() + it->str().size(); break; } check = check.substr(start_pos, check.size()); for (std::wsregex_iterator it{check.begin(), check.end(), end_regex}, end{}; it != end; it++) { end_pos = it->position() - 1; break; } check = check.substr(0, end_pos); return check; } std::wstring Module::get_name() { return this->name; }