/rusxmms/librcc

To get this branch, use:
bzr branch http://suren.me/webbzr/rusxmms/librcc

« back to all changes in this revision

Viewing changes to src/lng.c

  • Committer: Suren A. Chilingaryan
  • Date: 2005-06-16 23:14:30 UTC
  • Revision ID: Arch-1:ds@dside.dyndns.org--darksoft-2004%librcc--main--0.1--base-0
Initial Import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <string.h>
 
3
#include <locale.h>
 
4
 
 
5
#include <librcd.h>
 
6
#include "librcc.h"
 
7
 
 
8
const char *rccGetLanguageName(rcc_context *ctx, rcc_language_id language_id) {
 
9
    if ((!ctx)||(language_id<0)||(language_id>=ctx->n_languages)) return NULL;
 
10
    return ctx->languages[language_id]->sn;
 
11
}
 
12
 
 
13
language_id rccGetLanguageByName(rcc_context *ctx, const char *name) {
 
14
    unsigned int i;
 
15
    if ((!ctx)||(!name)) return 0;
 
16
    
 
17
    for (i=0;ctx->languages[i];i++) 
 
18
        if (!strcmp(ctx->languages[i]->sn, name)) return i;
 
19
 
 
20
    return 0;
 
21
}
 
22
 
 
23
static int rccGetLocaleLanguage(char *result, const char *lv, unsigned int n) {
 
24
    charset_list_t *enc;
 
25
    char *l;
 
26
    
 
27
    if (!lv) return -1;
 
28
 
 
29
    l = setlocale(lv, NULL);
 
30
    if (!l) return -1;
 
31
    else if ((strcmp(l,"C")==0)||(strcmp(l,"POSIX")==0)) return -1;
 
32
 
 
33
    for (i=0;((l[i])&&(l[i]!='.'));i++);
 
34
 
 
35
    for (i=0;rcc_default_aliases[i].alias;i++) 
 
36
        if (strncmp(l,rcc_default_aliases[i].alias,i)==0) {
 
37
            l = rcc_default_aliases[i].alias;
 
38
            break;
 
39
        }
 
40
 
 
41
    for (i=0;((l[i])&&(l[i]!='.')&&(l[i]!='_'));i++);
 
42
    if (i>=n) return -1;
 
43
 
 
44
    strncpy(result,l,i);
 
45
    result[i]=0;
 
46
 
 
47
    return 0;
 
48
}
 
49
 
 
50
static rcc_language_id rccGetDefaultLanguage(rc_context *ctx) {
 
51
    int err;
 
52
    unsigned int i;
 
53
    char stmp[RCC_MAX_LANGUAGE_CHARS+1];
 
54
 
 
55
    if (!ctx) return -1;
 
56
    
 
57
    err = rccGetLocaleLanguage(stmp, ctx->locale_variable, RCC_MAX_LANGUAGE_CHARS);
 
58
    if (err) {
 
59
        if (ctx->n_languages>1) return 1;
 
60
        return -1;
 
61
    }
 
62
    
 
63
    for (i=0;ctx->languages[i];i++)
 
64
        if (!strcmp(ctx->languages[i]->sn, stmp)) return i;
 
65
    
 
66
    if (i>1) return 1;
 
67
    return -1;
 
68
}
 
69
 
 
70
rcc_language_id rccGetRealLanguage(rcc_context *ctx, rcc_language_id language_id) {
 
71
    if ((!ctx)||(language_id<0)||(language_id>=ctx->n_languages)) return -1;
 
72
    if (language_id) return language_id;
 
73
    return rccGetDefaultLanguage(ctx);    
 
74
}
 
75
 
 
76
const char *rccGetRealLanguageName(rcc_context *ctx, rcc_language_id language_id) {
 
77
    language_id = rccGetRealLanguage(ctx, language_id);
 
78
    if (language_id<0) return NULL;
 
79
    
 
80
    return rccGetLanguageName(ctx, language_id);
 
81
}
 
82
 
 
83
rcc_language_id rccGetSelectedLanguage(rcc_context *ctx) {
 
84
    if (!ctx) return NULL;
 
85
    return ctx->current_language;
 
86
}
 
87
 
 
88
const char *rccGetSelectedLanguageName(rcc_context *ctx) {
 
89
    rcc_language_id language_id;
 
90
    
 
91
    language_id = rccGetSelectedLanguage(ctx);
 
92
    if (language_id<0) return NULL;
 
93
    
 
94
    return rccGetLanguageName(ctx, language_id);
 
95
}
 
96
 
 
97
rcc_language_id rccGetCurrentLanguage(rcc_context *ctx) {
 
98
    if (!ctx) return -1;
 
99
    return rccGetRealLanguage(ctx, ctx->current_language);    
 
100
}
 
101
 
 
102
const char *rccGetCurrentLanguageName(rcc_context *ctx) {
 
103
    rcc_language_id language_id;
 
104
    
 
105
    language_id = rccGetCurrentLanguage(ctx);
 
106
    if (language_id<0) return NULL;
 
107
    
 
108
    return rccGetLanguageName(ctx, language_id);
 
109
}
 
110
 
 
111
 
 
112
int rccSetLanguage(rcc_context *ctx, rcc_language_id language_id) {
 
113
    rcc_language_config config;
 
114
    
 
115
    if ((!ctx)||(language_id < 0)||(language_id >= ctx->n_languages)) return -1;
 
116
    if ((!ctx->languages[language_id]->engines[0])||(!ctx->languages[language_id]->charsets[0])) return -2;
 
117
 
 
118
    if (ctx->current_language != language_id) {
 
119
        config = rccGetConfig(ctx, language_id);
 
120
        if (!config) return -1;
 
121
        
 
122
        ctx->configure = 1;
 
123
        ctx->current_language = language_id;
 
124
        ctx->current_config = config; 
 
125
    }
 
126
}
 
127
 
 
128
int rccSetLanguageByName(rcc_context *ctx, const char *name) {
 
129
    rcc_language_id language_id;
 
130
    
 
131
    language_id = rccGetLanguageByName(ctx, name);
 
132
    if (language_id < 0) return -1;
 
133
    
 
134
    return rccSetLanguage(ctx, language_id);
 
135
}