X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fmatch.c;h=9e4c39148483210b21e656a9bc2648bdcc859b00;hb=HEAD;hp=bd5250373348943e376a96e551663ce9862dca41;hpb=574bceb005d019d411f73bdd7e811d0bca4643b3;p=ncmpc.git diff --git a/src/match.c b/src/match.c index bd52503..9e4c391 100644 --- a/src/match.c +++ b/src/match.c @@ -1,21 +1,21 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2009 The Music Player Daemon Project + * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org - + * * 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, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ + */ #include "match.h" #include "charset.h" @@ -34,6 +34,37 @@ locale_casefold(const char *src) return folded; } +GRegex * +compile_regex(const char *src, bool anchor) +{ + GRegexCompileFlags compile_flags = + G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE; + if (anchor) + compile_flags |= G_REGEX_ANCHORED; + + char *src_folded = locale_casefold(src); + GRegex *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) +{ + char *line_folded = locale_casefold(line); + GMatchInfo *match_info; + g_regex_match(regex, line_folded, 0, &match_info); + bool 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) {