/* Minecraft Dynmap plugin for Miranda Instant Messenger _____________________________________________ Copyright © 2015 Robert Pösel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "stdafx.h" std::string utils::url::encode(const std::string &s) { return (char*)ptrA(mir_urlEncode(s.c_str())); } void utils::text::replace_first(std::string* data, const std::string &from, const std::string &to) { std::string::size_type position = 0; if ((position = data->find(from, position)) != std::string::npos) { data->replace(position, from.size(), to); position++; } } void utils::text::replace_all(std::string* data, const std::string &from, const std::string &to) { std::string::size_type position = 0; while ((position = data->find(from, position)) != std::string::npos) { data->replace(position, from.size(), to); position++; } } void utils::text::treplace_all(std::tstring* data, const std::tstring &from, const std::tstring &to) { std::tstring::size_type position = 0; while ((position = data->find(from, position)) != std::tstring::npos) { data->replace(position, from.size(), to); position++; } } std::string utils::text::special_expressions_decode(std::string data) { utils::text::replace_all(&data, "\\r", "\r"); utils::text::replace_all(&data, "\\n", "\n"); utils::text::replace_all(&data, "\\\"", "\""); utils::text::replace_all(&data, "\\\\", "\\"); return data; } std::string utils::text::slashu_to_utf8(const std::string &data) { std::string new_string = ""; for (std::string::size_type i = 0; i < data.length(); i++) { if (data.at(i) == '\\' && (i+1) < data.length() && data.at(i+1) == 'u') { unsigned int udn = strtol(data.substr(i + 2, 4).c_str(), NULL, 16); if (udn >= 128 && udn <= 2047) { // U+0080 .. U+07FF new_string += (char)(192 + (udn / 64)); new_string += (char)(128 + (udn % 64)); } else if (udn >= 2048 && udn <= 65535) { // U+0800 .. U+FFFF new_string += (char)(224 + (udn / 4096)); new_string += (char)(128 + ((udn / 64) % 64)); new_string += (char)(128 + (udn % 64 )); } else if (udn <= 127) { // U+0000 .. U+007F (should not appear) new_string += (char)udn; } i += 5; continue; } new_string += data.at(i); } return new_string; } std::string utils::text::trim(const std::string &data) { std::string spaces = " \t\r\n"; std::string::size_type begin = data.find_first_not_of(spaces); std::string::size_type end = data.find_last_not_of(spaces) + 1; return (begin != std::string::npos) ? data.substr(begin, end - begin) : ""; } time_t utils::time::from_string(const std::string &data) { long long timestamp = _strtoi64(data.c_str(), NULL, 10); // If it is milli timestamp if (timestamp > 100000000000) timestamp /= 1000; // If conversion fails, use local time? //if (!timestamp) // timestamp = ::time(NULL); return (time_t)timestamp; }