std::string regex_escape (std::string const &wc) { std::string regex; regex_escape (regex, wc); return regex; }
void map_path(const std::wstring &A, const std::wstring &B, std::vector<std::pair<boost::wregex, std::wstring>> &mapper){ std::wstring pattern; pattern += L"("; pattern += regex_escape(A); pattern += L")(\\\\.*$|$)"; boost::wregex re(pattern, default_regex_flags); mapper.push_back(std::make_pair(re, B)); }
void Keyword::prepare(const vector<KeywordParamP>& param_types, bool force) { if (!force && !match_re.empty()) return; parameters.clear(); // Prepare regex String regex; String text; // normal, non-regex, text vector<KeywordParamP>::const_iterator param = parameters.begin(); #if USE_CASE_INSENSITIVE_KEYWORDS regex = _("(?i)"); // case insensitive matching #endif // Parse the 'match' string for (size_t i = 0 ; i < match.size() ;) { Char c = match.GetChar(i); if (is_substr(match, i, _("<atom-param"))) { // parameter, determine type... size_t start = skip_tag(match, i), end = match_close_tag(match, i); String type = match.substr(start, end-start); // find parameter type 'type' KeywordParamP param; FOR_EACH_CONST(pt, param_types) { if (pt->name == type) { param = pt; break; } } if (!param) { // throwing an error can mean a set will not be loaded! // instead, simply disable the keyword //throw InternalError(_("Unknown keyword parameter type: ") + type); handle_error(_("Unknown keyword parameter type: ") + type); valid = false; return; } parameters.push_back(param); // modify regex : match text before param->compile(); // remove the separator from the text to prevent duplicates param->eat_separator_before(text); regex += _("(") + regex_escape(text) + _(")"); text.clear(); // modify regex : match parameter regex += _("(") + make_non_capturing(param->match) + (param->optional ? _(")?") : _(")")); i = skip_tag(match, end); // eat separator_after? param->eat_separator_after(match, i); } else {