/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/librcc.h

  • 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
#ifndef LIBRCC_H
 
2
#define LIBRCC_H
 
3
 
 
4
#include <iconv.h>
 
5
 
 
6
#define RCC_MAX_CHARSETS 16
 
7
#define RCC_MAX_ENGINES 5
 
8
#define RCC_MAX_LANGUAGES 64
 
9
#define RCC_MAX_CLASSES 16
 
10
 
 
11
#define RCC_MAX_ERRORS 3
 
12
 
 
13
#define RCC_MAX_CHARSET_CHARS 16
 
14
#define RCC_MAX_LANGUAGE_CHARS 16
 
15
#define RCC_MAX_VARIABLE_CHARS 16
 
16
 
 
17
#define RCC_MAX_STRING_CHARS 1024
 
18
 
 
19
#define RCC_STRING_MAGIC 0xFF7F01FF
 
20
/*
 
21
    class = charset class
 
22
    engine = auto engine
 
23
    selected - which is selected
 
24
    current - resolves default values
 
25
*/
 
26
 
 
27
#ifdef __cplusplus
 
28
extern "C" {
 
29
#endif
 
30
 
 
31
typedef unsigned int rcc_init_flags;
 
32
#define RCC_DEFAULT_CONFIGURATION 1
 
33
 
 
34
typedef int rcc_option_value;
 
35
typedef enum rcc_option_t {
 
36
    RCC_LEARNING_MODE = 0,
 
37
    RCC_AUTODETECT_FS_TITLES,
 
38
    RCC_AUTODETECT_FS_NAMES,
 
39
    RCC_USE_HEADERS,
 
40
    RCC_MAX_OPTIONS
 
41
} rcc_option;
 
42
 
 
43
typedef enum rcc_class_type_t {
 
44
    RCC_CLASS_INVALID = 0,
 
45
    RCC_CLASS_STANDARD,
 
46
    RCC_CLASS_FS
 
47
} rcc_class_type;
 
48
 
 
49
 
 
50
struct rcc_string_header_t {
 
51
    unsigned int magic;
 
52
    rcc_language_id language_id;
 
53
};
 
54
typedef struct rcc_string_header_t rcc_string_header;
 
55
 
 
56
typedef char *rcc_string;
 
57
typedef char rcc_language_id;
 
58
typedef char rcc_charset_id;
 
59
typedef char rcc_engine_id;
 
60
typedef int rcc_class_id;
 
61
 
 
62
typedef struct rcc_context_t rcc_context;
 
63
typedef struct rcc_engine_context_t rcc_engine_ctx;
 
64
typedef const struct rcc_class_t rcc_class;
 
65
typedef struct rcc_language_t rcc_language;
 
66
typedef struct rcc_engine_t rcc_engine;
 
67
typedef const char *rcc_charset;
 
68
 
 
69
typedef struct rcc_language_config_t rcc_language_config;
 
70
typedef const struct rcc_language_alias_t rcc_language_alias;
 
71
 
 
72
typedef void *rcc_engine_internal;
 
73
typedef rcc_engine_internal (*rcc_engine_init_function)(rcc_engine_context *ctx);
 
74
typedef rcc_charset_id (*rcc_engine_function)(rcc_engine_context ctx, char *buf, int len);
 
75
typedef void (rcc_engine_free_function)(rcc_engine_context ctx);
 
76
 
 
77
typedef rcc_charset rcc_charset_list[RCC_MAX_CHARSETS+1];
 
78
 
 
79
struct rcc_engine_t {
 
80
    const char *title;
 
81
    rcc_engine_init_function init_func;
 
82
    rcc_engine_free_function free_func;
 
83
    rcc_engine_function func;
 
84
    rcc_charset_list charsets;
 
85
};
 
86
typedef rcc_engine *rcc_engine_ptr;
 
87
typedef rcc_engine_ptr rcc_engine_list[RCC_MAX_ENGINES+1];
 
88
 
 
89
struct rcc_language_t {
 
90
    const char *sn;
 
91
    const char *name;
 
92
    rcc_charset_list charsets;
 
93
    rcc_engine_list engines;
 
94
};
 
95
typedef rcc_language *rcc_language_ptr;
 
96
typedef rcc_language_ptr rcc_language_list[RCC_MAX_LANGUAGES+1];
 
97
 
 
98
struct rcc_language_alias_t {
 
99
    const char *alias;
 
100
    const char *lang;
 
101
};
 
102
 
 
103
struct rcc_class_t {
 
104
    const char *name;
 
105
    const char *defvalue; /* locale variable name or parrent name */
 
106
    const rcc_class_type class_type;
 
107
};
 
108
typedef rcc_class *rcc_class_ptr;
 
109
typedef rcc_class_ptr rcc_class_list[RCC_MAX_CLASSES+1];
 
110
 
 
111
struct rcc_language_config_t {
 
112
    rcc_context *ctx;
 
113
    rcc_language *language;
 
114
    
 
115
    rcc_engine_id engine;
 
116
    rcc_charset_id *charset;
 
117
    rcc_option_value options[RCC_MAX_OPTIONS];
 
118
};
 
119
 
 
120
struct rcc_engine_context_t {
 
121
    rcc_context *ctx;
 
122
    rcc_language *language;
 
123
    
 
124
    rcc_engine_function func;
 
125
    rcc_engine_free_function free_func;
 
126
 
 
127
    rcc_engine_internal internal;
 
128
};
 
129
 
 
130
struct rcc_context_t {
 
131
    char locale_variable[RCC_MAX_VARIABLE_CHARS+1];
 
132
    
 
133
    unsigned int max_languages;
 
134
    unsigned int n_languages;
 
135
    rcc_language_ptr *languages;
 
136
    rcc_language_config *configs;
 
137
    
 
138
    unsigned int max_classes;
 
139
    unsigned int n_classes;
 
140
    rcc_class_ptr *classes;
 
141
 
 
142
    rcc_engine_ctx engine_ctx;
 
143
 
 
144
    iconv_t *iconv_from;
 
145
    iconv_t *iconv_to;
 
146
    iconv_t iconv_auto[RCC_MAX_CHARSETS];
 
147
 
 
148
    char tmpbuffer[RCC_MAX_STRING_CHARS+sizeof(rcc_string_footer)+1];
 
149
    iconv_t fsiconv;
 
150
    
 
151
    unsigned char configure;
 
152
    rcc_language_config *current_config;
 
153
    rcc_language_id current_language;
 
154
};
 
155
 
 
156
int rccInit();
 
157
void rccFree();
 
158
 
 
159
rcc_context rccInitContext(rcc_init_flags flags, unsigned int max_languages, unsigned int max_classes, const char *locale);
 
160
void rccFreeContext(rcc_context *ctx);
 
161
 
 
162
rcc_language_id rccRegisterLanguage(rcc_context *ctx, rcc_language *language);
 
163
rcc_charset_id rccLanguageRegisterCharset(rcc_language *language, rcc_charset charset);
 
164
rcc_engine_id rccLanguageRegisterEngine(rcc_language *language, rcc_engine *engine);
 
165
rcc_class_id rccRegisterClass(rcc_context *ctx, rcc_class *cl);
 
166
 
 
167
rcc_class_type rccGetClassType(rcc_context *ctx, rcc_class_id class_id);
 
168
 
 
169
int rccConfigure(rcc_context *ctx);
 
170
char *rccCreateResult(rcc_context *ctx, int len, int *rlen);
 
171
 
 
172
/* lng.c */
 
173
const char *rccGetLanguageName(rcc_context *ctx, rcc_language_id language_id);
 
174
rcc_language_id rccGetLanguageByName(rcc_context *ctx, const char *name);
 
175
rcc_language_id rccGetRealLanguage(rcc_context *ctx, rcc_language_id language_id);
 
176
const char *rccGetRealLanguageName(rcc_context *ctx, rcc_language_id language_id);
 
177
rcc_language_id rccGetSelectedLanguage(rcc_context *ctx);
 
178
const char *rccGetSelectedLanguageName(rcc_context *ctx);
 
179
rcc_language_id rccGetCurrentLanguage(rcc_context *ctx);
 
180
const char *rccGetCurrentLanguageName(rcc_context *ctx);
 
181
 
 
182
int rccSetLanguage(rcc_context *ctx, rcc_language_id language_id);
 
183
int rccSetLanguageByName(rcc_context *ctx, const char *name);
 
184
 
 
185
/* lngconfig.c */
 
186
int rccConfigInit(rcc_language_config *config, rcc_context *ctx);
 
187
int rccConfigFree(rcc_language_config *config);
 
188
 
 
189
const char *rccConfigGetEngineName(rcc_language_config config, rcc_engine_id engine_id);
 
190
const char *rccConfigGetCharsetName(rcc_language_config config, rcc_charset_id charset_id);
 
191
const char *rccConfigGetAutoCharsetName(rcc_language_config config, rcc_charset_id charset_id);
 
192
rcc_engine_id rccConfigGetEngineByName(rcc_language_config *config, const char *name);
 
193
rcc_charset_id rccConfigGetCharsetByName(rcc_language_config *config, const char *name);
 
194
rcc_charset_id rccConfigGetAutoCharsetByName(rcc_language_config *config, const char *name);
 
195
 
 
196
rcc_language_config *rccGetConfig(rcc_context *ctx, rcc_language_id language_id);
 
197
rcc_language_config *rccGetConfigByName(rcc_context *ctx, const char *name);
 
198
rcc_language_config *rccGetCurrentConfig(rcc_context *ctx);
 
199
 
 
200
rcc_engine_id rccConfigGetSelectedEngine(rcc_language_config config);
 
201
const char *rccConfigGetSelectedEngineName(rcc_language_config config);
 
202
rcc_engine_id rccConfigGetCurrentEngine(rcc_language_config config);
 
203
const char *rccConfigGetCurrentEngineName(rcc_language_config config);
 
204
rcc_charset_id rccConfigGetSelectedCharset(rcc_language_config config, rcc_class_id class_id);
 
205
const char *rccConfigGetSelectedCharsetName(rcc_language_config config, rcc_class_id class_id);
 
206
rcc_charset_id rccConfigGetCurrentCharset(rcc_language_config config, rcc_class_id class_id);
 
207
const char *rccConfigGetCurrentCharsetName(rcc_language_config config, rcc_class_id class_id);
 
208
rcc_option_value rccConfigGetOption(rcc_language_config config, rcc_option option);
 
209
 
 
210
int rccConfigSetEngine(rcc_language_config *config, rcc_engine_id engine_id);
 
211
int rccConfigSetCharset(rcc_language_config *config, rcc_class_id class_id, rcc_charset_id charset_id);
 
212
int rccConfigSetEngineByName(rcc_language_config *config, const char *name);
 
213
int rccConfigSetCharsetByName(rcc_language_config *config, rcc_class_id class_id, const char *name);
 
214
int rccConfigSetOption(rcc_language_config *config, rcc_option option, rcc_option_value value);
 
215
 
 
216
rcc_charset_id rccConfigGetLocaleCharset(rcc_language_config *config, const char *locale_variable);
 
217
 
 
218
/* curconfig.c */
 
219
#define rccGetEngineName(ctx, engine_id) rccConfigGetEngineName(ctx->current_config, engine_id)
 
220
#define rccGetCharsetName(ctx, charset_id) rccConfigGetCharsetName(ctx->current_config, charset_id)
 
221
#define rccGetAutoCharsetName(ctx, charset_id) rccConfGetAutoCharsetName(ctx->current_config, charset_id)
 
222
#define rccGetEngineByName(ctx, name) rccConfigGetEngineByName(ctx->current_config, name)
 
223
#define rccGetCharsetByName(ctx, name) rccConfigGetCharsetByName(ctx->current_config, name)
 
224
#define rccGetAutoCharsetByName(ctx, name) rccConfigGetAutoCharsetByName(ctx->current_config, name)
 
225
 
 
226
#define rccGetSelectedEngine(ctx) rccConfigGetSelectedEngine(ctx->current_config)
 
227
#define rccGetSelectedEngineName(ctx) rccConfigGetSelectedEngineName(ctx->current_config)
 
228
#define rccGetCurrentEngine(ctx) rccConfigGetCurrentEngine(ctx->current_config)
 
229
#define rccGetCurrentEngineName(ctx) rccConfigGetCurrentEngineName(ctx->current_config)
 
230
#define rccGetSelectedCharset(ctx,class_id) rccConfigGetSelectedCharset(ctx->current_config, class_id)
 
231
#define rccGetSelectedCharsetName(ctx,class_id) rccConfigGetSelectedCharsetName(ctx->current_config, class_id)
 
232
#define rccGetCurrentCharset(ctx,class_id) rccConfigGetCurrentCharset(ctx->current_config, class_id)
 
233
#define rccGetCurrentCharsetName(ctx,class_id) rccConfigGetCurrentCharsetName(ctx->current_config, class_id)
 
234
#define rccGetOption(ctx, option) rccConfigGetOption(ctx->current_config, option)
 
235
 
 
236
#define rccSetEngine(ctx, engine_id) rccConfigSetEngine(ctx->current_config, engine_id)
 
237
#define rccSetCharset(ctx, class_id, charset_id) rccConfigSetCharset(ctx->current_config, class_id, charset_id)
 
238
#define rccSetOption(ctx,option,value) rccConfigSetOption(ctx->current_config, option, value)
 
239
#define rccSetEngineByName(ctx, name) rccConfigSetEngineByName(ctx->current_config, name)
 
240
#define rccSetCharsetByName(ctx, class_id, name) rccConfigSetCharsetByName(ctx->current_config, class_id, name)
 
241
 
 
242
#define rccGetLocaleCharset(ctx, locale_variable) rccConfigGetLocaleCharset(ctx->current_config, locale_variable)
 
243
 
 
244
/* recode.c */
 
245
char *rccFrom(rcc_context *ctx, rcc_class_id class_id, char *buf, int len, int *rlen);
 
246
char *rccTo(rcc_context *ctx, rcc_class_id class_id, char *buf, int len, int *rlen);
 
247
char *rccRecode(rcc_context *ctx, rcc_class_id from, rcc_class_id to, char *buf, int len, int *rlen);
 
248
char *rccFS(rcc_context *ctx, char *fspath, char *path, char *filename, int len, int *rlen);
 
249
 
 
250
/* string.c */
 
251
rcc_string rccStringInit(rcc_language_id language_id, const char *buf, int len, int *rlen);
 
252
void rccStringFree(rcc_string str);
 
253
 
 
254
rcc_language_id rccStringCheck(const rcc_string str);
 
255
const char *rccStringGet(const rcc_string str);
 
256
char *rccStringExtract(const rcc_string buf, int len, int *rlen);
 
257
 
 
258
char *rccStringCmp(const rcc_string str1, const rcc_string str2);
 
259
char *rccStringNCmp(const rcc_string str1, const rcc_string str2, size_t n);
 
260
char *rccStringCaseCmp(const rcc_string str1, const rcc_string str2);
 
261
char *rccStringNCaseCmp(const rcc_string str1, const rcc_string str2, size_t n);
 
262
 
 
263
/* xml.c */
 
264
int rccSave(rcc_context *ctx);
 
265
int rccLoad(rcc_context *ctx);
 
266
 
 
267
#ifdef __cplusplus
 
268
}
 
269
#endif
 
270
 
 
271
#endif /* LIBRCC_H */