annotate src/lib-fts/fts-language.c @ 22656:1789bf2a1e01

director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0 The reset command would just hang in that case. doveadm would never have sent this, so this is just an extra sanity check.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Nov 2017 23:51:56 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2014-2017 Dovecot authors, see the included COPYING file */
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
5 #include "llist.h"
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "fts-language.h"
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
7
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #ifdef HAVE_LIBEXTTEXTCAT_TEXTCAT_H
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 # include <libexttextcat/textcat.h>
18426
50ef619ce58a lib-fts requires libexttextcat actually - don't even try to use textcat for it.
Timo Sirainen <tss@iki.fi>
parents: 18417
diff changeset
11 #elif defined (HAVE_FTS_EXTTEXTCAT)
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 # include <textcat.h>
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 #ifndef TEXTCAT_RESULT_UNKNOWN /* old textcat.h has typos */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 # ifdef TEXTCAT_RESULT_UNKOWN
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 # define TEXTCAT_RESULT_UNKNOWN TEXTCAT_RESULT_UNKOWN
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 # endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 #define DETECT_STR_MAX_LEN 200
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 struct fts_language_list {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 pool_t pool;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 ARRAY_TYPE(fts_language) languages;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 const char *textcat_config;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 const char *textcat_datadir;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 void *textcat_handle;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 bool textcat_failed;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 };
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
32 pool_t fts_languages_pool;
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
33 ARRAY_TYPE(fts_language) fts_languages;
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
34
19373
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
35 /* ISO 639-1 alpha 2 codes for languages */
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
36 const struct fts_language fts_languages_builtin [] = {
19373
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
37 { "da" }, /* Danish */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
38 { "de" }, /* German */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
39 { "en" }, /* English */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
40 { "es" }, /* Spanish */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
41 { "fi" }, /* Finnish */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
42 { "fr" }, /* French */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
43 { "it" }, /* Italian */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
44 { "nl" }, /* Dutch */
19374
301d48ef7398 lib-fts: Add Norwegian.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19373
diff changeset
45 { "no" }, /* Both Bokmal and Nynorsk are detected as Norwegian */
19373
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
46 { "pt" }, /* Portuguese */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
47 { "ro" }, /* Romanian */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
48 { "ru" }, /* Russian */
f31fadf622f2 lib-fts: Add comment to language names.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19372
diff changeset
49 { "sv" } /* Swedish */
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 };
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 const struct fts_language fts_language_data = {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 "data"
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 };
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
56 void fts_languages_init(void)
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 unsigned int i;
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
59 const struct fts_language *lp;
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60
19379
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
61 fts_languages_pool = pool_alloconly_create("fts_language",
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
62 sizeof(fts_languages_builtin));
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
63 p_array_init(&fts_languages, fts_languages_pool,
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
64 N_ELEMENTS(fts_languages_builtin));
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
65 for (i = 0; i < N_ELEMENTS(fts_languages_builtin); i++){
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
66 lp = &fts_languages_builtin[i];
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
67 array_append(&fts_languages, &lp, 1);
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
68 }
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
69 }
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
70
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
71 void fts_languages_deinit(void)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
72 {
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
73 if (fts_languages_pool != NULL)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
74 pool_unref(&fts_languages_pool);
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
75 }
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
76
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
77 void fts_language_register(const char *name)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
78 {
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
79 struct fts_language *lang;
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
80
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
81 if (fts_language_find(name) != NULL)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
82 return;
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
83
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
84 lang = p_new(fts_languages_pool, struct fts_language, 1);
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
85 lang->name = p_strdup(fts_languages_pool, name);
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
86 array_append(&fts_languages, (const struct fts_language **)&lang, 1);
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
87 }
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
88
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
89 const struct fts_language *fts_language_find(const char *name)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
90 {
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
91 const struct fts_language *const *langp = NULL;
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
92
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
93 array_foreach(&fts_languages, langp) {
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
94 if (strcmp((*langp)->name, name) == 0)
92aa48461150 lib-fts: Added fts_language_register() to register more languages in plugins.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19374
diff changeset
95 return *langp;
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 return NULL;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
100 int fts_language_list_init(const char *const *settings,
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
101 struct fts_language_list **list_r,
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
102 const char **error_r)
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 struct fts_language_list *lp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 pool_t pool;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 unsigned int i;
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
107 const char *conf = NULL, *data = NULL;
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 for (i = 0; settings[i] != NULL; i += 2) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 const char *key = settings[i], *value = settings[i+1];
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
112 if (strcmp(key, "fts_language_config") == 0)
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 conf = value;
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
114 else if (strcmp(key, "fts_language_data") == 0)
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 data = value;
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
116 else {
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
117 *error_r = t_strdup_printf("Unknown setting: %s", key);
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
118 return -1;
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 pool = pool_alloconly_create("fts_language_list", 128);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 lp = p_new(pool, struct fts_language_list, 1);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 lp->pool = pool;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 if (conf != NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 lp->textcat_config = p_strdup(pool, conf);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 else
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 lp->textcat_config = NULL;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 if (data != NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 lp->textcat_datadir = p_strdup(pool, data);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 else
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 lp->textcat_datadir = NULL;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 p_array_init(&lp->languages, pool, 32);
18608
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
134 *list_r = lp;
1fc7ae2640b0 lib-fts: fts_language_list_init() API changed to return errors.
Timo Sirainen <tss@iki.fi>
parents: 18426
diff changeset
135 return 0;
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 void fts_language_list_deinit(struct fts_language_list **list)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 struct fts_language_list *lp = *list;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142 *list = NULL;
18426
50ef619ce58a lib-fts requires libexttextcat actually - don't even try to use textcat for it.
Timo Sirainen <tss@iki.fi>
parents: 18417
diff changeset
143 #ifdef HAVE_FTS_EXTTEXTCAT
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 if (lp->textcat_handle != NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 textcat_Done(lp->textcat_handle);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 pool_unref(&lp->pool);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 static const struct fts_language *
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 fts_language_list_find(struct fts_language_list *list, const char *name)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 const struct fts_language *const *langp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 array_foreach(&list->languages, langp) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 if (strcmp((*langp)->name, name) == 0)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 return *langp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 return NULL;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 void fts_language_list_add(struct fts_language_list *list,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 const struct fts_language *lang)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 i_assert(fts_language_list_find(list, lang->name) == NULL);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 array_append(&list->languages, &lang, 1);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169 bool fts_language_list_add_names(struct fts_language_list *list,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 const char *names,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 const char **unknown_name_r)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 const char *const *langs;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 const struct fts_language *lang;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 for (langs = t_strsplit_spaces(names, ", "); *langs != NULL; langs++) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 lang = fts_language_find(*langs);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 if (lang == NULL) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 /* unknown language */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 *unknown_name_r = *langs;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 return FALSE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 if (fts_language_list_find(list, lang->name) == NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184 fts_language_list_add(list, lang);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186 return TRUE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189 const ARRAY_TYPE(fts_language) *
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
190 fts_language_list_get_all(struct fts_language_list *list)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
191 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 return &list->languages;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
194
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195 const struct fts_language *
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
196 fts_language_list_get_first(struct fts_language_list *list)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
197 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198 const struct fts_language *const *langp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
199
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
200 langp = array_idx(&list->languages, 0);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
201 return *langp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203
18426
50ef619ce58a lib-fts requires libexttextcat actually - don't even try to use textcat for it.
Timo Sirainen <tss@iki.fi>
parents: 18417
diff changeset
204 #ifdef HAVE_FTS_EXTTEXTCAT
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
205 static bool fts_language_match_lists(struct fts_language_list *list,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
206 candidate_t *candp, int candp_len,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
207 const struct fts_language **lang_r)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
208 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
209 const char *name;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
210
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
211 for (int i = 0; i < candp_len; i++) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
212 /* name is <lang>-<optional country or characterset>-<encoding>
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
213 eg, fi--utf8 or pt-PT-utf8 */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
214 name = t_strcut(candp[i].name, '-');
19374
301d48ef7398 lib-fts: Add Norwegian.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19373
diff changeset
215
301d48ef7398 lib-fts: Add Norwegian.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19373
diff changeset
216 /* For Norwegian we treat both bokmal and nynorsk as "no". */
301d48ef7398 lib-fts: Add Norwegian.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19373
diff changeset
217 if (strcmp(name, "nb") == 0 || strcmp(name, "nn") == 0)
301d48ef7398 lib-fts: Add Norwegian.
Teemu Huovila <teemu.huovila@dovecot.fi>
parents: 19373
diff changeset
218 name = "no";
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
219 if ((*lang_r = fts_language_list_find(list, name)) != NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
220 return TRUE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
221 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
222 return FALSE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
223 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
224 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
225
18426
50ef619ce58a lib-fts requires libexttextcat actually - don't even try to use textcat for it.
Timo Sirainen <tss@iki.fi>
parents: 18417
diff changeset
226 #ifdef HAVE_FTS_EXTTEXTCAT
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
227 static int fts_language_textcat_init(struct fts_language_list *list)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 const char *config_path;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230 const char *data_dir;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
232 if (list->textcat_handle != NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
233 return 0;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235 if (list->textcat_failed)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236 return -1;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
237
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
238 config_path = list->textcat_config != NULL ? list->textcat_config :
18417
cf04173f3f69 lib-fts: Fixed default textcat datadir paths.
Timo Sirainen <tss@iki.fi>
parents: 18414
diff changeset
239 TEXTCAT_DATADIR"/fpdb.conf";
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
240 data_dir = list->textcat_datadir != NULL ? list->textcat_datadir :
18417
cf04173f3f69 lib-fts: Fixed default textcat datadir paths.
Timo Sirainen <tss@iki.fi>
parents: 18414
diff changeset
241 TEXTCAT_DATADIR"/";
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
242 list->textcat_handle = special_textcat_Init(config_path, data_dir);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
243 if (list->textcat_handle == NULL) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 i_error("special_textcat_Init(%s, %s) failed",
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 config_path, data_dir);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246 list->textcat_failed = TRUE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
247 return -1;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
248 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
249 /* The textcat minimum document size could be set here. It
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250 currently defaults to 3. UTF8 is enabled by default. */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251 return 0;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
252 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
253 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
255 static enum fts_language_result
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
256 fts_language_detect_textcat(struct fts_language_list *list ATTR_UNUSED,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
257 const unsigned char *text ATTR_UNUSED,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
258 size_t size ATTR_UNUSED,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
259 const struct fts_language **lang_r ATTR_UNUSED)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
260 {
18426
50ef619ce58a lib-fts requires libexttextcat actually - don't even try to use textcat for it.
Timo Sirainen <tss@iki.fi>
parents: 18417
diff changeset
261 #ifdef HAVE_FTS_EXTTEXTCAT
18414
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
262 candidate_t *candp; /* textcat candidate result array pointer */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263 int cnt;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
264 bool match = FALSE;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
266 if (fts_language_textcat_init(list) < 0)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
267 return FTS_LANGUAGE_RESULT_ERROR;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
268
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
269 candp = textcat_GetClassifyFullOutput(list->textcat_handle);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
270 if (candp == NULL)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
271 i_fatal_status(FATAL_OUTOFMEM, "textcat_GetCLassifyFullOutput failed: malloc() returned NULL");
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
272 cnt = textcat_ClassifyFull(list->textcat_handle, (const void *)text,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
273 I_MIN(size, DETECT_STR_MAX_LEN), candp);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 if (cnt > 0) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
275 T_BEGIN {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
276 match = fts_language_match_lists(list, candp, cnt, lang_r);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
277 } T_END;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
278 textcat_ReleaseClassifyFullOutput(list->textcat_handle, candp);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
279 if (match)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
280 return FTS_LANGUAGE_RESULT_OK;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
281 else
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
282 return FTS_LANGUAGE_RESULT_UNKNOWN;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
283 } else {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
284 textcat_ReleaseClassifyFullOutput(list->textcat_handle, candp);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
285 switch (cnt) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
286 case TEXTCAT_RESULT_SHORT:
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
287 i_assert(size < DETECT_STR_MAX_LEN);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
288 return FTS_LANGUAGE_RESULT_SHORT;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289 case TEXTCAT_RESULT_UNKNOWN:
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
290 return FTS_LANGUAGE_RESULT_UNKNOWN;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
291 default:
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
292 i_unreached();
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
293 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
294 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
295 #else
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
296 return FTS_LANGUAGE_RESULT_UNKNOWN;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
297 #endif
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
298 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
299
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
300 enum fts_language_result
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
301 fts_language_detect(struct fts_language_list *list,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
302 const unsigned char *text ATTR_UNUSED,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
303 size_t size ATTR_UNUSED,
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
304 const struct fts_language **lang_r)
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
305 {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
306 i_assert(array_count(&list->languages) > 0);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
307
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
308 /* if there's only a single wanted language, return it always. */
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
309 if (array_count(&list->languages) == 1) {
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
310 const struct fts_language *const *langp =
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
311 array_idx(&list->languages, 0);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
312 *lang_r = *langp;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
313 return FTS_LANGUAGE_RESULT_OK;
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
314 }
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
315 return fts_language_detect_textcat(list, text, size, lang_r);
81e5b977e5c5 Initial import for lib-fts.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
316 }