19#if defined(RIME_EXPORTS)
21#define RIME_DLL __declspec(dllexport)
22#define RIME_API extern "C" RIME_DLL
23#elif defined(RIME_IMPORTS)
25#define RIME_DLL __declspec(dllimport)
26#define RIME_API extern "C" RIME_DLL
37#ifndef RIME_DEPRECATED
38#define RIME_DEPRECATED RIME_API
42#define RIME_FLAVORED(name) name
60#define RIME_STRUCT_INIT(Type, var) \
61 ((var).data_size = sizeof(Type) - sizeof((var).data_size))
62#define RIME_STRUCT_HAS_MEMBER(var, member) \
63 ((int)(sizeof((var).data_size) + (var).data_size) > \
64 (char*)&member - (char*)&var)
65#define RIME_STRUCT_CLEAR(var) \
66 memset((char*)&(var) + sizeof((var).data_size), 0, (var).data_size)
69#define RIME_STRUCT(Type, var) \
71 RIME_STRUCT_INIT(Type, var);
74#define RIME_PROVIDED(p, member) \
75 ((p) && RIME_STRUCT_HAS_MEMBER(*(p), (p)->member) && (p)->member)
78#define RIME_PROTO_BUILDER void
155typedef struct RIME_FLAVORED(rime_context_t) {
158 RimeComposition composition;
161 char* commit_text_preview;
162 char** select_labels;
168typedef struct RIME_FLAVORED(rime_status_t) {
233 const char* message_type,
234 const char* message_value);
259typedef struct RIME_FLAVORED(rime_api_t) {
284 void* context_object);
289 void (*finalize)(void);
291 Bool (*start_maintenance)(
Bool full_check);
292 Bool (*is_maintenance_mode)(void);
293 void (*join_maintenance_thread)(void);
297 void (*deployer_initialize)(
RimeTraits* traits);
298 Bool (*prebuild)(void);
299 Bool (*deploy)(void);
300 Bool (*deploy_schema)(
const char* schema_file);
301 Bool (*deploy_config_file)(
const char* file_name,
const char* version_key);
303 Bool (*sync_user_data)(void);
310 void (*cleanup_stale_sessions)(void);
311 void (*cleanup_all_sessions)(void);
358 Bool (*config_get_int)(
RimeConfig* config,
const char* key,
int* value);
359 Bool (*config_get_double)(
RimeConfig* config,
const char* key,
double* value);
364 const char* (*config_get_cstring)(
RimeConfig* config,
const char* key);
365 Bool (*config_update_signature)(
RimeConfig* config,
const char* signer);
375 const char* key_sequence);
380 RimeModule* (*find_module)(
const char* module_name);
382 Bool (*run_task)(
const char* task_name);
385 const char* (*get_shared_data_dir)(void);
387 const char* (*get_user_data_dir)(void);
389 const char* (*get_sync_dir)(void);
391 const char* (*get_user_id)(void);
392 void (*get_user_data_sync_dir)(
char* dir,
size_t buffer_size);
404 Bool (*config_set_int)(
RimeConfig* config,
const char* key,
int value);
405 Bool (*config_set_double)(
RimeConfig* config,
const char* key,
double value);
420 size_t (*config_list_size)(
RimeConfig* config,
const char* key);
439 const char* (*get_version)(void);
442 void (*set_caret_pos)(
RimeSessionId session_id,
size_t caret_pos);
456 Bool (*user_config_open)(
const char* config_id,
RimeConfig* config);
464 const char* (*get_prebuilt_data_dir)(void);
467 const char* (*get_staging_dir)(void);
479 const char* option_name,
489 const char* option_name,
495 void (*get_shared_data_dir_s)(
char* dir,
size_t buffer_size);
496 void (*get_user_data_dir_s)(
char* dir,
size_t buffer_size);
497 void (*get_prebuilt_data_dir_s)(
char* dir,
size_t buffer_size);
498 void (*get_staging_dir_s)(
char* dir,
size_t buffer_size);
499 void (*get_sync_dir_s)(
char* dir,
size_t buffer_size);
518#define RIME_API_AVAILABLE(api, func) \
519 (RIME_STRUCT_HAS_MEMBER(*(api), (api)->func) && (api)->func)
524#define RIME_MODULE_INITIALIZER(f) \
525 static void f(void) __attribute__((constructor)); \
527#elif defined(_MSC_VER)
528#pragma section(".CRT$XCU", read)
529#define RIME_MODULE_INITIALIZER(f) \
530 static void __cdecl f(void); \
531 __declspec(allocate(".CRT$XCU")) void(__cdecl * f##_)(void) = f; \
532 static void __cdecl f(void)
541#define RIME_REGISTER_MODULE(name) \
542 void rime_require_module_##name() {} \
543 RIME_MODULE_INITIALIZER(rime_register_module_##name) { \
544 static RimeModule module = {0}; \
545 if (!module.data_size) { \
546 RIME_STRUCT_INIT(RimeModule, module); \
547 module.module_name = #name; \
548 module.initialize = rime_##name##_initialize; \
549 module.finalize = rime_##name##_finalize; \
551 RimeRegisterModule(&module); \
557#define RIME_REGISTER_CUSTOM_MODULE(name) \
558 void rime_require_module_##name() {} \
559 static void rime_customize_module_##name(RimeModule* module); \
560 RIME_MODULE_INITIALIZER(rime_register_module_##name) { \
561 static RimeModule module = {0}; \
562 if (!module.data_size) { \
563 RIME_STRUCT_INIT(RimeModule, module); \
564 module.module_name = #name; \
565 module.initialize = rime_##name##_initialize; \
566 module.finalize = rime_##name##_finalize; \
567 rime_customize_module_##name(&module); \
569 RimeRegisterModule(&module); \
571 static void rime_customize_module_##name(RimeModule* module)
576#define RIME_MODULE_LIST(var, ...) const char* var[] = {__VA_ARGS__, NULL}
582#define RIME_REGISTER_MODULE_GROUP(name, ...) \
583 static RIME_MODULE_LIST(rime_##name##_module_group, __VA_ARGS__); \
584 static void rime_##name##_initialize() { \
585 rime::LoadModules(rime_##name##_module_group); \
587 static void rime_##name##_finalize() {} \
588 RIME_REGISTER_MODULE(name)
struct rime_module_t RimeModule
Definition module.h:14
struct rime_candidate_list_iterator_t RimeCandidateListIterator
struct rime_schema_list_item_t RimeSchemaListItem
uintptr_t RimeSessionId
Definition rime_api.h:57
struct rime_custom_api_t RimeCustomApi
Extend the structure to publish custom data/functions in your specific module.
struct rime_string_slice_t RimeStringSlice
struct rime_schema_list_t RimeSchemaList
struct rime_candidate_t RimeCandidate
struct rime_config_iterator_t RimeConfigIterator
struct rime_config_t RimeConfig
#define Bool
Definition rime_api.h:46
void(*) RimeNotificationHandler(void *context_object, RimeSessionId session_id, const char *message_type, const char *message_value)
Definition rime_api.h:231
#define RIME_API
Definition rime_api.h:34
#define RIME_FLAVORED(name)
Definition rime_api.h:42
struct rime_commit_t RimeCommit
Should be initialized by calling RIME_STRUCT_INIT(Type, var);.
#define RIME_PROTO_BUILDER
For passing pointer to capnproto builder as opaque pointer through C API.
Definition rime_api.h:78
struct rime_traits_t RimeTraits
Rime traits structure.
RIME_API RimeModule * RimeFindModule(const char *module_name)
Definition rime_api.cc:45
RIME_API Bool RimeRegisterModule(RimeModule *module)
Definition rime_api.cc:38
Rime traits structure.
Definition rime_api.h:84
const char * prebuilt_data_dir
prebuilt data directory. defaults to ${shared_data_dir}/build
Definition rime_api.h:114
const char * distribution_code_name
Definition rime_api.h:90
const char * distribution_name
Definition rime_api.h:89
const char * staging_dir
staging directory. defaults to ${user_data_dir}/build
Definition rime_api.h:116
const char * log_dir
Directory of log files.
Definition rime_api.h:112
int min_log_level
Minimal level of logged messages.
Definition rime_api.h:107
const char ** modules
A list of modules to load before initializing.
Definition rime_api.h:101
const char * app_name
Pass a C-string constant in the format "rime.x" where 'x' is the name of your application.
Definition rime_api.h:98
const char * distribution_version
Definition rime_api.h:91
const char * user_data_dir
Definition rime_api.h:88
int data_size
Definition rime_api.h:85
const char * shared_data_dir
Definition rime_api.h:87
Definition rime_api.h:119
char * preedit
Definition rime_api.h:124
int length
Definition rime_api.h:120
int cursor_pos
Definition rime_api.h:121
int sel_start
Definition rime_api.h:122
int sel_end
Definition rime_api.h:123
Definition rime_api.h:127
void * reserved
Definition rime_api.h:130
char * comment
Definition rime_api.h:129
char * text
Definition rime_api.h:128
int highlighted_candidate_index
Definition rime_api.h:137
Bool is_last_page
Definition rime_api.h:136
int page_no
Definition rime_api.h:135
char * select_keys
Definition rime_api.h:140
RimeCandidate * candidates
Definition rime_api.h:139
int num_candidates
Definition rime_api.h:138
int page_size
Definition rime_api.h:134
Should be initialized by calling RIME_STRUCT_INIT(Type, var);.
Definition rime_api.h:146
char * text
Definition rime_api.h:149
int data_size
Definition rime_api.h:147
Definition rime_api.h:182
int index
Definition rime_api.h:184
RimeCandidate candidate
Definition rime_api.h:185
void * ptr
Definition rime_api.h:183
Definition rime_api.h:188
void * ptr
Definition rime_api.h:189
Definition rime_api.h:192
int index
Definition rime_api.h:195
void * list
Definition rime_api.h:193
const char * path
Definition rime_api.h:197
const char * key
Definition rime_api.h:196
void * map
Definition rime_api.h:194
Definition rime_api.h:200
char * schema_id
Definition rime_api.h:201
void * reserved
Definition rime_api.h:203
char * name
Definition rime_api.h:202
Definition rime_api.h:206
RimeSchemaListItem * list
Definition rime_api.h:208
size_t size
Definition rime_api.h:207
Definition rime_api.h:211
const char * str
Definition rime_api.h:212
size_t length
Definition rime_api.h:213
Extend the structure to publish custom data/functions in your specific module.
Definition rime_api.h:240
int data_size
Definition rime_api.h:241
Definition rime_api.h:244
int data_size
Definition rime_api.h:245
const char * module_name
Definition rime_api.h:247
void(*) initialize(void)
Definition rime_api.h:248
void(*) finalize(void)
Definition rime_api.h:249