Revision: 6380
Author: ek.kato
Date: Fri May  7 03:03:24 2010
Log: * doc/PLUGIN : Update.

http://code.google.com/p/uim/source/detail?r=6380

Modified:
 /trunk/doc/PLUGIN

=======================================
--- /trunk/doc/PLUGIN   Sat Jan 15 02:52:17 2005
+++ /trunk/doc/PLUGIN   Fri May  7 03:03:24 2010
@@ -1,33 +1,41 @@
 Plugin for uim

-From 0.4.6, uim supports plugin system which loads library and scheme
-definition. uim's plugin consist of both scheme and library.
-
-    ___________    (load-plugin "foo")
+------------------------------------------------------------------------------
+- Traditional input method plugin system
+
+uim supports plugin system which loads dynamic library and scheme definition
+as a input method module.
+
+uim's plugin may consist of scheme file and/or dynamic library.
+
+    ___________    (require-module "foo")
    |           | ------------------+--->  libuim-foo.so
    |  libuim   |                   |
    |___________|                   +--->  foo.scm

- When called (load-plugin "foo") from libuim scheme engine, libuim-foo.so
- is loaded and call 'plugin_instance_init' in libuim-foo.so first. After
- loading libuim-foo.so is succeeded, 'foo.scm' is loaded.
+ When called (require-module "foo") from libuim scheme engine, libuim-foo.so + is loaded if existed and call 'plugin_instance_init' in libuim-foo.so first.
+ After that 'foo.scm' is loaded if existed.

 * For end users
- If you want to install 3rd party plugin, you have to place both the shared
- object and scheme file to ~/.uim.d/plugin/.
- For example, if you want to install "foo", you have to locate both libuim-foo.so
- and foo.scm to ~/.uim.d/plugin. And you have to add to ~/.uim as follows,
-
- (load-plugin "foo")
+ If you want to install 3rd party plugin, you have to place both the dynamic
+ shared object and scheme file to ~/.uim.d/plugin/.
+ For example, if you want to install "foo", you have to put both
+ libuim-foo.so and foo.scm to ~/.uim.d/plugin. And you need to invoke
+ following command to enable the plugin.
+
+   $ uim-module-manager --register foo --path=~/.uim.d/plugin

 * For system admins
- If you want to install 3rd party plugin, you have to place the shared object - to ${libdatadir}/plugin/ and place the scheme library to ${datadir}/plugin. + If you want to install 3rd party plugin, you have to place the dynamic shared
+ object to ${pkglibdir}/plugin/ and place the scheme library to
+ ${pkgdatadir}/.
+
For example, if you want to install "foo", you have to install libuim-foo.so - to ${libdatadir}/plugin and foo.scm to ${datadir}/plugin. If you want to enable
- this for all users put it as follows in ${datadir}/loader.scm,
-
- (load-plugin "foo")
+ to ${pkglibdir}/plugin and foo.scm to ${pkgdatadir}/. If you want to enable
+ this for all users, invoke following command.
+
+   $ sudo uim-module-manager --register foo

 * For plugin developers
plugin_instance_init(void): Called when plugin is being loaded. In most case,
@@ -41,3 +49,31 @@

   2. Plugin unloading
    call plugin_instance_quit -> dlclose(libuim-foo.so)
+
+------------------------------------------------------------------------------
+- Dynamic library loading
+
+From 1.6.0, uim supports plugin system which loads dynamic library explicitly
+from scheme file.  Use this system if you want to use external C code or
+library from scheme side.
+
+    ___________  (require "foo") --> (require-dynlib "bar")
+   |           |
+   |  libuim   | ---------->  foo.scm --------> libuim-bar.so
+   |___________|
+
+ When called (require-dynlib "bar") from the top of foo.scm, libuim-bar.so is
+ loaded and 'plugin_instance_init' in libuim-bar.so is called.
+
+* For developers
+ plugin_instance_init(void): Called when plugin is being loaded. In most case, + initialize variables and bind scheme symbol and C
+                             functions.
+ plugin_instance_quit(void): Called when plugin is being unloaded.
+
+ - Plugin's loading scheme:
+  1. Plugin loading
+ (require-dynlib "foo") -> dlopen(libuim-foo.so) -> call plugin_instance_init -> (provide "foo")
+
+  2. Plugin unloading
+ (dynlib-unload "foo") -> call plugin_instance_quit -> dlclose(libuim-foo.so)

Reply via email to