LibRCC
librcc.h
Go to the documentation of this file.
1 /*
2  LibRCC - public interface
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  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
18 */
19 
20 #ifndef _LIBRCC_H
21 #define _LIBRCC_H
22 
23 #include <stdlib.h>
24 
25 /*******************************************************************************
26 ***************************** Global Defines ***********************************
27 *******************************************************************************/
28 
29 #define RCC_MAX_CHARSETS 16
30 #define RCC_MAX_ENGINES 5
31 #define RCC_MAX_LANGUAGES 64
32 #define RCC_MAX_ALIASES 64
33 #define RCC_MAX_CLASSES 16
34 
35 /* ID's */
43 typedef unsigned char rcc_language_id;
47 typedef unsigned char rcc_alias_id;
51 typedef unsigned char rcc_relation_id;
58 typedef unsigned char rcc_charset_id;
64 typedef unsigned char rcc_autocharset_id;
71 typedef unsigned char rcc_engine_id;
75 typedef int rcc_class_id;
76 
77 /* Opaque Pointer's */
78 typedef struct rcc_context_t *rcc_context;
86 typedef struct rcc_engine_context_t *rcc_engine_context;
92 typedef struct rcc_language_config_t *rcc_language_config;
93 typedef const struct rcc_class_t *rcc_class_ptr;
94 
95 #ifdef __cplusplus
96 extern "C" {
97 #endif
98 
103 int rccInit();
104 
108 void rccFree();
109 
110 /*******************************************************************************
111 **************************** Initialization ************************************
112 *******************************************************************************/
116 typedef unsigned int rcc_init_flags;
117 
121 #define RCC_FLAG_NO_DEFAULT_CONFIGURATION 1
122 
134 rcc_context rccCreateContext(const char *locale_variable, unsigned int max_languages, unsigned int max_classes, rcc_class_ptr defclasses, rcc_init_flags flags);
147 int rccInitDefaultContext(const char *locale_variable, unsigned int max_languages, unsigned int max_classes, rcc_class_ptr defclasses, rcc_init_flags flags);
148 
154 void rccFreeContext(rcc_context ctx);
155 
156 
160 typedef unsigned int rcc_db4_flags;
161 
170 int rccInitDb4(rcc_context ctx, const char *name, rcc_db4_flags flags);
171 
172 int rccLockConfiguration(rcc_context ctx, unsigned int lock_code);
173 int rccUnlockConfiguration(rcc_context ctx, unsigned int lock_code);
174 
175 /*******************************************************************************
176 ******************* Altering Language Configuaration ***************************
177 *******************************************************************************/
181 typedef const char *rcc_charset;
185 typedef rcc_charset rcc_charset_list[RCC_MAX_CHARSETS+1];
186 
187 /* Engines */
191 typedef void *rcc_engine_internal;
208 typedef rcc_autocharset_id (*rcc_engine_function)(rcc_engine_context ctx, const char *buf, int len);
213 
219 struct rcc_engine_t {
220  const char *title;
224  rcc_charset_list charsets;
225 };
226 typedef struct rcc_engine_t rcc_engine;
228 typedef rcc_engine_ptr rcc_engine_list[RCC_MAX_ENGINES+1];
229 
234  const char *sn;
235  rcc_charset_list charsets;
236  rcc_engine_list engines;
237 };
240 typedef rcc_language_ptr rcc_language_list[RCC_MAX_LANGUAGES+1];
241 
247  const char *alias;
248  const char *lang;
249 };
252 typedef rcc_language_alias_ptr rcc_language_alias_list[RCC_MAX_ALIASES+1];
253 
265  const char *lang;
266  const char *parent;
267 };
269 
283 rcc_charset_id rccLanguageRegisterCharset(rcc_language *language, rcc_charset charset);
305 
306 /*******************************************************************************
307 ************************ Altering Configuaration *******************************
308 *******************************************************************************/
312 typedef enum rcc_class_type_t {
321 
326  const char *lang;
327  const char *charset;
328 };
330 
332 #define RCC_CLASS_FLAG_CONST 0x01
333 
334 #define RCC_CLASS_FLAG_SKIP_SAVELOAD 0x02
335 
368 struct rcc_class_t {
369  const char *name;
371  const char *defvalue;
373  const char *fullname;
374  const unsigned long flags;
375 };
376 typedef const struct rcc_class_t rcc_class;
377 typedef rcc_class_ptr rcc_class_list[RCC_MAX_CLASSES+1];
378 
393 int rccRegisterAdditionalCharsets(rcc_context ctx, rcc_class_id class_id, rcc_charset *charsets);
401 int rccRegisterDisabledCharsets(rcc_context ctx, rcc_class_id class_id, rcc_charset *charsets);
409 int rccIsDisabledCharsetName(rcc_context ctx, rcc_class_id class_id, const char *charset);
410 
424 const char *rccGetClassName(rcc_context ctx, rcc_class_id class_id);
431 const char *rccGetClassFullName(rcc_context ctx, rcc_class_id class_id);
432 
433 /*******************************************************************************
434 ************************ Altering Configuaration *******************************
435 *******************************************************************************/
436 typedef int rcc_option_value;
437 
441 #define RCC_OPTION_LEARNING_FLAG_USE 1
442 
445 #define RCC_OPTION_LEARNING_FLAG_LEARN 2
446 
455 
459 typedef enum rcc_option_t {
471 } rcc_option;
472 
476 typedef enum rcc_option_type_t {
481 
492 
496 typedef struct rcc_option_range_t {
498  rcc_option_value min;
499  rcc_option_value max;
500  rcc_option_value step;
502 
503 /* lng.c */
504 
526 const char *rccGetLanguageName(rcc_context ctx, rcc_language_id language_id);
534 rcc_language_id rccGetLanguageByName(rcc_context ctx, const char *name);
557 const char *rccGetRealLanguageName(rcc_context ctx, rcc_language_id language_id);
572 const char *rccGetSelectedLanguageName(rcc_context ctx);
588 const char *rccGetCurrentLanguageName(rcc_context ctx);
589 
590 
598 int rccSetLanguage(rcc_context ctx, rcc_language_id language_id);
606 int rccSetLanguageByName(rcc_context ctx, const char *name);
607 
608 /* opt.c */
616 rcc_option_value rccGetOption(rcc_context ctx, rcc_option option);
624 int rccOptionIsDefault(rcc_context ctx, rcc_option option);
641 int rccSetOption(rcc_context ctx, rcc_option option, rcc_option_value value);
658 
665 const char *rccGetOptionName(rcc_option option);
666 
674 const char *rccGetOptionValueName(rcc_option option, rcc_option_value value);
681 rcc_option rccGetOptionByName(const char *name);
689 rcc_option_value rccGetOptionValueByName(rcc_option option, const char *name);
690 
691 
692 /* lngconfig.c */
744 rcc_language_config rccGetConfigByName(rcc_context ctx, const char *name);
753 
766 
789 
797 const char *rccConfigGetEngineName(rcc_language_config config, rcc_engine_id engine_id);
805 const char *rccConfigGetCharsetName(rcc_language_config config, rcc_charset_id charset_id);
814 const char *rccConfigGetClassCharsetName(rcc_language_config config, rcc_class_id class_id, rcc_charset_id charset_id);
815 
886 
931 
948 int rccConfigSetCharset(rcc_language_config config, rcc_class_id class_id, rcc_charset_id charset_id);
956 int rccConfigSetEngineByName(rcc_language_config config, const char *name);
965 int rccConfigSetCharsetByName(rcc_language_config config, rcc_class_id class_id, const char *name);
966 
974 rcc_charset_id rccConfigGetLocaleCharset(rcc_language_config config, const char *locale_variable);
983 rcc_charset_id rccConfigGetLocaleClassCharset(rcc_language_config config, rcc_class_id class_id, const char *locale_variable);
984 
985 /* curconfig.c */
989 
990 const char *rccGetEngineName(rcc_context ctx, rcc_engine_id engine_id);
991 const char *rccGetCharsetName(rcc_context ctx, rcc_charset_id charset_id);
992 const char *rccGetClassCharsetName(rcc_context ctx, rcc_class_id class_id, rcc_charset_id charset_id);
993 
994 rcc_engine_id rccGetEngineByName(rcc_context ctx, const char *name);
995 rcc_charset_id rccGetCharsetByName(rcc_context ctx, const char *name);
996 rcc_charset_id rccGetClassCharsetByName(rcc_context ctx, rcc_class_id class_id, const char *name);
997 
998 int rccIsDisabledCharset(rcc_context ctx, rcc_class_id class_id, rcc_charset_id charset_id);
999 
1001 const char *rccGetSelectedEngineName(rcc_context ctx);
1003 const char *rccGetCurrentEngineName(rcc_context ctx);
1005 const char *rccGetSelectedCharsetName(rcc_context ctx, rcc_class_id class_id);
1007 const char *rccGetCurrentCharsetName(rcc_context ctx, rcc_class_id class_id);
1008 
1009 int rccSetEngine(rcc_context ctx, rcc_engine_id engine_id);
1010 int rccSetCharset(rcc_context ctx, rcc_class_id class_id, rcc_charset_id charset_id);
1011 int rccSetEngineByName(rcc_context ctx, const char *name);
1012 int rccSetCharsetByName(rcc_context ctx, rcc_class_id class_id, const char *name);
1013 
1014 rcc_charset_id rccGetLocaleCharset(rcc_context ctx, const char *locale_variable);
1015 rcc_charset_id rccGetLocaleClassCharset(rcc_context ctx, rcc_class_id class_id, const char *locale_variable);
1016 
1017 rcc_autocharset_id rccDetectCharset(rcc_context ctx, rcc_class_id class_id, const char *buf, size_t len);
1018 
1019 /*******************************************************************************
1020 ************************ Language Configuaration *******************************
1021 *******************************************************************************/
1022 
1023 /*******************************************************************************
1024 ************************ RCC_STRING Manipulations ******************************
1025 *******************************************************************************/
1026 /* string.c */
1032 typedef char *rcc_string;
1038 typedef const char *rcc_const_string;
1039 
1045 size_t rccStringCheck(const char *str);
1053 size_t rccStringSizedCheck(const char *str, size_t len);
1054 
1061 rcc_language_id rccStringGetLanguage(rcc_const_string str);
1068 const char *rccStringGetString(rcc_const_string str);
1075 char *rccStringExtractString(rcc_const_string str);
1076 
1084 const char *rccGetString(const char *str);
1093 const char *rccSizedGetString(const char *str, size_t len);
1094 
1095 int rccStringCmp(const char *str1, const char *str2);
1096 int rccStringNCmp(const char *str1, const char *str2, size_t n);
1097 int rccStringCaseCmp(const char *str1, const char *str2);
1098 int rccStringNCaseCmp(const char *str1, const char *str2, size_t n);
1099 
1100 /*******************************************************************************
1101 ******************************** Recoding **************************************
1102 *******************************************************************************/
1103 /* rcciconv.c */
1104 
1108 typedef struct rcc_iconv_t *rcc_iconv;
1109 
1119 rcc_iconv rccIConvOpen(const char *from, const char *to);
1124 void rccIConvClose(rcc_iconv icnv);
1134 char *rccIConv(rcc_iconv icnv, const char *buf, size_t len, size_t *rlen);
1135 
1136 /* rcctranslate.c */
1137 
1141 typedef struct rcc_translate_t *rcc_translate;
1142 
1152 rcc_translate rccTranslateOpen(const char *from, const char *to);
1158 void rccTranslateClose(rcc_translate translate);
1159 
1160 /*
1161  * Set translation timeout
1162  *
1163  * @param translate is translating context
1164  * @param us is timeout in microseconds (0 - no timeout)
1165  * @return non-zero value is returned in the case of errror
1166  */
1167 int rccTranslateSetTimeout(rcc_translate translate, unsigned long us);
1168 
1169 /*
1170  * Allows translation engine to perform pending task after the main program is
1171  * being terminated
1172  *
1173  * @param translate is translating context
1174  * @return non-zero value is returned in the case of errror
1175  */
1176 int rccTranslateAllowOfflineMode(rcc_translate translate);
1177 
1185 char *rccTranslate(rcc_translate translate, const char *buf);
1186 
1187 
1188 /* rccspell.c */
1189 
1193 typedef struct rcc_speller_t *rcc_speller;
1194 
1198 typedef enum rcc_speller_result_t {
1205 
1209 
1218 rcc_speller rccSpellerCreate(const char *lang);
1224 void rccSpellerFree(rcc_speller speller);
1232 int rccSpellerAddParent(rcc_speller speller, rcc_speller parent);
1240 rcc_speller_result rccSpeller(rcc_speller speller, const char *word);
1241 
1242 /* recode.c */
1243 
1252 rcc_language_id rccDetectLanguage(rcc_context ctx, rcc_class_id class_id, const char *buf, size_t len);
1253 
1262 rcc_autocharset_id rccConfigDetectCharset(rcc_language_config config, rcc_class_id class_id, const char *buf, size_t len);
1263 
1275 rcc_string rccSizedFrom(rcc_context ctx, rcc_class_id class_id, const char *buf, size_t len);
1287 char *rccSizedTo(rcc_context ctx, rcc_class_id class_id, rcc_const_string buf, size_t *rlen);
1302 char *rccSizedRecode(rcc_context ctx, rcc_class_id from, rcc_class_id to, const char *buf, size_t len, size_t *rlen);
1322 char *rccFS(rcc_context ctx, rcc_class_id from, rcc_class_id to, const char *fspath, const char *path, const char *filename);
1323 
1333 rcc_string rccSizedFromCharset(rcc_context ctx, const char *charset, const char *buf, size_t len);
1343 char *rccSizedToCharset(rcc_context ctx, const char *charset, rcc_const_string buf, size_t *rlen);
1358 char *rccSizedRecodeToCharset(rcc_context ctx, rcc_class_id class_id, const char *charset, rcc_const_string buf, size_t len, size_t *rlen);
1373 rcc_string rccSizedRecodeFromCharset(rcc_context ctx, rcc_class_id class_id, const char *charset, const char *buf, size_t len, size_t *rlen);
1385 char *rccSizedRecodeCharsets(rcc_context ctx, const char *from, const char *to, const char *buf, size_t len, size_t *rlen);
1386 
1387 
1399 rcc_string rccConfigSizedFrom(rcc_language_config config, rcc_class_id class_id, const char *buf, size_t len);
1411 char *rccConfigSizedTo(rcc_language_config config, rcc_class_id class_id, rcc_const_string buf, size_t *rlen);
1426 char *rccConfigSizedRecode(rcc_language_config config, rcc_class_id from, rcc_class_id to, const char *buf, size_t len, size_t *rlen);
1438 rcc_string rccConfigSizedRecodeFromCharset(rcc_language_config config, rcc_class_id class_id, const char *charset, const char *buf, size_t len, size_t *rlen);
1450 char *rccConfigSizedRecodeToCharset(rcc_language_config config, rcc_class_id class_id, const char *charset, rcc_const_string buf, size_t len, size_t *rlen);
1451 
1452 
1453 #define rccFrom(ctx, class_id, buf) rccSizedFrom(ctx, class_id, buf, 0)
1454 #define rccTo(ctx, class_id, buf) rccSizedTo(ctx, class_id, buf, NULL)
1455 #define rccRecode(ctx, from, to, buf) rccSizedRecode(ctx, from, to, buf, 0, NULL)
1456 
1457 #define rccFromCharset(ctx, charset, buf) rccSizedFromCharset(ctx, charset, buf, 0)
1458 #define rccToCharset(ctx, charset, buf) rccSizedToCharset(ctx, charset, buf, NULL)
1459 #define rccRecodeToCharset(ctx, class_id, charset, buf) rccSizedRecodeToCharset(ctx, class_id, charset, buf, 0, NULL)
1460 #define rccRecodeFromCharset(ctx, class_id, charset, buf) rccSizedRecodeFromCharset(ctx, class_id, charset, buf, 0, NULL)
1461 #define rccRecodeCharsets(ctx, from, to, buf) rccSizedRecodeCharsets(ctx, from, to, buf, 0, NULL)
1462 
1463 #define rccConfigFrom(ctx, class_id, buf) rccConfigSizedFrom(ctx, class_id, buf, 0)
1464 #define rccConfigTo(ctx, class_id, buf) rccConfigSizedTo(ctx, class_id, buf, NULL)
1465 #define rccConfigRecode(ctx, from, to, buf) rccConfigSizedRecode(ctx, from, to, buf, 0, NULL)
1466 #define rccConfigRecodeToCharset(ctx, class_id, charset, buf) rccConfigSizedRecodeToCharset(ctx, class_id, charset, buf, 0, NULL)
1467 #define rccConfigRecodeFromCharset(ctx, class_id, charset, buf) rccConfigSizedRecodeFromCharset(ctx, class_id, charset, buf, 0, NULL)
1468 
1469 /*******************************************************************************
1470 ******************************** Options ***************************************
1471 *******************************************************************************/
1472 
1473 /* xml.c */
1474 typedef void *rcc_config;
1475 rcc_config rccGetConfiguration();
1476 
1484 int rccSave(rcc_context ctx, const char *name);
1492 int rccLoad(rcc_context ctx, const char *name);
1493 
1494 /*******************************************************************************
1495 **************************** Engine Plugins ************************************
1496 *******************************************************************************/
1497 
1498 typedef rcc_engine *(*rcc_plugin_engine_info_function)(const char *lang);
1499 
1500 rcc_engine_internal rccEngineGetInternal(rcc_engine_context ctx);
1505 
1506 
1507 /*******************************************************************************
1508 **************************** Configuration *************************************
1509 *******************************************************************************/
1510 
1514 #define RCC_CC_FLAG_HAVE_BERKLEY_DB 0x01
1515 
1518 #define RCC_CC_FLAG_HAVE_DYNAMIC_ENGINES 0x02
1519 
1522 #define RCC_CC_FLAG_HAVE_ENCA 0x04
1523 
1526 #define RCC_CC_FLAG_HAVE_RCD 0x08
1527 
1530 #define RCC_CC_FLAG_HAVE_LIBTRANSLATE 0x10
1531 
1536  unsigned long flags;
1537 };
1540 
1544 rcc_compiled_configuration rccGetCompiledConfiguration();
1545 
1546 int rccLocaleGetClassByName(const char *locale);
1547 int rccLocaleGetLanguage(char *result, const char *lv, unsigned int n);
1548 int rccLocaleGetCharset(char *result, const char *lv, unsigned int n);
1549 
1550 
1554 #define RCC_OPTION_TRANSLATE_SKIP_PARRENT RCC_OPTION_TRANSLATE_SKIP_PARENT
1555 #define RCC_SPELLER_ALMOST_PARRENT RCC_SPELLER_ALMOST_PARENT
1556 #define RCC_SPELLER_PARRENT RCC_SPELLER_PARENT
1557 #define rccSpellerAddParrent rccSpellerAddParent
1558 
1559 #ifdef __cplusplus
1560 }
1561 #endif
1562 
1563 #endif /* _LIBRCC_H */