What is SCIM?

Smart Common Input Method platform, in short SCIM, is a development platform to make Input Method developer life easier. It honors a very clear architecture and provides a pretty simple and powerful programming interface.

Why SCIM?

There are many Input Method programs and platforms living in the world, such as XIM, IIIMF, UIM, kinput, XCIN, Chinput etc. Then why we do want another Input Method platform?

First of all, SCIM is a common IM platform written in C++. It abstracts input method interface into several classes and try to make these classes as simple and independent as possible. With such simple interfaces, developers can write their own input method in a few lines code very easily.

Second, SCIM is highly modularized: most components can be implemented as dynamically loadable modules, thus can be loaded at runtime as you wish. For example, input methods written for SCIM could be IMEngine modules, and users can use such IMEngine modules combined with different interface modules (FrontEnd) in different environment without rewrite/recompile the IMEngine modules.

Third, SCIM is a higher level library comparing with XIM or IIIMF.It has much simpler interface than XIM and IIIMF. And it can work with XIM or even IIIMF (in the future). SCIM can also support client specific input method interface, like gtk2 immodule and qt immodule.

Key features of SCIM:

* Fully Object Oriented structure written in C++.
* Highly modularized.
* Very flexible architecture, can be used as a dynamically loaded library as well as a C/S input method environment.
* Simple programming interface.
* Fully i18n support with UCS-4/UTF-8 encoding.
* Include many handy utility functions to speedup the development.
* GUI Panel with very rich features.
* Unified configuration framework.

The goal of SCIM:

* Act as an unified frontend for current available input method libraries. Currently bindings to uim and m17n library are available.
* Act as a language engine of IIIMF input method framework (TBD).
* Provide as many native IMEngines as possible.
* Support as many input method protocol/interface as possible.
* Support as many operating systems as possible.