X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fmatch.c;h=7a05db329e174846d0dc192f0ab30439b250b72b;hb=7fa7a969f4a78792ecfe2c395c02b1d119c1bc48;hp=bd5250373348943e376a96e551663ce9862dca41;hpb=574bceb005d019d411f73bdd7e811d0bca4643b3;p=ncmpc.git diff --git a/src/match.c b/src/match.c index bd52503..7a05db3 100644 --- a/src/match.c +++ b/src/match.c @@ -1,5 +1,5 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2009 The Music Player Daemon Project + * (c) 2004-2010 The Music Player Daemon Project * Project homepage: http://musicpd.org * This program is free software; you can redistribute it and/or modify @@ -34,16 +34,54 @@ locale_casefold(const char *src) return folded; } +GRegex * +compile_regex(const char *src, bool anchor) +{ + GRegex *regex; + GRegexCompileFlags compile_flags; + char *src_folded = locale_casefold(src); + + compile_flags = G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE; + if (anchor) + compile_flags |= G_REGEX_ANCHORED; + + regex = g_regex_new ((const gchar*)src_folded, compile_flags, 0, NULL); + + g_free(src_folded); + + return regex; +} + +bool +match_regex(GRegex *regex, const char *line) +{ + GMatchInfo *match_info; + bool match; + char *line_folded = locale_casefold(line); + + g_regex_match(regex, line_folded, 0, &match_info); + match = (bool)g_match_info_matches(match_info); + + g_match_info_free(match_info); + g_free(line_folded); + + return match; +} + bool match_line(const char *line, const char *needle) { char *line_folded = locale_casefold(line); char *needle_folded = locale_casefold(needle); +#if GLIB_CHECK_VERSION(2,14,0) bool ret = (bool)g_regex_match_simple((const gchar*)needle_folded, (const gchar*)line_folded, G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE, 0); +#else + bool ret = strstr(line_folded, needle_folded) != NULL; +#endif g_free(line_folded); g_free(needle_folded);