1 /*
2 LibRCC - default configuration
3
4 Copyright (C) 2005-2008 Suren A. Chilingaryan <csa@dside.dyndns.org>
5
6 This library is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License version 2.1 or later
8 as published by the Free Software Foundation.
9
10 This library is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #include <stdio.h>
21
22 #include <string.h>
23 #ifdef HAVE_STRINGS_H
24 # include <strings.h>
25 #endif /* HAVE_STRINGS_H */
26
27 #include "internal.h"
28 #include "rccconfig.h"
29 #include "engine.h"
30 #include "opt.h"
31
32 #define RCC_DEFAULT_RECODING_TIMEOUT 500000
33
34 rcc_language_alias rcc_default_aliases[RCC_MAX_ALIASES + 1];
35 rcc_language_alias rcc_default_aliases_embeded[RCC_MAX_ALIASES + 1] = {
36 /* { "cs_SK", "sk" },
37 { "ru_UA", "uk" },*/
38 { NULL, NULL }
39 };
40
41 rcc_language_relation rcc_default_relations[RCC_MAX_RELATIONS + 1];
42 rcc_language_relation rcc_default_relations_embeded[RCC_MAX_RELATIONS + 1] = {
43 { "uk", "ru" },
44 { "be", "ru" },
45 { NULL, NULL }
46 };
47
48 const char rcc_default_unicode_charsets[] = "unicode";
49 const char rcc_default_nonunicode_charsets[] = "nonunicode";
50 rcc_charset rcc_default_disabled_id3_charsets[] = { rcc_default_unicode_charsets, NULL };
51 rcc_charset rcc_default_additional_id3v2_charsets[] = { "UTF-8", "UTF-16", "UTF-16BE", NULL };
52
53 const char rcc_default_all[] = "all";
54 const char rcc_default_language_sn[] = "default";
55 const char rcc_disabled_language_sn[] = "Off";
56 const char rcc_english_language_sn[] = "en";
57 const char rcc_russian_language_sn[] = "ru";
58 const char rcc_ukrainian_language_sn[] = "uk";
59 const char rcc_disabled_engine_sn[] = "Off";
60 const char rcc_default_charset[] = "Default";
61
62 const char rcc_utf8_charset[] = "UTF-8";
63 const char rcc_engine_nonconfigured[] = "Default";
64 const char rcc_option_nonconfigured[] = "DEFAULT";
65
66 rcc_engine rcc_default_engine = {
67 rcc_disabled_engine_sn, NULL, NULL, NULL, {NULL}
68 };
69
70 rcc_engine rcc_russian_engine = {
71 "LibRCD", NULL, NULL, &rccAutoengineRussian, {"CP1251","KOI8-R","UTF-8","IBM866", "ISO8859-1", NULL}
72 };
73
74 rcc_engine rcc_ukrainian_engine = {
75 "LibRCD", NULL, NULL, &rccAutoengineRussian, {"CP1251","KOI8-U","UTF-8","IBM865", "ISO8859-1", NULL}
76 };
77
78 rcc_engine rcc_belarussian_engine = {
79 "LibRCD", NULL, NULL, &rccAutoengineRussian, {"CP1251","ISO-IR-111","UTF-8","IBM865", "ISO8859-1", NULL}
80 };
81
82 rcc_language rcc_default_languages[RCC_MAX_LANGUAGES + 1];
83
84 rcc_language rcc_default_languages_embeded[RCC_MAX_LANGUAGES + 1] = {
85 {rcc_default_language_sn, {rcc_default_charset, NULL}, {
86 &rcc_default_engine,
87 NULL
88 }},
89 {rcc_disabled_language_sn, {rcc_default_charset, NULL}, {
90 &rcc_default_engine,
91 NULL
92 }},
93 {rcc_english_language_sn, {rcc_default_charset, rcc_utf8_charset, "ISO8859-1", NULL}, {
94 &rcc_default_engine,
95 NULL
96 }},
97 {rcc_russian_language_sn, {rcc_default_charset,"KOI8-R","CP1251",rcc_utf8_charset,"IBM866","MACCYRILLIC","ISO8859-5", NULL}, {
98 &rcc_default_engine,
99 #ifdef RCC_RCD_SUPPORT
100 &rcc_russian_engine,
101 #endif /* RCC_RCD_SUPPORT */
102 NULL
103 }},
104 {rcc_ukrainian_language_sn, {rcc_default_charset,"KOI8-U","CP1251",rcc_utf8_charset,"IBM855","MACCYRILLIC","ISO8859-5","CP1125", NULL}, {
105 &rcc_default_engine,
106 #ifdef RCC_RCD_SUPPORT
107 &rcc_ukrainian_engine,
108 #endif /* RCC_RCD_SUPPORT */
109 NULL
110 }},
111 {"be", {rcc_default_charset, rcc_utf8_charset, "CP1251", "IBM866", "ISO-8859-5", "ISO-IR-111", "ISO-IR-111", "MACCYRILLIC" "IBM855", NULL},{
112 &rcc_default_engine,
113 #ifdef RCC_RCD_SUPPORT
114 &rcc_ukrainian_engine,
115 #endif /* RCC_RCD_SUPPORT */
116 NULL
117 }},
118 /*{"bg", {rcc_default_charset, rcc_utf8_charset, "CP1251", "ISO-8859-5", "IBM855", "maccyr", "ECMA-113", NULL},{
119 &rcc_default_engine,
120 NULL
121 }},
122 {"cs", {rcc_default_charset, rcc_utf8_charset, "ISO-8859-2", "CP1250", "IBM852", "KEYBCS2", "macce", "KOI-8_CS_2", "CORK", NULL},{
123 &rcc_default_engine,
124 NULL
125 }},
126 {"et", {rcc_default_charset, rcc_utf8_charset, "ISO-8859-4", "CP1257", "IBM775", "ISO-8859-13", "macce", "baltic", NULL},{
127 &rcc_default_engine,
128 NULL
129 }},
130 {"hr", {rcc_default_charset, rcc_utf8_charset, "CP1250", "ISO-8859-2", "IBM852", "macce", "CORK", NULL},{
131 &rcc_default_engine,
132 NULL
133 }},
134 {"hu", {rcc_default_charset, rcc_utf8_charset, "ISO-8859-2", "CP1250", "IBM852", "macce", "CORK", NULL},{
135 &rcc_default_engine,
136 NULL
137 }},
138 {"lt", {rcc_default_charset, rcc_utf8_charset, "CP1257", "ISO-8859-4", "IBM775", "ISO-8859-13", "macce", "baltic", NULL},{
139 &rcc_default_engine,
140 NULL
141 }},
142 {"lv", {rcc_default_charset, rcc_utf8_charset, "CP1257", "ISO-8859-4", "IBM775", "ISO-8859-13", "macce", "baltic", NULL},{
143 &rcc_default_engine,
144 NULL
145 }},
146 {"pl", {rcc_default_charset, rcc_utf8_charset, "ISO-8859-2", "CP1250", "IBM852", "macce", "ISO-8859-13", "ISO-8859-16", "baltic", "CORK", NULL},{
147 &rcc_default_engine,
148 NULL
149 }},
150 {"sk", {rcc_default_charset, rcc_utf8_charset, "CP1250", "ISO-8859-2", "IBM852", "KEYBCS2", "macce", "KOI-8_CS_2", "CORK", NULL},{
151 &rcc_default_engine,
152 NULL
153 }},
154 {"sl", {rcc_default_charset, rcc_utf8_charset, "ISO-8859-2", "CP1250", "IBM852", "macce", "CORK", NULL},{
155 &rcc_default_engine,
156 NULL
157 }},*/
158 {NULL}
159 };
160 rcc_option_value_name rcc_sn_boolean[] = { "OFF", "ON", NULL };
161 rcc_option_value_name rcc_sn_learning[] = { "OFF", "ON", "RELEARN", "LEARN", NULL };
162 rcc_option_value_name rcc_sn_clo[] = { "ALL", "CONFIGURED_AND_AUTO", "CONFIGURED_ONLY", NULL };
163 rcc_option_value_name rcc_sn_translate[] = { "OFF", "TRANSLITERATE", "TO_ENGLISH", "SKIP_RELATED", "SKIP_PARENT", "FULL", NULL };
164
165 rcc_option_description rcc_option_descriptions[RCC_MAX_OPTIONS+1];
166 rcc_option_description rcc_option_descriptions_embeded[RCC_MAX_OPTIONS+1] = {
167 #ifdef HAVE_DB_H
168 {RCC_OPTION_LEARNING_MODE, 0, { RCC_OPTION_RANGE_TYPE_MENU, 0, 3, 1 }, RCC_OPTION_TYPE_STANDARD, "LEARNING_MODE", rcc_sn_learning },
169 #else
170 {RCC_OPTION_LEARNING_MODE, 0, { RCC_OPTION_RANGE_TYPE_MENU, 0, 3, 1 }, RCC_OPTION_TYPE_INVISIBLE, "LEARNING_MODE", rcc_sn_learning },
171 #endif /* HAVE_DB_H */
172 {RCC_OPTION_AUTODETECT_FS_NAMES, 1, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0}, RCC_OPTION_TYPE_STANDARD, "AUTODETECT_FS_NAMES", rcc_sn_boolean},
173 {RCC_OPTION_AUTODETECT_FS_TITLES, 1, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0}, RCC_OPTION_TYPE_INVISIBLE, "AUTODETECT_FS_TITLES", rcc_sn_boolean},
174 {RCC_OPTION_CONFIGURED_LANGUAGES_ONLY, 1, { RCC_OPTION_RANGE_TYPE_MENU, 0, 2, 1}, RCC_OPTION_TYPE_INVISIBLE, "CONFIGURED_LANGUAGES_ONLY", rcc_sn_clo},
175 #ifdef HAVE_ASPELL
176 {RCC_OPTION_AUTODETECT_LANGUAGE, 0, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0}, RCC_OPTION_TYPE_STANDARD, "AUTODETECT_LANGUAGE", rcc_sn_boolean},
177 #else
178 {RCC_OPTION_AUTODETECT_LANGUAGE, 0, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0}, RCC_OPTION_TYPE_INVISIBLE, "AUTODETECT_LANGUAGE", rcc_sn_boolean},
179 #endif
180 #ifdef HAVE_LIBTRANSLATE
181 {RCC_OPTION_TRANSLATE, 0, { RCC_OPTION_RANGE_TYPE_MENU, 0, 3, 1}, RCC_OPTION_TYPE_STANDARD, "TRANSLATE", rcc_sn_translate },
182 #else
183 {RCC_OPTION_TRANSLATE, 0, { RCC_OPTION_RANGE_TYPE_MENU, 0, 3, 1}, RCC_OPTION_TYPE_INVISIBLE, "TRANSLATE", rcc_sn_translate },
184 #endif /* HAVE_LIBTRANSLATE */
185 {RCC_OPTION_AUTOENGINE_SET_CURRENT, 0, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0}, RCC_OPTION_TYPE_STANDARD, "AUTOENGINE_SET_CURRENT", rcc_sn_boolean },
186 #ifdef HAVE_LIBTRANSLATE
187 {RCC_OPTION_TIMEOUT, RCC_DEFAULT_RECODING_TIMEOUT, { RCC_OPTION_RANGE_TYPE_RANGE, 0, 5000000, 50000}, RCC_OPTION_TYPE_STANDARD, "TIMEOUT", NULL },
188 #else
189 {RCC_OPTION_TIMEOUT, RCC_DEFAULT_RECODING_TIMEOUT, { RCC_OPTION_RANGE_TYPE_RANGE, 0, 5000000, 50000}, RCC_OPTION_TYPE_INVISIBLE, "TIMEOUT", NULL },
190 #endif /* HAVE_LIBTRANSLATE */
191 {RCC_OPTION_OFFLINE, 0, { RCC_OPTION_RANGE_TYPE_BOOLEAN, 0, 0, 0 }, RCC_OPTION_TYPE_INVISIBLE, "OFFLINE_PROCESSING", rcc_sn_boolean},
192 {RCC_MAX_OPTIONS}
193 };
194
rccGetOptionDescription(rcc_option option)195 rcc_option_description *rccGetOptionDescription(rcc_option option) {
196 unsigned int i;
197
198 if ((option<0)||(option>=RCC_MAX_OPTIONS)) return NULL;
199
200 for (i=0;rcc_option_descriptions[i].option!=RCC_MAX_OPTIONS;i++)
201 if (rcc_option_descriptions[i].option == option)
202 return rcc_option_descriptions+i;
203
204 return NULL;
205 }
206
rccGetOptionDescriptionByName(const char * name)207 rcc_option_description *rccGetOptionDescriptionByName(const char *name) {
208 unsigned int i;
209
210 if (!name) return NULL;
211
212 for (i=0;rcc_option_descriptions[i].option!=RCC_MAX_OPTIONS;i++)
213 if (!strcasecmp(rcc_option_descriptions[i].sn,name)) return rcc_option_descriptions+i;
214
215 return NULL;
216 }
217
rccDefaultGetLanguageByName(const char * name)218 rcc_language_id rccDefaultGetLanguageByName(const char *name) {
219 unsigned int i;
220
221 if (!name) return (rcc_language_id)-1;
222
223 for (i=0;rcc_default_languages[i].sn;i++)
224 if (!strcasecmp(rcc_default_languages[i].sn, name)) return (rcc_language_id)i;
225
226 return (rcc_language_id)-1;
227 }
228
rccIsUTF8(const char * name)229 int rccIsUTF8(const char *name) {
230 if ((!name)||(strcasecmp(name, "UTF-8")&&strcasecmp(name, "UTF8"))) return 0;
231 return 1;
232 }
233
rccIsUnicode(const char * name)234 int rccIsUnicode(const char *name) {
235 if ((!name)||(strncasecmp(name, "UTF",3)&&strncasecmp(name, "UCS",3))) return 0;
236 return 1;
237 }
238
rccDefaultDropLanguageRelations(const char * lang)239 unsigned int rccDefaultDropLanguageRelations(const char *lang) {
240 unsigned long i, j;
241 for (i=0,j=0;rcc_default_relations[i].lang;i++) {
242 if (strcasecmp(lang, rcc_default_relations[i].lang)) {
243 if (j<i) {
244 rcc_default_relations[j].lang = rcc_default_relations[i].lang;
245 rcc_default_relations[j++].parent = rcc_default_relations[i].parent;
246 } else j++;
247 }
248 }
249 rcc_default_relations[j].lang = NULL;
250 rcc_default_relations[j].parent = NULL;
251 return j;
252 }
253