// file : mod/utility.cxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #include #include namespace brep { string wildcard_to_similar_to_pattern (const string& wildcard) { using namespace butl; if (wildcard.empty ()) return "%"; string r; for (const path_pattern_term& pt: path_pattern_iterator (wildcard)) { switch (pt.type) { case path_pattern_term_type::question: r += '_'; break; case path_pattern_term_type::star: r += '%'; break; case path_pattern_term_type::bracket: { // Copy the bracket expression translating the inverse character, if // present. // size_t n (r.size ()); r.append (pt.begin, pt.end); if (r[n + 1] == '!') // ...[!... ? r[n + 1] = '^'; break; } case path_pattern_term_type::literal: { char c (get_literal (pt)); // Escape the special characters. // // Note that '.' is not a special character for SIMILAR TO. // switch (c) { case '\\': case '%': case '_': case '|': case '+': case '{': case '}': case '(': case ')': case '[': case ']': r += '\\'; break; } r += c; break; } } } return r; } }