8
const char *rccConfigGetEngineName(rcc_language_config config, rcc_engine_id engine_id) {
9
rcc_engine_ptr *engines;
11
if ((!config)||(!config->language)||(engine_id<0)) return NULL;
13
engines = config->language->engines;
15
for (i=0;engines[i];i++);
16
if (engine_id>=i) return NULL;
18
return engines[engine_id]->title;
21
const char *rccConfigGetCharsetName(rcc_language_config config, rcc_charset_id charset_id) {
22
rcc_charset_ptr *charsets;
24
if ((!config)||(!config->language)||(charset_id<0)) return NULL;
26
charsets = config->language->charsets;
28
for (i=0;charsets[i];i++);
29
if (charset_id>=i) return NULL;
31
return charsets[charset_id];
34
const char *rccConfigGetAutoCharsetName(rcc_language_config config, rcc_charset_id charset_id) {
35
rcc_charset_ptr *charsets;
36
rcc_engine_ptr *engines;
38
if ((!config)||(!config->language)||(engine_id<0)) return NULL;
40
engines = config->language->engines;
41
charsets = engines[config->engine]->charsets;
43
for (i=0;charsets[i];i++);
44
if (charset_id>=i) return NULL;
46
return charsets[charset_id];
50
rcc_engine_id rccConfigGetEngineByName(rcc_language_config *config, const char *name) {
54
if ((!config)||(!config->language)||(!name)) return -1;
56
engines = config->language->engines;
57
for (i=0;engines[i];i++)
58
if (!strcmp(engines[i]->title,name)) return i;
63
rcc_charset_id rccConfigGetCharsetByName(rcc_language_config *config, const char *name) {
65
rcc_charset *charsets;
67
if ((!config)||(!config->language)||(!name)) return -1;
69
charsets = config->language->charsets;
70
for (i=0;charsets[i];i++)
71
if (!strcmp(charsets[i],name)) return i;
76
rcc_charset_id rccConfigGetAutoCharsetByName(rcc_language_config *config, const char *name) {
78
rcc_charset *charsets;
79
rcc_engine_ptr *engines;
81
if ((!config)||(!config->language)||(!name)) return -1;
83
engines = config->language->engines;
84
charsets = engines[config->engine]->charsets;
86
for (i=0;charsets[i];i++)
87
if (!strcmp(charsets[i],name)) return i;
92
int rccConfigInit(rcc_language_config *config, rcc_context *ctx) {
93
rcc_charset_id *charsets;
95
if ((!ctx)||(!config)) return -1;
97
charsets = (rcc_charset_id*)malloc((ctx->max_classes)*sizeof(rcc_charset_id));
98
if (!charsets) return -1;
100
for (i=0;i<ctx->max_classes;i++)
104
config->language = NULL;
105
config->charset = charsets;
107
for (i=0;i<RCC_MAX_OPTIONS;i++)
108
config->options[i] = 0;
113
int rccConfigFree(rcc_language_config *config) {
114
if (config->charset) {
115
free(config->charset);
116
config->charset = NULL;
121
rcc_language_config *rccGetConfig(rcc_context *ctx, rcc_language_id language_id) {
124
language_id = rccGetRealLanguage(ctx, language_id);
125
if (language_id < 0) return NULL;
126
if (!ctx->configs[language_id].charsets) {
127
if (rccInitConfig(ctx->configs+language_id, ctx)) return NULL;
130
ctx->configs[language_id] = ctx->languages[language_id];
131
return ctx->configs + language_id;
134
rcc_language_config *rccGetConfigByName(rcc_context *ctx, const char *name) {
135
rcc_language_id language_id;
137
language_id = rccGetLanguageByName(ctx, name);
138
if (language_id < 0) return NULL;
140
return rccGetConfig(ctx, language_id);
143
rcc_language_config *rccGetCurrentConfig(rcc_context *ctx) {
144
rcc_language_id language_id;
146
language_id = rccGetCurrentLanguage(ctx);
147
if (language_id < 0) return NULL;
149
return rccGetConfig(ctx, language_id);
153
rcc_engine_id rccConfigGetSelectedEngine(rcc_language_config config) {
154
if (!config) return -1;
156
return config->engine;
159
const char *rccConfigGetSelectedEngineName(rcc_language_config config) {
160
rcc_engine_id engine_id;
162
engine_id = rccConfigGetSelectedEngine(config);
163
if (engine_id == -1) return rcc_engine_nonconfigured;
164
if ((engine_id < 0)||(!config->language)) return NULL;
166
return rccConfigGetEngineName(config, engine_id);
169
rcc_engine_id rccConfigGetCurrentEngine(rcc_language_config config) {
170
rcc_engine_list enginelist;
171
rcc_engine_id engine_id;
173
engine_id = rccConfigGetSelectedEngine(config);
174
if (engine_id>=0) return engine_id;
176
if (!config->language) return NULL;
177
else enginelist = config->language->engines;
180
if (enginelist[1]) return 1;
186
const char *rccConfigGetCurrentEngineName(rcc_language_config config) {
187
rcc_engine_id engine_id;
189
engine_id = rccConfigGetCurrentEngine(config);
190
if ((engine_id < 0)||(!config->language)) return NULL;
192
return rccConfigGetEngineName(config, engine_id);
196
static int rccGetLocaleCharset(char *result, const char *lv, unsigned int n) {
200
l = setlocale(lv, NULL);
203
for (i=0;((l[i])&&(l[i]!='.')&&(l[i]!='_'));i++);
209
for (i=0;((l[i])&&(l[i]!='@'));i++);
218
rcc_charset_id rccConfigGetSelectedCharset(rcc_language_config config, rcc_class_id class_id) {
219
if ((!config)||(!config->ctx)||(class_id<0)||(class_id>=ctx->n_classes)) return -1;
221
return config->charset[class_id];
224
const char *rccConfigGetSelectedCharsetName(rcc_language_config config, rcc_class_id class_id) {
225
rcc_charset_id charset_id;
227
charset_id = rccConfigGetSelectedCharset(config, class_id);
228
if ((charset_id < 0)||(!config->language)) return NULL;
230
return rccConfigGetCharsetName(config, charset_id);
233
rcc_charset_id rccConfigGetCurrentCharset(rcc_language_config config, rcc_class_id class_id) {
236
rcc_charset_id charset_id;
238
rcc_language *language;
240
rcc_charset *charsets;
242
char stmp[RCC_MAX_CHARSET_CHARS + 1];
245
if ((!config)||(!config->ctx)||(class_id<0)||(class_id>=ctx->n_classes)) return NULL;
247
charset_id = ctx->config->charset[class_id];
248
if (charset_id) return charset_id;
250
if (!config->language) return -1;
251
else language = config->language;
253
classes = config->ctx->classes;
255
cl = classes[class_id];
256
defvalue = cl->defvalue;
258
for (i=0;classes[i];i++) {
259
if (!strcmp(classes[i]->name, defvalue))
260
return rccConfigGetCurrentCharset(config, i);
262
} else defvalue = config->ctx->locale_variable;
264
err = rccGetLocaleCharset(stmp, defvalue, RCC_MAX_CHARSET_CHARS);
266
charsets=ctx->languages[language_id]->charsets;
267
if ((charsets[0])&&(charsets[1])) return 1;
271
return rccConfigGetCharsetByName(config, stmp);
274
const char *rccConfigGetCurrentCharsetName(rcc_language_config config, rcc_class_id class_id) {
275
rcc_charset_id charset_id;
277
charset_id = rccConfigGetCurrentCharset(config, class_id);
278
if ((charset_id < 0)||(!config->language)) return NULL;
280
return rccConfigGetCharsetName(config, charset_id);
283
rcc_option_value rccConfigGetOption(rcc_language_config config, rcc_option option) {
284
if ((!config)||(option<0)||(option>=RCC_MAX_OPTIONS)) return -1;
286
return config->options[option];
289
int rccConfigSetEngine(rcc_language_config *config, rcc_engine_id engine_id) {
292
if ((!config)||(!config->language)||(engine_id < 0)) return -1;
294
for (i=0;config->language->engines[i];i++);
295
if (engine_id >= i) return -1;
297
if (config->engine != engine_id) {
298
if (config->ctx->current_config == config) config->ctx->configure = 1;
299
config->engine = engine_id;
304
int rccConfigSetEngineByName(rcc_language_config *config, const char *name) {
305
rcc_engine_id engine_id;
307
engine_id = rccConfigGetEngineByName(config, name);
308
if (engine_id < 0) return -1;
310
return rccConfigSetEngine(config, engine_id);
313
int rccConfigSetCharset(rcc_language_config *config, rcc_class_id class_id, rcc_charset_id charset_id) {
316
if ((!config)||(!config->language)||(class_id < 0)||(class_id >= config->ctx->n_classes)||(charset_id<0)) return -1;
318
for (i=0;config->language->charsets[i];i++);
319
if (charset_id >= i) return -1;
321
if (config->charset[class_id] != charset_id) {
322
if (config->ctx->current_config == config) config->ctx->configure = 1;
323
config->charset[class_id] = charset_id;
329
int rccConfigSetCharsetByName(rcc_language_config *config, rcc_class_id class_id, const char *name) {
330
rcc_charset_id charset_id;
332
charset_id = rccConfigGetCharsetByName(config, name);
333
if (charset_id < 0) return -1;
335
return rccConfigSetCharset(config, class_id, charset_id);
338
int rccConfigSetOption(rcc_language_config *config, rcc_option option, rcc_option_value value) {
339
if ((!config)||(option>=RCC_MAX_OPTIONS)) return -1;
340
if (config->options[option] != value) {
341
if (config->ctx->current_config == config) config->ctx->configure = 1;
342
config->options[option]=value;
348
rcc_charset_id rccConfigGetLocaleCharset(rcc_language_config *config, const char *locale_variable) {
350
rcc_charset *charsets;
351
char stmp[RCC_MAX_CHARSET_CHARS+1];
353
if ((!config)||(!config->language)) return -1;
355
err = rccGetLocaleCharset(stmp, locale_variable?locale_variable:config->ctx->locale_variable, RCC_MAX_CHARSET_CHARS);
357
charsets=config->language->charsets;
358
if ((charsets[0])&&(charsets[1])) return 1;
362
return rccConfigGetCharsetByName(config, stmp);