#include "../../plugins/Plugin.hpp" #include "../../include/StringUtils.hpp" #include #include #include namespace QuickMedia { struct HtmlEscapeSequence { char unescape_char; std::string escape_sequence; }; void html_escape_sequences(std::string &str) { const std::array escape_sequences = { HtmlEscapeSequence { '&', "&" }, // This should be first, to not accidentally replace a new sequence caused by replacing this HtmlEscapeSequence { '"', """ }, HtmlEscapeSequence { '\'', "'" }, HtmlEscapeSequence { '<', "<" }, HtmlEscapeSequence { '>', ">" }, HtmlEscapeSequence { '\n', "
" } }; for(const HtmlEscapeSequence &escape_sequence : escape_sequences) { string_replace_all(str, escape_sequence.unescape_char, escape_sequence.escape_sequence); } } struct HtmlUnescapeSequence { std::string escape_sequence; std::string unescaped_str; }; void html_unescape_sequences(std::string &str) { const std::array unescape_sequences = { HtmlUnescapeSequence { """, "\"" }, HtmlUnescapeSequence { "'", "'" }, HtmlUnescapeSequence { "'", "'" }, HtmlUnescapeSequence { "<", "<" }, HtmlUnescapeSequence { ">", ">" }, HtmlUnescapeSequence { "&", "&" } // This should be last, to not accidentally replace a new sequence caused by replacing this }; for(const HtmlUnescapeSequence &unescape_sequence : unescape_sequences) { string_replace_all(str, unescape_sequence.escape_sequence, unescape_sequence.unescaped_str); } } std::string url_param_encode(const std::string ¶m) { std::ostringstream result; result.fill('0'); result << std::hex; for(char c : param) { if(isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { result << c; } else { result << std::uppercase; result << "%" << std::setw(2) << (int)(unsigned char)(c); } } return result.str(); } SuggestionResult download_result_to_suggestion_result(DownloadResult download_result) { return (SuggestionResult)download_result; } PluginResult download_result_to_plugin_result(DownloadResult download_result) { return (PluginResult)download_result; } SearchResult download_result_to_search_result(DownloadResult download_result) { return (SearchResult)download_result; } ImageResult download_result_to_image_result(DownloadResult download_result) { return (ImageResult)download_result; } }