view src/lib-fts/fts-filter-lowercase.c @ 18591:e2a0b43e73ef

lib-fts: Removed supports() function from filter API I think the original idea was that this could be used to automatically create filters for many languages, but this probably won't be needed or wanted.
author Timo Sirainen <tss@iki.fi>
date Sat, 09 May 2015 15:00:28 +0300
parents 055666aaba5a
children b8665bd3574b
line wrap: on
line source

/* Copyright (c) 2015 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "str.h"
#include "fts-filter.h"
#include "fts-filter-private.h"
#include "fts-language.h"

static void
fts_filter_lowercase_destroy(struct fts_filter *filter)
{
	i_free(filter);
}

static int
fts_filter_lowercase_create(const struct fts_language *lang ATTR_UNUSED,
			    const char *const *settings,
			    struct fts_filter **filter_r,
			    const char **error_r)
{
	struct fts_filter *filter;

	if (settings[0] != NULL) {
		*error_r = t_strdup_printf("Unknown setting: %s", settings[0]);
		return -1;
	}
	filter = i_new(struct fts_filter, 1);
	*filter = *fts_filter_lowercase;

	*filter_r = filter;
	return 0;
}

static int
fts_filter_lowercase_filter(struct fts_filter *_filter ATTR_UNUSED,
			    const char **token,
			    const char **error_r ATTR_UNUSED)
{
	*token = t_str_lcase(*token);
	return 1;
}

static const struct fts_filter_vfuncs normalizer_filter_vfuncs = {
	fts_filter_lowercase_create,
	fts_filter_lowercase_filter,
	fts_filter_lowercase_destroy
};

static const struct fts_filter fts_filter_lowercase_real = {
	.class_name = "lowercase",
	.v = &normalizer_filter_vfuncs
};

const struct fts_filter *fts_filter_lowercase = &fts_filter_lowercase_real;