Mercurial > dovecot > core-2.2
diff src/lib-mail/message-header-decode.c @ 15053:c976a9c01613
Replaced "decomposed titlecase" conversions with more generic normalizer function.
Plugins can now change mail_user.default_normalizer. Specific searches can
also use different normalizers by changing mail_search_context.normalizer.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 15 Sep 2012 03:12:20 +0300 |
parents | d0d7b810646b |
children | 0be51d94b0d9 |
line wrap: on
line diff
--- a/src/lib-mail/message-header-decode.c Sat Sep 15 03:09:57 2012 +0300 +++ b/src/lib-mail/message-header-decode.c Sat Sep 15 03:12:20 2012 +0300 @@ -135,8 +135,8 @@ struct decode_utf8_context { buffer_t *dest; + normalizer_func_t *normalizer; unsigned int changed:1; - unsigned int dtcase:1; }; static bool @@ -145,13 +145,11 @@ { struct decode_utf8_context *ctx = context; struct charset_translation *t; - enum charset_flags flags; if (charset == NULL || charset_is_utf8(charset)) { /* ASCII / UTF-8 */ - if (ctx->dtcase) { - (void)uni_utf8_to_decomposed_titlecase(data, size, - ctx->dest); + if (ctx->normalizer != NULL) { + (void)ctx->normalizer(data, size, ctx->dest); } else { if (uni_utf8_get_valid_data(data, size, ctx->dest)) buffer_append(ctx->dest, data, size); @@ -159,8 +157,7 @@ return TRUE; } - flags = ctx->dtcase ? CHARSET_FLAG_DECOMP_TITLECASE : 0; - if (charset_to_utf8_begin(charset, flags, &t) < 0) { + if (charset_to_utf8_begin(charset, ctx->normalizer, &t) < 0) { /* data probably still contains some valid ASCII characters. append them. */ if (uni_utf8_get_valid_data(data, size, ctx->dest)) @@ -175,12 +172,12 @@ } void message_header_decode_utf8(const unsigned char *data, size_t size, - buffer_t *dest, bool dtcase) + buffer_t *dest, normalizer_func_t *normalizer) { struct decode_utf8_context ctx; memset(&ctx, 0, sizeof(ctx)); ctx.dest = dest; - ctx.dtcase = dtcase; + ctx.normalizer = normalizer; message_header_decode(data, size, decode_utf8_callback, &ctx); }