Top Related Projects
Quick Overview
Librime is a core library for the RIME (Renjie Input Method Engine) input method framework. It provides a set of APIs for developing and integrating Chinese input method engines on various platforms, including Windows, macOS, Linux, and mobile devices.
Pros
- Cross-platform Compatibility: Librime is designed to be cross-platform, allowing developers to create input method engines that work seamlessly across different operating systems.
- Modular and Extensible: The library is built with a modular architecture, making it easy to extend and customize the input method functionality.
- Active Development and Community: Librime has an active development team and a supportive community, ensuring ongoing improvements and bug fixes.
- Comprehensive Documentation: The project provides detailed documentation, making it easier for developers to understand and integrate the library into their projects.
Cons
- Steep Learning Curve: Integrating Librime into a project may require a significant amount of time and effort, especially for developers who are new to input method engines.
- Limited Mobile Support: While Librime supports various platforms, its mobile support may be less mature compared to its desktop counterparts.
- Dependency on External Libraries: Librime relies on several external libraries, which can add complexity to the build and deployment process.
- Performance Concerns: Depending on the complexity of the input method engine, Librime's performance may be a concern, especially on lower-end devices.
Code Examples
Here are a few code examples demonstrating the usage of Librime:
- Initializing the Librime Context:
#include <rime/rime_api.h>
int main() {
RIME_STRUCT(RimeTraits, traits);
traits.shared_data_dir = "/path/to/shared/data";
traits.user_data_dir = "/path/to/user/data";
RimeInitialize(&traits);
return 0;
}
This code initializes the Librime context by setting the shared and user data directories.
- Creating a Rime Session:
#include <rime/rime_api.h>
void create_rime_session() {
RimeSessionId session_id = RimeCreateSession();
RimeProcessKey(session_id, RIME_KEY_ENTER, 0);
RimeCommitComposition(session_id);
RimeDestroySession(session_id);
}
This code demonstrates how to create a Rime session, process a key input, commit the composition, and destroy the session.
- Handling Rime Events:
#include <rime/rime_api.h>
void handle_rime_events(RimeSessionId session_id) {
RimeStatus status;
RimeGetStatus(session_id, &status);
if (status.composing) {
// Handle composition-related events
} else {
// Handle non-composition-related events
}
}
This code shows how to handle Rime events, such as composition-related and non-composition-related events, by retrieving the current status of the Rime session.
- Customizing the Rime Schema:
#include <rime/rime_api.h>
void customize_rime_schema() {
RimeSchemaOpen("luna_pinyin");
RimeSchemaSetProperty("schema_version", "1.0");
RimeSchemaSetProperty("name", "Luna Pinyin");
RimeSchemaSetProperty("author", "RIME Development Team");
RimeSchemaClose();
}
This code demonstrates how to customize the Rime schema, such as setting the schema version, name, and author.
Getting Started
To get started with Librime, follow these steps:
-
Install Dependencies: Librime depends on several external libraries, such as YAML-CPP, OpenCC, and LevelDB. Make sure to install these dependencies before building Librime.
-
Clone the Repository: Clone the Librime repository from GitHub:
git clone https://github.com/rime/librime.git
Competitor Comparisons
東風破 /plum/: Rime configuration manager and input schema repository
Pros of Plum
- Plum provides a more user-friendly and intuitive interface for managing and configuring the Rime input method engine.
- Plum offers a centralized platform for managing Rime plugins and customizations, making it easier to keep your Rime setup up-to-date.
- Plum simplifies the installation and deployment process for Rime, reducing the technical overhead for end-users.
Cons of Plum
- Plum is a higher-level abstraction over the core Rime library, which may limit the level of control and customization available to advanced users.
- Plum's reliance on the Rime library means that it inherits any limitations or issues present in the underlying library.
- The Plum project is relatively newer and may have a smaller community and ecosystem compared to the more established Rime library.
Code Comparison
Rime Library (librime):
bool Rime::Deploy(const string& schema_id) {
if (!Deployer::Instance().Deploy(schema_id)) {
LOG(ERROR) << "Failed to deploy schema: " << schema_id;
return false;
}
return true;
}
Plum:
def deploy_schema(self, schema_id: str) -> bool:
try:
self.deployer.deploy(schema_id)
return True
except Exception as e:
logger.error(f"Failed to deploy schema: {schema_id}")
logger.exception(e)
return False
The Rime library provides a low-level C++ interface for deploying Rime schemas, while Plum offers a more high-level Python API with error handling and logging.
maybe a new fcitx.
Pros of fcitx/fcitx5
- Supports a wider range of input methods, including Pinyin, Wubi, and Cangjie, making it more versatile for users with diverse language needs.
- Offers a more modern and customizable user interface, allowing users to tailor the input experience to their preferences.
- Provides better integration with desktop environments, such as GNOME and KDE, for a more seamless user experience.
Cons of fcitx/fcitx5
- May have a steeper learning curve for users who are familiar with the simpler interface of rime/librime.
- Requires more system resources, which could be a concern for users with older or less powerful hardware.
- May have a smaller user community compared to rime/librime, potentially limiting the availability of third-party extensions and support.
Code Comparison
rime/librime (C++):
bool Rime::Processor::ProcessKeyEvent(const KeyEvent& key_event) {
if (key_event.release) {
return false;
}
if (key_event.ctrl || key_event.alt || key_event.super) {
return false;
}
if (key_event.keycode == XK_space) {
return true;
}
return false;
}
fcitx/fcitx5 (C++):
bool FcitxInstanceProcessKey(FcitxInstance* instance, FcitxKeyEventType type, const FcitxKeySym& sym, uint32_t state) {
if (type == FCITX_RELEASE_KEY) {
return false;
}
if (state & (FCITX_CTRL | FCITX_ALT | FCITX_SUPER)) {
return false;
}
if (sym == FCITX_SPACE) {
return true;
}
return false;
}
Mozc - a Japanese Input Method Editor designed for multi-platform
Pros of Mozc
- Mozc is a more mature and feature-rich input method engine, with support for a wider range of languages and input methods.
- Mozc has a larger user base and more active development, with contributions from a wider community.
- Mozc is used as the default input method engine in Google Chrome OS and Android, providing a more integrated experience.
Cons of Mozc
- Mozc has a larger codebase and may be more complex to set up and configure, especially for users with specific requirements.
- Mozc's licensing (Apache License 2.0) may be less permissive than librime's (BSD 3-Clause License).
- Mozc's development is primarily driven by Google, which may limit the ability of the community to influence the project's direction.
Code Comparison
Mozc (Google):
bool Converter::ConvertToString(const ConversionRequest& request,
string* output) const {
if (!request.has_key()) {
return false;
}
const Segments& segments = request.conversion_segments();
if (segments.empty()) {
return false;
}
librime (Rime):
bool Converter::Convert(const string& input, Segments* segments) {
if (input.empty()) {
return false;
}
if (!segments) {
return false;
}
segments->clear();
The code snippets show that both Mozc and librime have similar methods for converting input to a string representation, with some differences in the specific implementation details.
Conversion between Traditional and Simplified Chinese
Pros of OpenCC
- Supports a wider range of Chinese character conversion, including traditional to simplified, and vice versa.
- Provides a more comprehensive set of dictionaries and conversion rules.
- Offers a command-line interface for easy integration into various workflows.
Cons of OpenCC
- Lacks the advanced features and customization options available in librime.
- May have a steeper learning curve for users who are not familiar with the command-line interface.
- The project has a smaller community and fewer contributors compared to librime.
Code Comparison
OpenCC (simplified Chinese to traditional Chinese):
import opencc
converter = opencc.OpenCC('s2t.json')
result = converter.convert('你好,世界')
print(result) # 你好,世界
librime (input method engine):
#include <rime/rime.h>
int main() {
rime::Deployer deployer;
rime::Processor processor(&deployer);
rime::Input input;
rime::Output output;
processor.ProcessInput(input, &output);
return 0;
}
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
RIME: Rime Input Method Engine
Rime with your keystrokes.
Project home
License
Features
- A modular, extensible input method engine in cross-platform C++ code, built on top of open-source technologies
- Covering features found in a large variety of Chinese input methods, either shape-based or phonetic-based
- Built with native support for Traditional Chinese, conversion to Simplified Chinese and other regional standards via OpenCC
- Rime input schema, a DSL in YAML syntax for fast trying out innovative ideas of input method design
- Spelling Algebra, a mechanism to create variant spelling, especially useful for Chinese dialects
- Support for chord-typing with a generic Qwerty keyboard
Install
Follow the instructions to build librime on platforms other than Linux:
Build dependencies
- compiler with C++17 support
- cmake>=3.12
- libboost>=1.74
- libglog>=0.7 (optional)
- libleveldb
- libmarisa
- libopencc>=1.0.2
- libyaml-cpp>=0.5
- libgtest (optional)
Runtime dependencies
- libboost
- libglog (optional)
- libleveldb
- libmarisa
- libopencc
- libyaml-cpp
Build and install librime on Linux
make
sudo make install
Frontends
Official:
Community:
- emacs-rime: frontend for Emacs
- coc-rime: frontend for Vim
- rime.nvim: frontend for Vim
- fcitx5.nvim: Fcitx5 frontend for Vim
- fcitx5-ui.nvim: Fcitx5 frontend for Vim
- zsh-rime: frontend for Zsh
- pyrime: frontend for Ptpython
- fcitx-rime: Fcitx frontend for Linux
- fcitx5-rime: Fcitx5 frontend for Linux
- fcitx5-macos: Fcitx5 frontend for macOS
- XIME: frontend for macOS
- PIME: frontend for Windows
- rabbit: frontend for Windows
- Trime: frontend for Android
- fcitx5-android: frontend for Android
- Hamster: frontend for iOS
- My RIME: frontend for web
Plugins
- librime-charcode (Deprecated) Module that deals with character encoding; depends on boost::locale and ICU libraries
- librime-legacy (Deprecated) Legacy module with GPL-licensed code
- librime-lua Lua scripting
- librime-octagram Language model
- librime-predict Predict next word
- librime-proto IPC using CapnProto
Related works
- plum: Rime configuration (recipe) installer
- combo-pinyin: an innovative chord-typing practice to input Pinyin
- rime-essay: the preset vocabulary
- SCU: Squirrel Configuration Utilities
Credits
We are grateful to the makers of the following open source libraries:
- Boost C++ Libraries (Boost Software License)
- google-glog (The 3-Clause BSD License)
- Google Test (The 3-Clause BSD License)
- LevelDB (The 3-Clause BSD License)
- marisa-trie (BSD 2-Clause License, LGPL 2.1)
- OpenCC (Apache License 2.0)
- yaml-cpp (MIT License)
Contributors
Top Related Projects
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot